rabbitmq-c++(SimpleAmqpClient) 笔记代码五
来源:互联网 发布:淘宝新店旺旺提取神器 编辑:程序博客网 时间:2024/06/08 21:13
前记
之前也写过rabbitmq的笔记(链接点此),但当时是参见官网的java版本(链接点此)所写,更像是译文,而后在实际过程中,要用到C++来使用消息队列,然而官网却没有C++相关的教程,经过自己的摸索,我把官网的教程代码翻译成C++版本,并做了些注释,希望能对有需要的人有帮助。
需要安装
使用C++来写rabbitmq代码时,我使用的是SimpleAmqpClient,需要安装的还挺多,但其github上也有详细的各部分安装地址,可以参考,基本不会有太大问题,如有问题,可在评论提问,如有解决办法,必定回复。
笔记代码五
因为代码其实跟java版本比较相似,一些函数(方法)较为不同,概念上还是大同异端,如果有概念上的不懂,可参照RabbitMQ 学习笔记(五):Topics,接下来为代码部分,跟rabbitmq官网其它语言的例子相似,不做过多解释,有兴趣也可以看看官网其它语言此例子如何写。
EmitLogTopic.cpp代码如下:
#include "SimpleAmqpClient/SimpleAmqpClient.h"#include <iostream>int main() { AmqpClient::Channel::ptr_t channel = AmqpClient::Channel::Create("localhost"); std::string exchange_name = "topic_logs"; channel->DeclareExchange(exchange_name, AmqpClient::Channel::EXCHANGE_TYPE_TOPIC); //创建一个名为"direct_logs"的交换器,类型为topic。 std::string queue_name = channel->DeclareQueue("", false, true, false, false); //第一个参数为空,系统默认生成随机队列名称。 channel->BindQueue(queue_name, exchange_name, ""); //将队列与交换器绑定。 //这里routingKey的值为"",表示所有信息都会被发送。 while (1) { std::cout << "请输入 [routing_key1.routing_key2] [message], 如 disk.error 404" << std::endl; std::string severity, message; std::cin >> severity >> message; //可输入例如 "disk.info 666" 或者 "any.warning 123" 或者 "some.error //404"表示信息严重程度和内容。 channel->BasicPublish(exchange_name, severity, AmqpClient::BasicMessage::Create(message)); //消息的severity作为routing_key。 std::cout << "[x] send " << severity << ": " << message << std::endl; }}
ReceiveLogsTopic.cpp的代码如下:
#include "SimpleAmqpClient/SimpleAmqpClient.h"#include <iostream>int main(){ AmqpClient::Channel::ptr_t channel = AmqpClient::Channel::Create("localhost"); std::string exchange_name = "topic_logs"; channel->DeclareExchange(exchange_name, AmqpClient::Channel::EXCHANGE_TYPE_TOPIC); //创建一个名为"topic_logs"的交换器,类型为topic。 std::string queue_name = channel->DeclareQueue("", false, true, false, false); //第一个参数为空,系统默认生成随机队列名称。 //第三个参数表明队列是持久的(durable )。 std::cout << "请输入交换器订阅的类型(如disk.info, 省略可用*,如*.info,disk.*):"; 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
如EmitLogTopic.cpp的编译命令为:
g++ EmitLogTopic.cpp -o EmitLogTopic -lSimpleAmqpClient
即可生成可执行文件EmitLogTopic
相关链接
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
- rabbitmq-c++(SimpleAmqpClient) 笔记代码五
- rabbitmq-c++(SimpleAmqpClient) 笔记代码
- rabbitmq-c++(SimpleAmqpClient) 笔记代码一
- rabbitmq-c++(SimpleAmqpClient) 笔记代码二
- rabbitmq-c++(SimpleAmqpClient) 笔记代码三
- rabbitmq-c++(SimpleAmqpClient) 笔记代码四
- rabbitmq-c++(SimpleAmqpClient) 笔记代码六
- Rabbitmq+SimpleAmqpClient--之vs2010编译
- linux下安装c++ rabbitmq客户端SimpleAmqpClient
- 【rabbitmq】解决SimpleAmqpClient创建连接时阻塞的问题
- linux下rabbitmq SimpleAmqpClient客户端的使用的简单例子
- rabbitMQ学习笔记(五) 消息路由
- rabbitMQ学习笔记(五) 消息路由
- RabbitMQ 学习笔记(五):Topics
- RabbitMQ(五)
- RabbitMq学习笔记五:路由选择(Routing)
- RabbitMq学习笔记(五)—— Topic
- Build SimpleAmqpClient
- 错误处理-According to TLD or attribute directive in tag file, attribute test does not accept any expres
- Tableau联动筛选和全局筛选
- [WUA APIs]AutomatciUpdatesSettings
- C# Array.sort排序
- Intellij idea破解办法
- rabbitmq-c++(SimpleAmqpClient) 笔记代码五
- [Python]200个激活码保存到Redis非关系型数据库中
- [WUA APIs]Category
- codeblocks编译运行与调试
- 12.编写COM进程外组件
- [WUA APIs]CategoryCollection
- python3.5中,import sqlite3 出现 no module named _sqlite3的解决方法
- [WUA APIs]DownloadResults
- spring整合quartz