RabbitMQ通配符模式

news2024/11/24 10:02:54

🍁博客主页:👉不会压弯的小飞侠
✨欢迎关注:👉点赞👍收藏⭐留言✒
✨系列专栏:👉Linux专栏
🔥欢迎大佬指正,一起学习!一起加油!

在这里插入图片描述

目录

  • 🍁模式说明
  • 🍁通配符模式完成消息传递


🍁模式说明

  • Routingkey 一般都是有一个或多个单词组成,多个单词之间以”.”分割。
  • Topic主题模式可以实现 Publish/Subscribe发布与订阅模式 和 Routing路由模式 的功能;只是Topic在配置routing key 的时候可以使用通配符,显得更加灵活。
  • 需要设置类型为topic的交换机,交换机和队列进行绑定,并且指定通配符方式的routing key,当发送消息到交换机后,交换机会根据routing key将消息发送到对应的队列。
  • 通配符规则:
    • #:匹配零个或多个词
    • *:匹配不多不少恰好1个词

在这里插入图片描述

🍁通配符模式完成消息传递

  • 编写生产者发送消息
    • 编写消息生产者 Producter
class Producer {
    public static void main(String[] args) throws Exception {
        //创建连接
        Connection connection = ConnectionUtil.getConnection();
        //创建信道
        Channel channel = connection.createChannel();
        String exchangeName = "test_topic";
        //声明交换机
        channel.exchangeDeclare(exchangeName, BuiltinExchangeType.TOPIC,true,false,false,null);
        String queue1Name = "test_topic_queue1";
        String queue2Name = "test_topic_queue2";
        //创建队列
        channel.queueDeclare(queue1Name,true,false,false,null);
        channel.queueDeclare(queue2Name,true,false,false,null);
        // 绑定队列和交换机
        /**
         *  参数:
         1. queue:队列名称
         2. exchange:交换机名称
         3. routingKey:路由键,绑定规则
         如果交换机的类型为fanout ,routingKey设置为""
         */
        // routing key  系统的名称.日志的级别。
        //需求: 所有error级别的日志存入数据库,所有order系统的日志存入数据库
        channel.queueBind(queue1Name,exchangeName,"#.xfx");
        channel.queueBind(queue1Name,exchangeName,"mks.*");
        channel.queueBind(queue1Name,exchangeName,"ls.#");
        channel.queueBind(queue2Name,exchangeName,"ok.*");
        String body = "该消息会进入队列一和队列二!!!";
        //发送消息
        //channel.basicPublish(exchangeName,"a.b.c.d.xfx",null,body.getBytes());
        //channel.basicPublish(exchangeName,"mks.ok.ok",null,body.getBytes());
        channel.basicPublish(exchangeName,"ls.a",null,body.getBytes());
        //channel.basicPublish(exchangeName,"ok.hi",null,body.getBytes());

        channel.close();
        connection.close();
    }
}

  • 测试
    在这里插入图片描述

  • 编写消费者接收消息

    • 编写消息消费者Consumer1
public class Consumer1 {
    public static void main(String[] args) throws Exception {
        Connection connection = ConnectionUtil.getConnection();
        Channel channel = connection.createChannel();
        String queue1Name = "test_topic_queue1";
        Consumer consumer = new DefaultConsumer(channel){
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
                System.out.println("body:"+new String(body));
            }
        };
        channel.basicConsume(queue1Name,true,consumer);
    }
}
  • 编写消费者接收消息
    • 编写消息消费者Consumer2
public class Consumer2 {
    public static void main(String[] args) throws Exception {
        Connection connection = ConnectionUtil.getConnection();
        Channel channel = connection.createChannel();
        String queue2Name = "test_topic_queue2";
        Consumer consumer = new DefaultConsumer(channel){
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
                System.out.println("body:"+new String(body));
            }
        };
        channel.basicConsume(queue2Name,true,consumer);
    }
}
  • 测试
  • 启动所有消费者,然后使用生产者发送消息;在消费者对应的控制台可以查看到生产者发送对应routing key对应队列的消息;到达按照需要接收的效果;并且这些routing key可以使用通配符。
    在这里插入图片描述
    在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Jenkins安装方式之war包及相关环境配置

持续创作,加速成长!这是我参与「掘金日新计划 10 月更文挑战」的第4天,点击查看活动详情 最近总有小伙伴发私信问我jenkins如何以war形式运行?以及运行后如何添加相关的环境配置,这里我就给大家贴出我的解决方案&…

Bandit算法学习[网站优化]04——UCB(Upper Confidence Bound) 算法

Bandit算法学习[网站优化]04——UCB(Upper Confidence Bound) 算法 参考资料 White J. Bandit algorithms for website optimization[M]. " O’Reilly Media, Inc.", 2013.https://github.com/johnmyleswhite/BanditsBookUCB算法原理及其在星际争霸比赛中的应用Aue…

Springboot 接口为null的值不返回对应的key

偶然听到两个应届生一段对话,一个后端,一个前端 。 前端: 大哥,你没有值就不要返回那个key行不行? 后端: 什么我看看。 后端: 这是本来返回值实体有的,不是必填,所以n…

Lua 元表及常见元方法

一、什么是元表 Lua 中的 table 使用起来有点像c中的 map 或者 unordered_map ,都是通过对应的key 获取对应的value。如果访问了表中不存在的key时,就会触发Lua的一种机制,Lua也正是凭借这个机制可以用来模拟类似“继承”的行为,…

低代码能够为企业带来什么?

目录 1、为企业快速开发应用赋能 2、低成本使用数字化工具 3、满足企业定制化需求 大数据时代的快速发展下,传统的应用开发技术手段渐渐地无法满足企业的高需求。并且,企业想在应用开发的基础上同时实现个性化定制,而传统的技术条件所需要…

Linux 进程概念(一)

目录 一、冯诺伊曼体系结构 二、操作系统(Operator System) 2.1 操作系统如何管理硬件? 2.2 操作系统如何管理软件? 2.3 一张图带你直观了解OS管理过程 三、进程(启示录) 3.1 进程的基本概念 3.1.1 进程PCB 3…

寒假本科创新——机器学习(二)

绪论1.3归纳偏好 一般原则:奥卡姆剃刀 什么样的算法比较好?1.4NFL定理 NFL定理的前提: NFL定理的寓意:1.3归纳偏好 归纳偏好(lnductive Bias): 机器学习算法在学习过程中对某种类型假设的偏好…

sql语句练习2

1、列出至少有一个员工的所有部门编号、名称,并统计出这些部门的平均工资、最低工资、最高工资 做法: 第一步:找出至少有一个员工的部门编号mysql>select deptno,count(empno)from empgroup by deptnohaving count(empno)>0; 第二步: …

node.js快速入门指南

Node.js迅速蹿红,衍生了一个强大的开源社区、支持企业,甚至还拥有属于自己的技术大会。我把这种成功归结于它的简介,高校,同时提高了编程生产力。 Node.js 的前置知识很多,例如以下知识 JavaScriptES6Ajax 还不会的…

Java JVM:虚拟机性能监控、故障处理工具(三)

目录标题一、基础故障处理工具二、可视化故障处理工具三、其他故障相关一、基础故障处理工具 JMC(Java Mission Control)以及JFR(Java Flight Recorder) JMC 从 Java7 以后包含在 JDK 中,直接输入 jmc 就能启动在使用…

JEECGboot数据规则篇

使用 一、功能说明 列表数据权限,主要通过数据权限控制行数据,让不同的人有不同的查看数据规则; 比如: 销售人员只能看自己的数据;销售经理可以看所有下级销售人员的数据;财务只看金额大于5000的数据等等…

js事件高级

文章目录一、注册事件(绑定事件)1、注册事件概述(1)传统注册方式(2)方法监听注册方式2、addEventListener 事件监听方式3、attachEvent 事件监听方式4、注册事件兼容性解决方案二、删除事件(解绑…

C库函数:string.h

string.h C 标准库 – <string.h> | 菜鸟教程 (runoob.com) 1void *memchr(const void *str, int c, size_t n) 在参数 str 所指向的字符串的前 n 个字节中搜索第一次出现字符 c&#xff08;一个无符号字符&#xff09;的位置。在这个函数中&#xff0c;可以看到有void …

使用docker安装zabbix监控

官网手册&#xff1a;docker安装zabbix 首先需要安装好docker服务 创建专用于Zabbix组件容器的网络 docker network create --subnet 172.20.0.0/16 --ip-range 172.20.240.0/20 zabbix-net启动空的 MySQL 服务器实例 docker run --name mysql-server -t \ //mysql容器…

FFMPEG完美入门资料---002---FFmpeg 支持能力说明

FFMPEG入门资料---001---介绍和参数说明_音视频开发老马的博客-CSDN博客 接着上文写&#xff1a; 2.3.1 FFmpeg 对编码解码器的支持 ffmpeg 支持的编解码器种类共有 280 多种&#xff0c; 涵盖了几乎所有常见音视频编码格式&#xff0c; 能解码几乎所有的音视频&#xff0c; …

月交付破万,长安深蓝成造车新势力“头部玩家”

近日&#xff0c;造车新势力纷纷公布2022年12月交付数据。通过数据&#xff0c;我们发现众多造车新势力都取得了不错的成绩&#xff0c;“头部玩家”的门槛甚至提升至万辆。与此同时&#xff0c;“排位”形势也与往年大相径庭&#xff0c;其中最令人意外的是2022年发布的深蓝品…

ESP8266+MicroPython开发:使用ESP8266+Thonny烧录MicroPython固件

使用ESP8266Thonny烧录MicroPython固件下载固件下载安装Thonny在Thonny烧录固件测试Thonny简单使用下载固件 MicroPython下载网址 根据ESP8266的flash选择&#xff0c;一般选择如图所示 自己随便选择一个版本下载&#xff0c;注意记住自己的下载路径 下载安装Thonny Thonn…

【vue系列-05】vue的生命周期(详解)

深入理解vue的生命周期一&#xff0c;vue的生命周期1&#xff0c;创建流程1.1&#xff0c;beforeCreate1.2&#xff0c;created2&#xff0c;挂载流程2.1&#xff0c;beforeMount2.2&#xff0c;mounted3&#xff0c;更新流程3.1&#xff0c;beforeUpdate3.2&#xff0c;update…

ConvNeXt V2论文翻译:ConvNeXt V2与MAE激情碰撞

文章目录摘要1 简介2 相关工作3 全卷积掩码自编码器4 全局响应归一化5 ImageNet实验6 迁移学习实验7 结论摘要 论文链接&#xff1a;ConvNeXt V2 在改进的架构和更好的表示学习框架的推动下&#xff0c;视觉识别领域在21世纪20年代初实现了快速现代化和性能提升。例如&#xf…

评价类模型(层次分析法与模糊评价模型)

一、评价类模型 综合评价的基本理论和数据预处理&#xff1a; 评价对象评价指标权重系数综合评价模型评价者 二、AHP法—层次分析法 通过打分解决评价类问题&#xff0c;两两比较&#xff0c;推算权重。 %function RIAHPRI(n) %利用MATLAB求随机一致性指标; i0;CI0;Azer…