在上面这张图中,我们可以看到 X 绑定了两个队列,绑定类型是 direct。队列 Q1 绑定键为 orange, 队列 Q2 绑定键有两个:一个绑定键为 black,另一个绑定键为 green.

在这种绑定情况下,生产者发布消息到 exchange 上,绑定键为 orange 的消息会被发布到队列
Q1。绑定键为 blackgreen 和的消息会被发布到队列 Q2,其他消息类型的消息将被丢弃。

多重绑定

当然如果 exchange 的绑定类型是direct,但是它绑定的多个队列的 key 如果都相同,在这种情况下虽然绑定类型是 direct 但是它表现的就和 fanout 有点类似了,就跟广播差不多,如上图所示。

实战

生产者

public class DirectLogs {// 交换机的名称public  static  final String EXCHANGE_NAME = "direct_logs";public static void main(String[] args) throws  Exception{Channel channel = RabbitMqUtils.getChannel();channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.DIRECT);Scanner scanner = new Scanner(System.in);while (scanner.hasNext()){String message = scanner.next();channel.basicPublish(EXCHANGE_NAME,"info",null,message.getBytes(StandardCharsets.UTF_8));System.out.println("生产者发出的消息:"+ message);}}
}

消费者

public class ReceiveLogsDirect01 {public static final String EXCHANGE_NAME = "direct_logs";public static void main(String[] args) throws Exception {Channel channel = RabbitMqUtils.getChannel();//声明一个队列channel.queueDeclare("console",false,false,false,null);//绑定交换机与队列channel.queueBind("console",EXCHANGE_NAME,"info");channel.queueBind("console",EXCHANGE_NAME,"warning");DeliverCallback deliverCallback = (consumerTag, message) -> {System.out.println("ReceiveLogsDirect01控制台打印接受到的消息:" + new String(message.getBody()));};channel.basicConsume("console",true,deliverCallback,consumerTag -> {});}
}
public class ReceiveLogsDirect02 {public static final String EXCHANGE_NAME = "direct_logs";public static void main(String[] args) throws Exception {Channel channel = RabbitMqUtils.getChannel();//声明一个队列channel.queueDeclare("disk",false,false,false,null);//绑定交换机与队列channel.queueBind("disk",EXCHANGE_NAME,"error");DeliverCallback deliverCallback = (consumerTag, message) -> {System.out.println("ReceiveLogsDirect02控制台打印接受到的消息:" + new String(message.getBody()));};channel.basicConsume("disk",true,deliverCallback,consumerTag -> {});}
}

RabbitMQ direct交换机相关推荐

  1. RabbitMQ的交换机类型和工作模式

    RabbitMQ的交换机类型有四种 1.direct 直流交换机: 根据消息的路由键routingkey,将消息以完全匹配的方式路由到指定的队列中. 这里的匹配指的是消息本身携带的路由键和队列与交换机 ...

  2. RabbitMQ之交换机的讲解

    一.交换机 1.Exchange 在RabbitMQ中,生产者发送消息不会直接将消息投递到队列中,而是先将消息投递到交换机中, 在由交换机转发到具体的队列, 队列再将消息以推送或者拉取方式给消费者进行 ...

  3. RabbitMQ之交换机的四种类型和属性

    交换机主要包括如下4种类型: Direct exchange(直连交换机) Fanout exchange(扇型交换机) Topic exchange(主题交换机) Headers exchange( ...

  4. 003 Rabbitmq中交换机的类型

    一 注意点 在Rabbitmq之中,存在绑定键和路由键的概念. [1]绑定键 : 交换机和队列关系的一种描述. [2]路由键: 消息之中消息标签的内容,描述了消息最终到达哪些队列之中. 在Rabbit ...

  5. rabbitmq direct 多个消费者_一文解析 RabbitMQ 最常用的三大模式

    Direct 模式 所有发送到 Direct Exchange 的消息被转发到 RouteKey 中指定的 Queue. Direct 模式可以使用 RabbitMQ 自带的 Exchange: de ...

  6. RabbitMQ exchange交换机机制

    目录 RabbitMQ 概念 exchange交换机机制 什么是交换机 binding? Direct Exchange交换机 Topic Exchange交换机 Fanout Exchange交换机 ...

  7. rabbitmq direct 多个消费者_RabbitMQ实战应用技巧

    1. RabbitMQ实战应用技巧 1.1. 前言 由于项目原因,之后会和RabbitMQ比较多的打交道,所以让我们来好好整理下RabbitMQ的应用实战技巧,尽量避免日后的采坑 1.2. 概述 Ra ...

  8. RabbitMQ中交换机的几种模式

    目录 简述 交换机模式 Fanout模式 Direct模式 Topic模式 Headers模式 简述 生产者不直接跟队列打交道,而是通过交换机.交换机类似于生产者和队列直接的一个管理者,它将生产的消息 ...

  9. RabbitMq Direct exchange路由模型

    官网就是最好的文档 上一篇文章RabbitMq Publish/Subscribe消息发布订阅模式 消息发布订阅模式中,就是通过广播来实现分发的.所有的customer都能够收到全部的消息.实际业务场 ...

最新文章

  1. 30 个Python代码实现的常用功能,精心整理版
  2. Tree.Panel各项属性
  3. linux脚本传参修改配置文件,shell脚本修改配置文件指定行的值
  4. elasticsearch的rest搜索--- 查询
  5. 2020年数模美赛参赛心得总结
  6. Android APP压力测试 之Monkey日志自动分析脚本
  7. GD32F103基础教程—硬件介绍(四)
  8. AVX2指令集浮点乘法性能分析
  9. 非凡的键盘钢琴音源 XLN Audio Addictive Keys Complete 1.1.8 WiN-MAC
  10. 全能扫描王的实现(python版本)- 目标检测图像矫正
  11. Skyscrapers (hard version)(1900/单调栈)
  12. 美国国立卫生研究院利用AI自动检测肺部异常,突破数据收集瓶颈
  13. PLM产品生命周期管理,包含哪些阶段?
  14. 无WiFi 条件下如何使用Xshell 串口访问树莓派终端
  15. Python的mpl_finance模块从2020年已经提醒弃用,新mplfinance模块详解(二)
  16. 【大厂面试】智力题怎么破?
  17. 微信小程序开发实战(网络请求设置)
  18. 如何将excel表中的多行数据合并到一行
  19. 优秀的计算机简历,计算机优秀简历范文
  20. 聊天室项目(一)-展示

热门文章

  1. URL跟Url的区别
  2. Vb Shell 打开程序 等待运行完毕后再继续
  3. Linux学习日记:第二天
  4. HTML5纯Web前端也能开发直播,不用开发服务器(使用face2face)
  5. 【JQuery】使用JQuery 合并两个 json 对象
  6. 笔记9 | 使用wifi连接adb打印数据
  7. XHTML学习笔记 Part2:核心元素
  8. [资料]PHP中的__call使用
  9. 数字图像处理之频率域图像增强
  10. 读入一组文本行,打印最长的文本行