rabbitmq AmqpClient 使用Direct 交换机投递与接收消息,C++代码示例
// 以DIRECT 交换机和ROUTING_KEY的方式进行消息的发布与订阅
// send
// strUri = "amqp://guest:guest@192.168.30.11:8820/test"
// strUri = "amqp://[帐户名]:[密码]@[服务主机以及端口]/[虚拟机目录]
bool PublicshExchangeDirect(const std::string &strUri, const std::string &strDirectExchange)
{
// 连接到rabbitMQ 服务器
AmqpClient::Channel::ptr_t channel =
AmqpClient::Channel::CreateFromUri(strUri);
if (channel == nullptr)
{
std::cout << "channel is nullptr" << std::endl;
return false;
} // 创建指定类型的交换 机
channel->DeclareExchange(strDirectExchange, AmqpClient::Channel::EXCHANGE_TYPE_DIRECT); while (true)
{
// 发送消息,例 :
// > info info infomation
// > trace trace infomation
// > debug debug infomation
// > error error infomation
std::string strSeverity;
std::string strBody;
std::cout << "Enter [severity info]: ";
std::cin >> strSeverity;
std::getline(std::cin, strBody);
if (strBody == "quit")
break;
if (strBody.empty())
continue; std::cout << "strSeverity: " << strSeverity << "." << std::endl;
std::cout << "strBody: " << strBody << "." << std::endl; // 发布消息到rabbitMQ
// strSeverity 指定该消息的routing_key, 在接收端 只有绑定了该routing_key 的队列 才会接收到该消息。
channel->BasicPublish(strDirectExchange, strSeverity,
AmqpClient::basicMessage::Create(strBody)); std::cout << "publicsh: " << strBody << std::endl;
} return true;
} // receive
void ReceiveDirectExchange(const std::string &strUri, const std::string &strDirectExchange)
{
AmqpClient::Channel::ptr_t channel =
AmqpClient::Channel::CreateFromUri(strUri);
if (channel == nullptr)
{
std::cout << "failed" << std::endl;
return;
} // 创建指定类型的交换机,我们将从该交换 机中读取消息
channel->DeclareExchange(strDirectExchange, AmqpClient::Channel::EXCHANGE_TYPE_DIRECT); std::string strQName = "queue_direct";
// 第一个参数为空,则系统默认生成随机名称
// 第三个参数(durable)表明队列 是否持久化
// durable:true、false。 true:服务器重启会保留下来Exchange。
// 警告:仅设置此选项,不代表消息持久化。即不保证重启后消息还在。
channel->DeclareQueue(strQName, false, true, false, false); // 队列绑定我们感 兴趣的routing_key, 表示 我们只接收这些routing_key 相关的消息。
channel->BindQueue(strQName, strDirectExchange, "info");
channel->BindQueue(strQName, strDirectExchange, "trace");
channel->BindQueue(strQName, strDirectExchange, "error"); // 得到消费者的相关标记,用于订阅rabbitMQ 上的指定消息。
// 将第4个参数改为false,开启消息确认。
// 需要调用channel->BasicAck(xxx);
// 服务器上面的消息才会被清除,否则将一直保留在rabbitMQ 服务端 。
// 将第5个参数改为false,取消独占队列。
std::string strConsumer = channel->BasicConsume(strQName, "", true, false, false, ); while (true)
{
std::cout << "[RECIVE]: ";
AmqpClient::Envelope::ptr_t envelope =
channel->BasicConsumeMessage(strConsumer); std::cout << envelope->Message()->Body() << std::endl;
// 下面两个接口是一样的
channel->BasicAck(envelope);
// channel->BasicAck(envelope->GetDeliveryInfo());
} channel->BasicCancel(consumer_tag);
}
rabbitmq AmqpClient 使用Direct 交换机投递与接收消息,C++代码示例的更多相关文章
- rabbitmq AmqpClient 使用Topic 交换机投递与接收消息,C++代码示例
// strUri = "amqp://guest:guest@192.168.30.11:8820/test" // strUri = "amqp://[帐户名]:[密 ...
- rabbitmq AmqpClient 使用Fanout 交换机投递与接收消息,C++代码示例
fanout交换器重点内容非常简单.它只会将接收到的所有消息广播发送到它所知道的所有队列. 投递消息到交换机: #include "SimpleAmqpClient/SimpleAmqpCl ...
- Android Java使用JavaMail API发送和接收邮件的代码示例
JavaMail是Oracle甲骨文开发的Java邮件类API,支持多种邮件协议,这里我们就来看一下Java使用JavaMail API发送和接收邮件的代码示例 使用Javamail发送邮件,必需的j ...
- rabbitmq AmqpClient 使用Topic 交换机同一个channel 同时多个队列 ,多个交换机,C++代码示例
// 消息发送 bool PublishExchangeTopicMulti(const std::string &strUri) { AmqpClient::Channel::ptr_t c ...
- KeyBord事件分发和接收简要过程代码示例
step1:调用ViewRootImpl的内部类ImeInputStage的成员函数onProcess来判断输入法是否处于激活状态 final class ImeInputStage extends ...
- RabbitMQ之Exchange Direct模式
场景: 生产者发送消息到交换机并指定一个路由key, 消费者队列绑定到交换机时要指定路由key(key匹配就能接受消息,key不匹配就不能接受消息) 例如:我们可以把路由key设置为insert ,那 ...
- RabbitMQ广播:direct模式
一. 消息的广播需要exchange:exchange是一个转发器,其实把消息发给RabbitMQ里的exchange fanout: 所有bind到此exchange的queue都可以接收消息,广播 ...
- rabbitmq不同模式的交换机使用
交换机的功能主要是接收消息并且转发到绑定的队列,交换机不存储消息,在启用ack模式后,交换机找不到队列会返回错误.交换机有四种类型:Direct, topic, Headers and Fanout( ...
- Rabbitmq的几种交换机模式
Rabbitmq的核心概念(如下图所示):有虚拟主机.交换机.队列.绑定: 交换机可以理解成具有路由表的路由程序,仅此而已.每个消息都有一个称为路由键(routing key)的属性,就是一个简单的字 ...
随机推荐
- mac上如何搜索文件?
在Mac上如果你用会了搜索功能那绝对是个事半功倍的技巧.因为Mac本身有强大的文件索引能力, 可以帮你快速的找到你需要的文件.就好比我要找到上周修改过的word文档应该怎么办? * 使用语音命令让Si ...
- Test 6.23 T1 扫雷
题目背景 题目描述 输入格式 输出格式 样例输入输出 数据范围 解析 我们设两个作弊器的参数分别为\((a_1,b_1)\)和\((a_2,b_2)\),那么设 \[ S1=\frac{a_1}{b_ ...
- jenkins解决python不是内部命令
1.在 Windows 提示符下运行是没有问题. 2.把Jenkins项目配置中 python main.py 修改成python可执行文件全路径:D:\Python35\python.exe m ...
- dede标签大全
想必很多人对后台不熟悉,并且觉得很难.其实不难,只是你们没有找到合适的方法学习而已!只有找到一个合适的学习方法,不管做什么事情,我想都很容易.学习讲究的是效率,而效率又是由思路决定的.就拿网页制作来说 ...
- php stripos()函数 语法
php stripos()函数 语法 作用:寻找字符串中某字符最先出现的位置,不区分大小写.直线电参数 语法:stripos(string,find,start) 参数: 参数 描述 string ...
- 做网站用php还是python
单纯说做网站,显然是php更适合,php是专为web而生,而Python只是可以做web.php也比python更简单,更容易学,对于新手更友好. 从权威技术网站w3techs.com2017年7月2 ...
- sublime text 3 Package Control无法下载插件
Package Control无法下载插件,发现是因为被墙了. ubuntu18.04 下使用privoxy设置全局参见:https://www.cnblogs.com/linjunfu/p/1101 ...
- Oracle数据库字符集问题
Oracle数据库的字符集问题,也涉及作为服务器操作系统的CentOS或者Windows的字符集与Oracle字符集之间的关联关系Oracle的字符集,这个问题的提出是因为两个原因:一是遇到一个DMP ...
- UNITY编辑器模式下static变量的坑
在unity中写编辑器扩展工具,如在编辑器中加个菜单,点击这个菜单项时执行打包功能. 类如下,其中的静态变量,如果每次进来不清空,则LIST会越来越大,打包函数执行完后系统不会帮我们清空 #if UN ...
- ruby中=>是什么意思
如果是对数组赋值,下标 => 值例如 a = {1 => "1",2 => "22"}a[1] "1"a[2] " ...