在ActiveMQ CMS中,使用消息消费者时可以通过设置预取计数器来限制每个消费者能够接收到的消息数。这种方法可以避免使用多线程。
下面是一个简单的代码示例:
#include
#include
#include
#include
#include
#include
using namespace cms;
int main(int argc, char* argv[]) {
try {
// 创建连接工厂
ConnectionFactory* connectionFactory = ConnectionFactory::createCMSConnectionFactory("tcp://localhost:61616");
// 创建连接
Connection* connection = connectionFactory->createConnection();
connection->start();
// 创建会话
Session* session = connection->createSession(Session::AUTO_ACKNOWLEDGE);
// 创建目标
Destination* destination = session->createQueue("TEST.FOO");
// 创建消费者
MessageConsumer* consumer = session->createConsumer(destination, "", false);
consumer->setMessageListener(new MessageListener() {
void onMessage(const Message* message) {
// 处理消息
}
});
// 设置预取计数器
consumer->setMessagePrefetchSize(1);
// 等待消息到达
while (true) {
// do nothing
}
// 关闭连接
connection->close();
} catch (CMSException& e) {
std::cerr << "Caught CMSException: " << e.getMessage() << std::endl;
}
return 0;
}