RabbitMQ - 05 - Direct交换机

部署demo项目

通过消息队列demo项目进行练习  相关配置看此贴   http://t.csdnimg.cn/hPk2T

注意  生产者消费者的yml文件也要配置好

什么是Direct交换机

        Direct 交换机是 AMQP(高级消息队列协议)中的一种交换机类型,它根据消息的路由键(Routing Key)将消息发送到与之完全匹配的队列上。只有绑定到 Direct 交换机时指定了相同路由键的队列才会接收到消息。

        在使用 Direct 交换机时,生产者将消息发送到 Direct 交换机,并指定一个特定的路由键。Direct 交换机会根据消息的路由键将消息发送到与之完全匹配的队列上。如果多个队列的路由键与消息的路由键完全匹配,则消息会被发送到多个队列中。

        Direct 交换机常用于需要一对一通信的场景,例如任务分发、日志分类等。通过合理设置路由键,可以将消息准确地发送到目标队列,实现灵活的消息路由和处理。

Direct 交换机的特点包括:

  1. 精确路由Direct 交换机根据消息的路由键进行精确匹配,只将消息发送到与之完全匹配的队列上。
  2. 灵活性:生产者可以通过设置消息的路由键来控制消息被发送到哪个队列。
  3. 一对一通信:每个消息只能被一个消费者接收。

实现Direct交换机

1.控制台

创建两个消息队列

创建direct交换机

绑定消息队列
如图 绑定的同时设置Routing key

queue1 queue2都有red,则等下 生产者发送Routing key = red 的消息时,两个队列都会收到这个消息

相反 bule,yellow都是各自独有的,则等下 发送时之后有一个消息队列能够接收到

2.编写消费者方法

package cn.itcast.mq.lintener;

import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

@Slf4j
@Component
public class MQListener {

    @RabbitListener(queues = "direct.queue1")
    public void listenDirectQueue1(String message)  {
        log.info("消费者1收到了消息:........... {}", message);
//        System.out.println("消费者收到了消息: " + message);
    }

    @RabbitListener(queues = "direct.queue2")
    public void listenDirectQueue2(String message)  {
        log.info("消费者2收到了消息: {}", message);
//        System.out.println("消费者收到了消息: " + message);
    }
}

3.编写生产者测试方法

package cn.itcast.mq.helloworld;

import org.apache.logging.log4j.message.Message;
import org.junit.jupiter.api.Test;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.messaging.converter.StringMessageConverter;

@SpringBootTest
public class SpringAMQPTest {

    @Autowired
    private RabbitTemplate rabbitTemplate;

    //  direct交换机
    @Test
    void testDirectExchange(){
        String exchangeName = "hmall.direct";
        String message1 = "hello, red 1111";
        String message2 = "bule ddddd";
        String message3 = "yello ttttt";
        rabbitTemplate.convertAndSend(exchangeName,"red",message1);
        rabbitTemplate.convertAndSend(exchangeName,"bule",message2);
        rabbitTemplate.convertAndSend(exchangeName,"yellow",message3);

    }
}

实验结果

消费者12 都能收到red

消费者1收到bule

消费者2收到yellow

实现成功

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/446798.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【R语言】R包-探索ggtree进化树美化

文章目录 R包-探索ggtree进化树美化分析流程1. 关于包的下载2. 绘制一个基本的进化树图3. 添加样本名称3. 添加节点节点高亮4. 添加分组小结 R包-探索ggtree进化树美化 提示:基于nwk文件进行进化树美化,如更换进化树格式,添加分组、节点、遗传…

【大厂AI课学习笔记NO.78】智能芯片产业人才能力图谱

有志于从事智能芯片产业的朋友,可以参考下上面的图谱。 比如C站的程序猿很多,那么技能能力中,你要掌握的就包括C/C、Python、Bash等常用的编程语言。 还要熟悉TensorFlow、PyTorch等主流的深度学习框架。 这两个框架,我们都介绍…

SpringSecurity两种验证方式及调用流程

一、HttpBasic方式 <security:http-basic/> 二、Formlogin方式 <security:form-login login-page"/userLogin" /> 三、SpringSecurity执行流程

论文阅读《FENET: FOCUSING ENHANCED NETWORK FOR LANE DETECTION》

ABSTRACT 受人类驾驶专注力的启发&#xff0c;这项研究开创性地利用聚焦采样&#xff08;Focusing Sampling&#xff09;、部分视野评估&#xff08;Partial Field of View Evaluation&#xff09;、增强型 FPN 架构和定向 IoU 损失&#xff08;Directional IoU Loss&#xff…

uniapp:小程序数字键盘功能样式实现

代码如下&#xff1a; <template><view><view><view class"money-input"><view class"input-container" click"toggleBox"><view class"input-wrapper"><view class"input-iconone"…

01hadoop概念

大数据与Hadoop 大数据指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合&#xff0c;需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。 Hadoop是什么&#xff1f; Hadoop是一种分析和处理海量数据的…

OD_2024_C卷_200分_8、攀登者2【JAVA】【逻辑分析】

package odjava;import java.util.Arrays; import java.util.HashSet; import java.util.Scanner;public class 八_攀登者2 {// 输入处理public static void main(String[] args) {Scanner sc new Scanner(System.in);int[] heights Arrays.stream(sc.nextLine().split("…

驱动开发常见的通信接口介绍

本文将为您详细讲解驱动开发中常见的通信接口&#xff0c;以及它们的特点、区别和应用场景。在操作系统和硬件设备之间&#xff0c;通信接口扮演着至关重要的角色&#xff0c;它们定义了数据如何在软件和硬件之间传输和交互。 1. 串行通信接口&#xff08;Serial Communication…

防御保护作业六

实验拓扑图&#xff1a; 配置过程&#xff1a; FW1 自定义服务ike 创建nat策略&#xff0c;让10.0.2.0/24访问192.168.1.0/24的流量不进行nat转换,并将这条策略置于nat策略最上面&#xff0c;优先匹配 FW3 测试

CodeReview 规范及实施

优质博文&#xff1a;IT-BLOG-CN 一、为什么需要CodeReview 随着业务压力增大&#xff0c;引发代码质量下降&#xff0c;代码质量的下降导致了开发效率的降低&#xff0c;维护成功高等问题&#xff0c;开发效率下降后又加重了业务压力&#xff0c;最终陷入了死亡三角的内耗之…

Shell常用脚本:文件或目录一键同步到多台服务器

注意&#xff1a; 将本地文件&#xff0c;同步到【/opt/module/script/xsyncByFileIp.txt】里面的目标机器 xsyncByFile.sh #!/bin/bash# 入参参数个数 argsCount$#if(($argsCount0)); thenecho "同步失败&#xff1a;请输入待同步的文件或者目录" exit; fiecho &q…

【大厂AI课学习笔记NO.68】开源和开源发展情况

开源即源代码公开&#xff0c;任何人能获取源代码&#xff0c;查看、修改、分发他们认为合适的代码。 依托同行评审和社区生成&#xff0c;旨在以分散、协作的方式开发。 我们曾经很详细的讨论过开源协议的问题&#xff0c;详细可以参考我的文章&#xff1a; https://giszz.…

OpenCV的常用数据类型

OpenCV涉及的常用数据类型除包含C的基本数据类型,如&#xff1a;char、uchar&#xff0c;int、unsigned int,short 、long、float、double等数据类型外, 还包含Vec&#xff0c;Point、Scalar、Size、Rect、RotatedRect、Mat等类。C中的基本数据类型不需再做说明下面重点介绍一下…

flink重温笔记(十四): flink 高级特性和新特性(3)——数据类型及 Avro 序列化

Flink学习笔记 前言&#xff1a;今天是学习 flink 的第 14 天啦&#xff01;学习了 flink 高级特性和新特性之数据类型及 avro 序列化&#xff0c;主要是解决大数据领域数据规范化写入和规范化读取的问题&#xff0c;avro 数据结构可以节约存储空间&#xff0c;本文中结合企业真…

iOS17.4获取UDID安装mobileconfig描述文件失败 提示“安全延迟进行中”问题 | 失窃设备保护

iOS17.4这两天已经正式发布&#xff0c; 在iOS 17.4版本中新增了一个名为"失窃设备保护"的功能&#xff0c;并提供了一个"需要安全延迟"的选项。 iOS17.4获取UDID安装mobileconfig描述文件失败 提示“安全延迟进行中”问题 | 失窃设备保护 当用户选择启用…

贝叶斯优化的门控循环神经网络BO-GRU(时序预测)的Matlab实现

贝叶斯优化的门控循环神经网络&#xff08;BO-GRU&#xff09;是一种结合了贝叶斯优化&#xff08;Bayesian Optimization, BO&#xff09;和门控循环单元&#xff08;Gated Recurrent Unit, GRU&#xff09;的模型&#xff0c;旨在进行时序预测。这种模型特别适用于时间序列数…

Linux:kubernetes(k8s)lable和selecto标签和选择器的使用(11)

通过标签是可以让我们的容器和容器之间相互认识&#xff0c;简单来说一边打了标签&#xff0c;一边使用选择器去选择就可以快速的让他们之间耦合 定义标签有两种办法&#xff0c;一个是文件中&#xff0c;一个是命令行里 我们在前几章编进文件的时候里面都有lable比如 这个就是…

OpenCV读取tensorflow神经网络模型:SavedModel格式转为frozen graph的方法

本文介绍基于Python的tensorflow库&#xff0c;将tensorflow与keras训练好的SavedModel格式神经网络模型转换为frozen graph格式&#xff0c;从而可以用OpenCV库在C 等其他语言中将其打开的方法。 如果我们需要训练并使用一个神经网络模型&#xff0c;一般情况下都是首先借助Py…

[mmucache]-ARMV8-aarch64的虚拟内存(mmutlbcache)介绍-概念扫盲

&#x1f525;博客主页&#xff1a; 小羊失眠啦. &#x1f3a5;系列专栏&#xff1a;《C语言》 《数据结构》 《C》 《Linux》 《Cpolar》 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 思考: 1、cache的entry里都是有什么&#xff1f; 2、TLB的entry里都是有什么? 3、MMU操作…

QT给QLabel设置背景颜色

1.选中label 2.右键点击"改变样式表" 3.填写样式&#xff0c;点击apply,ok 注意 #{QLabel名称}&#xff0c;例如名称是label就是QLabel#label