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)的属性,就是一个简单的字 ...
随机推荐
- iOS取消按钮点击时的动画效果
当存在图片或者背景图片时,点击图片往往意味着高亮,但是高亮的同时往往还伴随着按钮按下的动画效果,取消这种动画效果只需两步 Btn.adjustImageWhenHighlighted =NO; [Bt ...
- Django2 + python3 上传图片
. ├── db.sqlite3 ├── manage.py ├── myImg │ ├── __init__.py │ ├── __pycache__ │ │ ├── __init_ ...
- BZOJ 4804: 欧拉心算 欧拉函数
Description 给出一个数字N Input 第一行为一个正整数T,表示数据组数. 接下来T行为询问,每行包含一个正整数N. T<=5000,N<=10^7 题解: 求 $\sum_ ...
- [转]Html.DropDownList()的用法 ( Asp.Net MVC)
Html.DropDownList()赋默认值: 页面代码如下: <% List<SelectListItem> list = new List<SelectListItem& ...
- Codeforces 830A. Office Keys (贪心二分 or DP)
原题链接:http://codeforces.com/contest/830/problem/A 题意:在一条数轴上分别有n个人和k把钥匙(n<=k),以及一个目的地,每个人要各自拿到一个钥匙后 ...
- UE4使用Dll
Part1. 创建和编译Dll VS中创建Visual C++ > Win32 Console Application 工程模板,选择Dll,并勾上”Empty Project”. 在Solut ...
- Docker容器日常操作命令
在Docker的运用中,从下载镜像,启动容器,在容器中输入命令来运行程序,这些命令都是手工一条条往里输入的,无法重复利用,而且效率很低.所以就需要一 种文件或脚本,我们把想执行的操作以命令的方式写入其 ...
- BurpSuite从下载安装到配置使用
为解决一个XSS安全问题,第一次使用BurpSuite,记录一下下载安装到配置使用的过程,希望能对第一次使用该工具的朋友有所帮助. 一.下载及安装 直接百度下载破解版,我下的版本是burpsuite_ ...
- Linux运维工程师前景
什么是Linux运维 如果我们是一辆高速行驶在高速公路上的汽车,那运维工程师就是司机兼维修工,这个司机可不简单,有时需要在高速行驶过程中更换轮胎.并根据道路情况换档位.当汽车速度越来越快时,汽车本身不 ...
- Vagrant 构建 LNMP 一致环境
GitHub 地址 <--- 所有文件都在这里 前提条件 安装 Vagrant,VirtualBox. 设置 下载软件并放入 soft 目录 MySQL:mysql-5.7.22-1.el7.x ...