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)的属性,就是一个简单的字 ...
随机推荐
- Task9.Attention
注意力模型最近几年在深度学习各个领域被广泛使用,无论是图像处理.语音识别还是自然语言处理的各种不同类型的任务中,都很容易遇到注意力模型的身影.所以,了解注意力机制的工作原理对于关注深度学习技术发展的技 ...
- 【CF1243B1】Character Swap (Easy Version)【思维】
题意:给你两个字符串,问是否存在交换方案使得两个字符串变成一样的,方案为只交换一次且只交换s1与s2里的一个字符 题解:若一开始就相同,则存在交换方案 若一开始不同的位置为1个或大于2个,则不存在方案 ...
- MySQL JOIN 多表连接
除了常用的两个表连接之外,SQL(MySQL) JOIN 语法还支持多表连接.多表连接基本语法如下: 1 ... FROM table1 INNER|LEFT|RIGHT JOIN table2 ON ...
- create-react-app下的@修饰器正确的使用方式记录
在create-react-app下使用es7的@修饰器会报错''Support for the experimental syntax 'decorators-legacy' isn't curre ...
- 给网页标题添加icon小图标
so easy: 给网页标题添加icon小图标: 直接在html文件的head部分添加下面代码(注意href的路径): <link rel="icon" type=" ...
- php面试专题---22、网站优化 总结
php面试专题---22.网站优化 总结 一.总结 一句话总结: 主要从前端.后端.数据库.资源四个方面开始发散 前端浏览器缓存和数据压缩前端优化(减少HTTP请求次数) 资源流量优化(防盗链处理)C ...
- noi.ac #227 random
分析 我们发现实际只要计算a[i]>b[j]和a[i]<b[j]哪种多即可 代码 #include<bits/stdc++.h> using namespace std; ], ...
- EZOJ #375高速公路
分析 我们可以先跑一遍全价的最短路 之后我们枚举这个第k大的价格w[i] 将其它边减这个边的权值和0取max 在跑出最短路之后加上减去的费用,即w[i]*k 我们发现如果价值大于w[i]的边小于k个 ...
- PHP 中 Error 和 Exception 两种异常的特性及日志记录或显示
PHP 文档: Error Exception 参考: 深入理解PHP原理之异常机制 我们什么时候应该使用异常 异常和错误 所有示例基于 PHP7. 应用中,关于错误的最佳实践是: 必须报告错误 开发 ...
- 动态规划-递推-HDU2048
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=2048 全错=全不匹配 设当前全错的个数是dp[n] 那么前(n-1)个全错的话,第n个数就可以从前(n- ...