rabbitMQ 的Exchange有3种路由方式:  direct、fanout、topic ,以下为详细说明

1.  Direct Exchange

处理路由键。需要将一个队列绑定到交换机上,要求该消息与一个特定的路由键完全匹配。这是一个完整的匹配。如果一个队列绑定到该交换机上要求路由键 “dog”,则只有被标记为“dog”的消息才被转发,不会转发dog.puppy,也不会转发dog.guard,只会转发dog。

java代码:

1.    Channel channel = connection.createChannel();
2. channel.exchangeDeclare("exchangeName", "direct"); //路由方式是 direct
3. channel.queueDeclare("queueName");
4. channel.queueBind("queueName", "exchangeName", "routingKey");
5.
6. byte[] messageBodyBytes = "hello world".getBytes();
7. //需要绑定路由键
8. channel.basicPublish("exchangeName", "routingKey", MessageProperties.PERSISTENT_TEXT_PLAIN, messageBodyBytes);

ps: 此时的exchange只能匹配到跟它绑定了相同routingKey的队列

2.  Fanout Exchange

不处理路由键。你只需要简单的将队列绑定到交换机上。一个发送到交换机的消息都会被转发到与该交换机绑定的所有队列上。很像子网广播,每台子网内的主机都获得了一份复制的消息。Fanout交换机转发消息是最快的。

java代码:

1.    Channel channel = connection.createChannel();
2. channel.exchangeDeclare("exchangeName", "fanout"); //路由方式是 fanout
3. channel.queueDeclare("queueName");
4. channel.queueBind("queueName", "exchangeName", "routingKey");
5.
6. channel.queueDeclare("queueName1");
7. channel.queueBind("queueName1", "exchangeName", "routingKey1");
8.
9. byte[] messageBodyBytes = "hello world".getBytes();
10. //路由键需要设置为空
11. channel.basicPublish("exchangeName", "", MessageProperties.PERSISTENT_TEXT_PLAIN, messageBodyBytes);

ps: 此时的exchange能匹配到所有与之绑定的队列

3. Topic Exchange 

将路由键和某模式进行匹配。此时队列需要绑定要一个模式上。符号“#”匹配一个或多个词,符号“*”匹配不多不少一个词。因此“audit.#”能够匹配到“audit.irs.corporate”,但是“audit.*” 只会匹配到“audit.irs”。

java 代码:

1.    Channel channel = connection.createChannel();
2. channel.exchangeDeclare("exchangeName", "topic"); //路由方式是 topic
3. channel.queueDeclare("queueName");
4. channel.queueBind("queueName", "exchangeName", "routingKey.*");
5.
6. byte[] messageBodyBytes = "hello world".getBytes();
7. channel.basicPublish("exchangeName", "routingKey.one", MessageProperties.PERSISTENT_TEXT_PLAIN, messageBodyBytes);

ps: 此时的exchange匹配到的是绑定的routingKey名称 与  队列的routingKey规则 相匹配的队列

例如上图的:  exchange 绑定的 routingKey 为 usa.news 的消息   与   routingKey 为 usa.weather 的消息  会发送到   队列绑定的 key 为  usa.#  的队列

exchange 绑定的 routingKey 为 usa.news 的消息  与   routingKey 为 europe.news的消息  会发送到   队列绑定的 key 为  #.news的队列

rabbitMQ 的三种Exchange的更多相关文章

  1. 【RabbitMQ】三种Exchange模式——订阅、路由、通配符模式

    https://blog.csdn.net/ww130929/article/details/72842234

  2. 8、RabbitMQ三种Exchange模式(fanout,direct,topic)的性能比较

    RabbitMQ三种Exchange模式(fanout,direct,topic)的性能比较 RabbitMQ中,除了Simple Queue和Work Queue之外的所有生产者提交的消息都由Exc ...

  3. 【转】RabbitMQ三种Exchange模式

    [转]RabbitMQ三种Exchange模式 RabbitMQ中,所有生产者提交的消息都由Exchange来接受,然后Exchange按照特定的策略转发到Queue进行存储 RabbitMQ提供了四 ...

  4. RabbitMQ的四种ExChange

    在message到达Exchange后,Exchange会根据route规则进入对应的Queue中,message可能进入一个Queue也可能进入对应多个Queue,至于进入哪个Queue或者是说哪个 ...

  5. 快速掌握RabbitMQ(二)——四种Exchange介绍及代码演示

    在上一篇的最后,编写了一个C#驱动RabbitMQ的简单栗子,了解了C#驱动RabbitMQ的基本用法.本章介绍RabbitMQ的四种Exchange及各种Exchange的使用场景. 1 direc ...

  6. RabbitMQ三种Exchange模式(fanout,direct,topic)的特性 -摘自网络

    RabbitMQ中,所有生产者提交的消息都由Exchange来接受,然后Exchange按照特定的策略转发到Queue进行存储 RabbitMQ提供了四种Exchange:fanout,direct, ...

  7. RabbitMQ三种Exchange模式(fanout,direct,topic)的性能比较

    RabbitMQ中,所有生产者提交的消息都由Exchange来接受,然后Exchange按照特定的策略转发到Queue进行存储 RabbitMQ提供了四种Exchange:fanout,direct, ...

  8. RabbitMQ三种Exchange模式(fanout,direct,topic)的性能比较(转)

    RabbitMQ中,所有生产者提交的消息都由Exchange来接受,然后Exchange按照特定的策略转发到Queue进行存储 RabbitMQ提供了四种Exchange:fanout,direct, ...

  9. RabbitMQ三种Exchange模式

    RabbitMQ中,所有生产者提交的消息都由Exchange来接受,然后Exchange按照特定的策略转发到Queue进行存储 RabbitMQ提供了四种Exchange:fanout,direct, ...

随机推荐

  1. git 实战

    1.网站手动创建新分支 2.在master下 项目路径下 右键 Git branch here 3.切分支: git fetch git branch -a git branch -r git che ...

  2. java框架之Struts2(1)-简介及入门

    简介 Struts2 是一个基于 MVC 设计模式的 Web 应用框架,它本质上相当于一个 servlet,在 MVC 设计模式中,Struts2 作为控制器 (Controller) 来建立模型与视 ...

  3. java框架之SpringBoot(3)-日志

    市面上的日志框架 日志抽象层 日志实现 JCL(Jakarta Commons Logging).SLF4J(Simple Logging Facade For Java).JBoss-Logging ...

  4. xshell 6评估已过期解决办法 / xftp 6 评估已过期解决办法

    1.工具用途介绍 Xshell  是一个强大的安全终端模拟软件,它支持SSH1, SSH2, 以及Microsoft Windows 平台的TELNET 协议.Xshell 通过互联网到远程主机的安全 ...

  5. GDB查看堆栈局部变量

    GDB查看堆栈局部变量 “参数从右到左入栈”,“局部变量在栈上分配空间”,听的耳朵都起茧子了.最近做项目涉及C和汇编互相调用,写代码的时候才发现没真正弄明白.自己写了个最简单的函数,用gdb跟踪了调用 ...

  6. npm 发布一个全局的指令

    我们经常使用 npm i  -g  xxxx 安装完成一个包之后,就能直接使用对应的指令.例如安装  vue-cli 或者 express 等 那么下面我们自己做一个类似的效果: 首先要对 npm 发 ...

  7. 2019年度【计算机视觉&机器学习&人工智能】国际重要会议汇总

    简介 每年全世界都会举办很多计算机视觉(Computer Vision,CV). 机器学习(Machine Learning,ML).人工智能(Artificial Intelligence ,AI) ...

  8. 第二章 函数和window对象

    1.什么是函数函数相当于Java中的方法,每一个函数可以做一件事情,但是不属于某一个类 2.使用函数的好处:使代码模块化,功能分工明确,方便调用,思路功能清晰 3.函数的分类:(1)系统函数:系统提前 ...

  9. python-17

    # 列表生成式 a = [x*2 for x in range(10)] # 这两个变量必须一致 print(a) #列表 元组的高级赋值办法 b,c = [",6] # python的垃圾 ...

  10. 论文阅读(XiangBai——【AAAI2017】TextBoxes_A Fast Text Detector with a Single Deep Neural Network)

    XiangBai——[AAAI2017]TextBoxes:A Fast Text Detector with a Single Deep Neural Network 目录 作者和相关链接 方法概括 ...