ActiveMQ C ++ Синхронный потребитель - PullRequest
0 голосов
/ 15 ноября 2011

Есть несколько примеров кода для клиента ActiveMQ C ++, которые являются асинхронными. Я ищу синхронного потребителя. Я просто хочу отправлять и получать сообщения. Код, который я указал, использует асинхронный и не уверен, как сделать из него синхронный класс.

Класс MessageConsumer указывает, что существует синхронный вызов, то есть: recieve (). Когда я вызываю это на моем объекте, это терпит неудачу следующим образом, как я могу это исправить? Как я могу просто позвонить, чтобы получить из очереди.

ActiveMQConsumer.cc: In member function `virtual void ActiveMQConsumer::getMessage()':
ActiveMQConsumer.cc:62: error: 'class cms::MessageConsumer' has no member named 'recieve'
In file included from ActiveMQWrapper.cc:29:
ActiveMQConsumer.cc: In member function `virtual void ActiveMQConsumer::getMessage()':
ActiveMQConsumer.cc:62: error: 'class cms::MessageConsumer' has no member named 'recieve'
ActiveMQWrapper.cc: In static member function `static std::string ActiveMQWrapper::get()':
ActiveMQWrapper.cc:58: error: base operand of `->' has non-pointer type `ActiveMQConsumer'

и вот код:

void ActiveMQWrapper::get(){

        std:string brokerURI = "tcp://localhost:61613?wireFormat=stomp";

        ActiveMQConsumer consumer( brokerURI);
        consumer->getMessage();
}

// ActiveMQConsumer class code is following

virtual void getMessage() {

        try {

            auto_ptr<ConnectionFactory> connectionFactory(ConnectionFactory::createCMSConnectionFactory( brokerURI ) );
            connection = connectionFactory->createConnection();
            connection->start();
            session = connection->createSession( Session::AUTO_ACKNOWLEDGE );
            destination = session->createQueue( "TEST.Prototype" );
            consumer = session->createConsumer( destination );
            std::cout<<consumer->recieve();
        } catch( CMSException& e ) {

            e.printStackTrace();
        }
    }

1 Ответ

1 голос
/ 15 ноября 2011

Первые две ошибки связаны с ошибкой при получении: измените std::cout<<consumer->recieve(); на std::cout<<consumer->receive();

Последняя ошибка связана с тем, что consumer используется в качестве указателя: измените строку consumer->getMessage(); на consumer.getMessage();

...