【发布时间】:2017-12-08 17:29:16
【问题描述】:
我正在使用activemq-cpp 3.7.0和VS 2010来构建客户端,服务器是ActiveMQ 5.8。我基于提到的 CMS 配置here,使用类似于以下的代码创建了一个消息使用者。 ConnClass 是 ExceptionListener 和 MessageListener。我只想在调用 cms::Session::commit() 之前使用一条消息。
void ConnClass::setup()
{
// Create a ConnectionFactory
std::tr1::shared_ptr<ConnectionFactory> connectionFactory(
ConnectionFactory::createCMSConnectionFactory(
"tcp://localhost:61616?cms.PrefetchPolicy.queuePrefetch=1");
// Create a Connection
m_connection = std::tr1::shared_ptr<cms::Connection>(
connectionFactory->createConnection());
m_connection->start();
m_connection->setExceptionListener(this);
// Create a Session
m_session = std::tr1::shared_ptr<cms::Session>(
m_connection->createSession(Session::SESSION_TRANSACTED));
// Create the destination (Queue)
m_destination = std::tr1::shared_ptr<cms::Destination>(
m_session->createQueue("myqueue?consumer.prefetchSize=1"));
// Create a MessageConsumer from the Session to the Queue
m_consumer = std::tr1::shared_ptr<cms::MessageConsumer>(
m_session->createConsumer( m_destination.get() ));
m_consumer->setMessageListener( this );
}
void ConnClass::onMessage( const Message* message )
{
// read message code ...
// schedule a processing event for
// another thread that calls m_session->commit() when done
}
问题是我在调用m_session->commit() 之前收到多条消息而不是一条消息——我知道这一点是因为commit() 调用是由用户输入触发的。如何确保在每次调用 commit() 之前只调用一次 onMessage()?
【问题讨论】:
标签: c++ activemq prefetch activemq-cpp