rocketmq-client-cpp实现异步消息

在这里插入图片描述

💖 简介

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值