操作场景
本文以调用 C++ SDK 为例介绍通过开源 SDK 实现消息收发的操作过程,帮助您更好地理解消息收发的完整过程。
前提条件
- 安装 GCC
- 下载 Demo
操作步骤
准备环境。
- 需要在客户端环境安装 RocketMQ-Client-CPP 库,根据官方文档进行安装即可 安装 CPP 动态库,推荐使用 master 分支构建。
- 在项目中引入 RocketMQ-Client-CPP 相关头文件及动态库。
初始化消息生产者。
// 设置生产组名称 DefaultMQProducer producer(groupName); // 设置服务接入地址 producer.setNamesrvAddr(nameserver); // 设置用户权限 producer.setSessionCredentials( accessKey, // 角色密钥 secretKey, // 角色名称 ""); // 设置命名空间(命名空间全称) producer.setNameSpace(namespace); // 请确保参数设置完成在启动之前 producer.start();发送消息。
// 初始化消息内容 MQMessage msg( topicName, // topic名称 TAGS, // 消息tag KEYS, // 消息业务key "Hello cpp client, this is a message." // 消息内容 ); try { // 发送消息 SendResult sendResult = producer.send(msg); std::cout << "SendResult:" << sendResult.getSendStatus() << ", Message ID: " << sendResult.getMsgId() << std::endl; } catch (MQException e) { std::cout << "ErrorCode: " << e.GetError() << " Exception:" << e.what() << std::endl; }资源释放。
// 释放资源 producer.shutdown();初始化消费者。
// 消息监听 class ExampleMessageListener : public MessageListenerConcurrently { public: ConsumeStatus consumeMessage(const std::vector<MQMessageExt> &msgs) { for (auto item = msgs.begin(); item != msgs.end(); item++) { // 业务 std::cout << "Received Message Topic:" << item->getTopic() << ", MsgId:" << item->getMsgId() << ", TAGS:" << item->getTags() << ", KEYS:" << item->getKeys() << ", Body:" << item->getBody() << std::endl; } // 消费成功返回CONSUME_SUCCESS return CONSUME_SUCCESS; // 消费失败返回RECONSUME_LATER,该消息将会被重新消费 // return RECONSUME_LATER; } }; // 初始化消费者 DefaultMQPushConsumer *consumer = new DefaultMQPushConsumer(groupName); // 设置服务地址 consumer->setNamesrvAddr(nameserver); // 设置用户权限 consumer->setSessionCredentials( accessKey, secretKey, ""); // 设置命名空间 consumer->setNameSpace(namespace); // 设置实例名称 consumer->setInstanceName("CppClient"); // 请注册自定义侦听函数用来处理接收到的消息,并返回响应的处理结果。 ExampleMessageListener *messageListener = new ExampleMessageListener(); // 订阅消息 consumer->subscribe(topicName, TAGS); // 设置消息监听 consumer->registerMessageListener(messageListener); // 准备工作完成,必须调用启动函数,才可以正常工作。 consumer->start();资源释放。
// 资源释放 consumer->shutdown();