rabbitmq AmqpClient 使用Fanout 交换机投递与接收消息,C++代码示例
2024-08-23 23:54:11
fanout交换器重点内容非常简单。
它只会将接收到的所有消息广播发送到它所知道的所有队列。
投递消息到交换机:
#include "SimpleAmqpClient/SimpleAmqpClient.h"
#include <iostream>
#include <string> int main() {
AmqpClient::Channel::ptr_t channel =
AmqpClient::Channel::Create("localhost"); //创建一个名为"fanout_logs"的交换器,类型为fanout。
std::string exchange_name = "fanout_logs";
channel->DeclareExchange(exchange_name,
AmqpClient::Channel::EXCHANGE_TYPE_FANOUT); // 这里不需要队列,生产者(投递方)不需要知道消息被投递到哪一个具体的队列,
// 只需要知道投递到哪一个交换机即可。
// 消息具体会被投递到哪个队列由交换机去处理。
// 实际上就是消费者所创建的队列只要绑定到此交换机就会收到该消息。
// 交换机会知道哪些队列绑定到了自己,他将消息投递给绑定到自己的所有队列。
#if 0
std::string queue_name = channel->DeclareQueue("", false, true, false, false);
//第一个参数为空,系统默认生成随机队列名称。 channel->BindQueue(queue_name, exchange_name, "");
//将队列与交换器绑定。
//这里routingKey的值为"",表示所有信息都会被发送。
#endif while () {
std::cout << "请输入要发送的信息:" << std::endl; std::string message;
std::getline(std::cin, message); channel->BasicPublish(exchange_name, "",
AmqpClient::BasicMessage::Create(message)); std::cout << "[x] send " << message << std::endl;
}
}
从交换 机获取消息
#include "SimpleAmqpClient/SimpleAmqpClient.h"
#include <iostream> int main() {
AmqpClient::Channel::ptr_t channel = AmqpClient::Channel::Create("localhost"); std::string exchange_name = "fanout_logs";
//创建一个名为"fanout_logs"的交换器,类型为fanout。
channel->DeclareExchange(exchange_name,
AmqpClient::Channel::EXCHANGE_TYPE_FANOUT); //第三个参数表明队列是持久的(durable )。
std::string queue_name = "queue_fanout"
channel->DeclareQueue(queue_name, false, true, false, false); //将队列与交换器绑定。
// routingKey的值将被 fanout交换器忽略。
channel->BindQueue(queue_name, exchange_name, ""); //将第4个参数改为true,开启消息确认。
//将第5个参数改为false,取消独占队列。
// 如果同时多个消费者使用了这个队列,那么同一个消息只会随机发送到其中一个。
//最后一个同时不超过一个任务。(非平均分配)。
std::string consumer_tag =
channel->BasicConsume(queue_name, "", true, true, false, ); while () {
std::cout << "等待接收信息中" << std::endl; AmqpClient::Envelope::ptr_t envelope =
channel->BasicConsumeMessage(consumer_tag); std::string buffer = envelope->Message()->Body(); std::cout << "[y] receve " << buffer << std::endl;
} channel->BasicCancel(consumer_tag);
}
最新文章
- .NET Memory Profiler 查看内存使用情况
- Linux系统运行级别
- Swift 学习笔记第一天-变量常量,及数据类型
- js构建工具和预编译
- oracle 11g 分区表
- windws 安装jdk
- 怎样破解邮箱password
- L009-oldboy-mysql-dba-lesson09
- ffmpeg只使用h264编译参数
- Android 如何检测一个服务是否还在运行?
- idea中ajax中文乱码
- Python之路--你不知道的platform
- 多线程面试题系列(8):经典线程同步 信号量Semaphore
- 2000W条数据,加入全文检索的总结
- [转载] Tomcat架构分析
- 关于阿里ICON矢量图(SVG)上传问题.
- apache kylin2.10在原生hadoop集群上安装
- TortoiseGit推送代码到Gerrit的过程
- Java学习笔记31(IO:Properties类)
- 6--Python入门--Python基本运算符