rabbitmq-c++(SimpleAmqpClient) 笔记代码四

前记

之前也写过rabbitmq的笔记(链接点此),但当时是参见官网的java版本(链接点此)所写,更像是译文,而后在实际过程中,要用到C++来使用消息队列,然而官网却没有C++相关的教程,经过自己的摸索,我把官网的教程代码翻译成C++版本,并做了些注释,希望能对有需要的人有帮助。

需要安装

使用C++来写rabbitmq代码时,我使用的是SimpleAmqpClient,需要安装的还挺多,但其github上也有详细的各部分安装地址,可以参考,基本不会有太大问题,如有问题,可在评论提问,如有解决办法,必定回复。

笔记代码四

因为代码其实跟java版本比较相似,一些函数(方法)较为不同,概念上还是大同异端,如果有概念上的不懂,可参照RabbitMQ 学习笔记(四):Routing,接下来为代码部分,跟rabbitmq官网其它语言的例子相似,不做过多解释,有兴趣也可以看看官网其它语言此例子如何写。

EmitLogDirect.cpp代码如下:

#include "SimpleAmqpClient/SimpleAmqpClient.h"
#include <iostream>

int main() {
  AmqpClient::Channel::ptr_t channel = AmqpClient::Channel::Create("localhost");

  std::string exchange_name = "direct_logs";
  channel->DeclareExchange(exchange_name,
                           AmqpClient::Channel::EXCHANGE_TYPE_DIRECT);
  //创建一个名为"direct_logs"的交换器,类型为direct。

  std::string queue_name = channel->DeclareQueue("", false, true, false, false);
  //第一个参数为空,系统默认生成随机队列名称。

  channel->BindQueue(queue_name, exchange_name, "");
  //将队列与交换器绑定。
  //这里routingKey的值为"",表示所有信息都会被发送。

  while (1) {
    std::cout << "请输入 [routing_key] [message], 如 error 404" << std::endl;

    std::string severity, message;
    std::cin >> severity >> message;
    //可输入例如 "info 666" 或者 "warning 123" 或者 "error
    //404"表示信息严重程度和内容。

    channel->BasicPublish(exchange_name, severity,
                          AmqpClient::BasicMessage::Create(message));
    //消息的severity作为routing_key。

    std::cout << "[x] send " << severity << ": " << message << std::endl;
  }
}

ReceiveLogsDirect.cpp代码如下:

#include "SimpleAmqpClient/SimpleAmqpClient.h"
#include <iostream>

int main() {
  AmqpClient::Channel::ptr_t channel = AmqpClient::Channel::Create("localhost");

  std::string exchange_name = "direct_logs";
  channel->DeclareExchange(exchange_name,
                           AmqpClient::Channel::EXCHANGE_TYPE_DIRECT);
  //创建一个名为"direct_logs"的交换器,类型为direct。

  std::string queue_name = channel->DeclareQueue("", false, true, false, false);
  //第一个参数为空,系统默认生成随机队列名称。
  //第三个参数表明队列是持久的(durable )。

  std::cout << "请输入交换器订阅的类型(info, error, warning):";
  std::string routing_key;
  std::cin >> routing_key;

  channel->BindQueue(queue_name, exchange_name, routing_key);
  //将队列与交换器绑定。

  std::string consumer_tag =
      channel->BasicConsume(queue_name, "", true, true, false, 1);
  //将第4个参数改为true,开启消息确认。
  //将第5个参数改为false,取消独占队列。

  while (1) {
    std::cout << "routing_key为" << routing_key << ",等待消息中" << std::endl;
    AmqpClient::Envelope::ptr_t envelope =
        channel->BasicConsumeMessage(consumer_tag);

    std::string severity = envelope->RoutingKey();
    std::string buffer = envelope->Message()->Body();

    std::cout << "[y] receve " << severity << ": " << buffer << std::endl;
  }

  channel->BasicCancel(consumer_tag);
}

注意:代码编译时需要加参数 -lSimpleAmqpClient
如EmitLogDirect.cpp的编译命令为:

g++ EmitLogDirect.cpp -o EmitLogDirect -lSimpleAmqpClient

即可生成可执行文件EmitLogDirect

相关链接

rabbitmq-c++(SimpleAmqpClient) 笔记代码系列:

rabbitmq-c++(SimpleAmqpClient) 笔记代码一
rabbitmq-c++(SimpleAmqpClient) 笔记代码二
rabbitmq-c++(SimpleAmqpClient) 笔记代码三
rabbitmq-c++(SimpleAmqpClient) 笔记代码四
rabbitmq-c++(SimpleAmqpClient) 笔记代码五
rabbitmq-c++(SimpleAmqpClient) 笔记代码六

RabbitMQ 学习笔记系列:

RabbitMQ 学习笔记(一):简单介绍及”Hello World”
RabbitMQ 学习笔记(二):work queues
RabbitMQ 学习笔记(三):Publish/Subscribe
RabbitMQ 学习笔记(四):Routing
RabbitMQ 学习笔记(五):Topics
RabbitMQ 学习笔记(六):RPC

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值