💖 简介
RocketMQ-Client-CPP是Apache RocketMQ的C/C++客户端,是一个具有低延迟、高性能和高可靠性、万亿级容量和灵活可扩展性的分布式消息传递和流平台。
如有理解不对的地方,欢迎各位指出,大家共同交流和学习。 如有帮助,请点赞加支持! 送人玫瑰手有余香!🌹🌹🌹
💖 生产者
vi asynProducer.cpp
🏆 代码
#include <iostream>
#include <chrono>
#include <thread>
#include <DefaultMQProducer.h>
#include <vector>
using namespace std;
using namespace rocketmq;
/**
* 异步发送消息
*/
void asyncSendMessage();
// 测试main方法
int main() {
asyncSendMessage();
}
/**
* 初始化消息生产者
* @return 消息生产者
*/
DefaultMQProducer initProducer() {
// 初始化消息生产者,并设置生产者组名称
DefaultMQProducer producer("group2");
// 设置服务地址
producer.setNamesrvAddr("192.168.159.5:9876");
// 请确保参数设置完成在启动之前
producer.start();
return producer;
}
// 异步回调
class MySendCallback : public SendCallback {
virtual void onSuccess(SendResult &sendResult) {
std::cout << "消息结果:" << sendResult.getSendStatus() << ", 消息ID: " << sendResult.getMsgId()
<< std::endl;
}
virtual void onException(MQException &e) { cout << "send Exception\n"; }
};
void asyncSendMessage() {
std::cout << "=======Before sending messages=======" << std::endl;
// 初始化消息生产者
DefaultMQProducer producer = initProducer();
int count = 10;
for (int i = 0; i < count; ++i) {
// topic名称及消息tag设置
string mess="Hello "+to_string(i);//消息内容
MQMessage msg("topic1",
"tags",
"keys",
mess
);
try {
// 异步发送消息
producer.send(msg, new MySendCallback());
this_thread::sleep_for(chrono::seconds(1));
} catch (MQException e) {
std::cout << "ErrorCode: " << e.GetError() << " Exception:" << e.what() << std::endl;
}
}
// 打印发送结果
std::cout << "成功发送 " << count << " 个消息。"<< std::endl;
// 释放资源
producer.shutdown();
}
🏆 编译
g++ -o ./bin/asynProducer asynProducer.cpp -I ./include/ -L./bin/ -lrocketmq -lpthread -lz -ldl -lrt -std=c++11
💖 消费者
vi asynConsumer.cpp
🏆 代码
#include <unistd.h>
#include <stdlib.h>
#include <iostream>
#include <string>
#include "CPushConsumer.h"
#include "CMessageExt.h"
using namespace std;
// 消费消息
int doConsumeMessage(struct CPushConsumer *consumer, CMessageExt *msgExt)
{
cout << "[收到消息:] " << "消息主题:" << GetMessageTopic(msgExt) << ", 消息标签:" << GetMessageTags(msgExt)
<< ", 消息key值:" << GetMessageKeys(msgExt) << ",消息内容:" << GetMessageBody(msgExt) << endl;
return E_CONSUME_SUCCESS;
}
int main(int argc, char *argv[])
{
CPushConsumer *consumer = CreatePushConsumer("group2");
SetPushConsumerNameServerAddress(consumer, "192.168.159.5:9876");
Subscribe(consumer, "topic1", "*");
// 注册消息回调函数
RegisterMessageCallback(consumer, doConsumeMessage);
// start push consumer
StartPushConsumer(consumer);
cout << "Push consumer start, and listening message within 1min..." << endl;
for (int i = 0; i < 6; i++)
{
cout << "Already Running: " << (i * 10) << "S" << endl;
usleep(1000);
}
// shutdown push consumer
ShutdownPushConsumer(consumer);
// destroy push consumer
DestroyPushConsumer(consumer);
cout << "PushConsumer Shutdown!" << endl;
return 0;
}
🏆 编译
g++ -o ./bin/asynConsumer asynConsumer.cpp -I ./include/ -L./bin/ -lrocketmq -lpthread -lz -ldl -lrt -std=c++11