RocketMQ C++ SDK 收取普通消息 include include include "rocketmq/DefaultMQPushConsumer.h" using namespace rocketmq; class ConcurrentMessageListener : public MessageListenerConcurrently { public: ConsumeStatus consumeMessage(const std::vector &msgs) { for (auto item msgs.begin(); item ! msgs.end(); item++) { std::cout getTopic() getMsgId() setNamesrvAddr("your access point"); consumer>setSessionCredentials("ak", "sk"); ConcurrentMessageListener messageListener new ConcurrentMessageListener(); consumer>subscribe("topicname", "tag"); consumer>registerMessageListener(messageListener); consumer>start(); std::thisthread::sleepfor(std::chrono::seconds(60)); consumer>shutdown(); return 0; } 使用C++客户端收发顺序消息 简介 顺序消息分为两类,全局顺序消息和分区顺序消息,通过队列数区分。 全局顺序: 对于指定的一个 Topic,所有消息的生产和消费需要遵循一定的顺序,消息的消费顺序必须和生产顺序一致,即需要严格的先入先出 FIFO的顺序进行发布和消费。 分区顺序: 对于指定的一个 Topic,其中每一个分区的消息生产与消费是有序的,同一个队列内的消息按照严格的 FIFO 顺序进行发布和订阅。消息投递到哪一个分区由消息的 Sharding Key 来进行区分。在 SDK 中可以通过指定 Sharding Key 和回调函数来控制消息投递到哪个分区。 发送顺序消息 include include include include "rocketmq/DefaultMQProducer.h" using namespace std; using namespace rocketmq; class DefineSelectMessageQueue : public MessageQueueSelector { public: MQMessageQueue select(const std::vector &mqs, const MQMessage &msg, void arg) { //若希望全局有序,请修改对应index int orderId staticcast (arg); int index orderId % mqs.size(); return mqs[index]; } }; int main(){ DefaultMQProducer producer("groupname"); //填写分布式消息服务RocketMQ版的接入点 producer.setNamesrvAddr("your access point"); //填写分布式消息服务RocketMQ版的ak、sk producer.setSessionCredentials("ak", "sk", "channel"); producer.start(); DefineSelectMessageQueue queueSelector new DefineSelectMessageQueue(); int count 64; for (int i 0; i < count; ++i) { MQMessage msg("youtopicname", "TAG", "msg content"); try { SendResult sendResult producer.send(msg, queueSelector, &i, 3, false); std::cout << "SendResult:" << sendResult.getSendStatus() << ", Message ID: " << sendResult.getMsgId() << std::endl; thisthread::sleepfor(chrono::seconds(1)); } catch (MQException e) { std::cout << "ErrorCode: " << e.GetError() << " Exception:" << e.what() << std::endl; } } std::cout << "Send " << count << " messages OK, costs" << std::endl; producer.shutdown(); return 0; }