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);
}

rabbitmq AmqpClient 使用Fanout 交换机投递与接收消息,C++代码示例的更多相关文章

  1. rabbitmq AmqpClient 使用Topic 交换机投递与接收消息,C++代码示例

    // strUri = "amqp://guest:guest@192.168.30.11:8820/test" // strUri = "amqp://[帐户名]:[密 ...

  2. rabbitmq AmqpClient 使用Direct 交换机投递与接收消息,C++代码示例

    // 以DIRECT 交换机和ROUTING_KEY的方式进行消息的发布与订阅 // send // strUri = "amqp://guest:guest@192.168.30.11:8 ...

  3. Android Java使用JavaMail API发送和接收邮件的代码示例

    JavaMail是Oracle甲骨文开发的Java邮件类API,支持多种邮件协议,这里我们就来看一下Java使用JavaMail API发送和接收邮件的代码示例 使用Javamail发送邮件,必需的j ...

  4. rabbitmq direct、fanout、topic 三种Exchange java 代码比较

    Producer端 1.channel的创建 无论是才用什么样的Exchange,创建channel代码都是相同的,如下 ConnectionFactory factory = new Connect ...

  5. rabbitmq AmqpClient 使用Topic 交换机同一个channel 同时多个队列 ,多个交换机,C++代码示例

    // 消息发送 bool PublishExchangeTopicMulti(const std::string &strUri) { AmqpClient::Channel::ptr_t c ...

  6. KeyBord事件分发和接收简要过程代码示例

    step1:调用ViewRootImpl的内部类ImeInputStage的成员函数onProcess来判断输入法是否处于激活状态 final class ImeInputStage extends ...

  7. RabbitMQ广播:fanout模式

    一. 消息的广播需要exchange:exchange是一个转发器,其实把消息发给RabbitMQ里的exchange fanout: 所有bind到此exchange的queue都可以接收消息,广播 ...

  8. python中RabbitMQ的使用(交换机,广播形式)

    简介 如果要让每个接收端都能收到消息,此时需要将消息广播出去,需要使用交换机. 工作原理 消息发送端先将消息发送给交换机,交换机再将消息发送到绑定的消息队列,而后每个接收端都能从各自的消息队列里接收到 ...

  9. rabbitmq不同模式的交换机使用

    交换机的功能主要是接收消息并且转发到绑定的队列,交换机不存储消息,在启用ack模式后,交换机找不到队列会返回错误.交换机有四种类型:Direct, topic, Headers and Fanout( ...

随机推荐

  1. jQuery 菜单 垂直菜单实现

    HTML <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <ti ...

  2. 解决PageHelper.startPage(page, size)后,关于PageInfo的total等属性不正确等问题

    在解决PageHelper.startPage(page, size);的位置问题后,又遇到total等信息错误,主要还是不细心,两个不同的List实例化进PageInfo,不能混在一起,同时要确保这 ...

  3. vue-element-admin安装失败的问题

    根据官网的介绍,从GitHub下载以后,安装依赖的时候一直不成功,试了很多办法,最终解决 先记录错误的过程: 从GitHub下载 在当前文件夹的地址栏输入 “cmd” 打开窗口 输入 npm inst ...

  4. oracle聚合函数avg()注意点

    avg:用avg函数进行平均运算时会忽略空值(即最终出现的平均值不对[如果原始数据中存在空值的话]),可以这样子来解决:avg(nvl(comm,0))或者sum(comm)/count(*)---- ...

  5. linux日常---1、linux下安装、查看、卸载包常用命令

    linux日常---1.linux下安装.查看.卸载包常用命令 一.总结 一句话总结: 对比学习 1.linux如何查看系统中安装的程序? rpm -qa   # 查看所有安装的软件包 2.linux ...

  6. javascript全量匹配屏蔽词

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. sql find_in_set在oracle下的解决方案

    比如一张表: artile (id,type,content); type:1表示文艺类,2表示小说类,3表示传记,4表示传说,等等5,6,7,8 表数据: id type content 1 3,1 ...

  8. NetworkComms V3 序列化器之Protobuf.net和 JSONSerializer

    NetworkComms v3版本中,默认使用的是protobuf.net序列化器. 即当您没有指定序列化的时候,系统自动使用默认的protobuf.net序列化器. 当然我们也可以自己指定序列化器 ...

  9. phhstrom 快捷键

    TODO(表示待办事件)注释 快捷键 Alt+6 Alt+6 可以查看添加了//TODO注释的代码片段 一般我们在开发过程中由于时间或者各方面的时间来不及完成的代码,往往会先将逻辑写出来,实现留待以后 ...

  10. StaticInjectorError[Http]:

    报错:AppComponent.html:28 ERROR Error: StaticInjectorError[Http]: StaticInjectorError[Http]: 解决方法: