rabbitMQ的Topic模式的生产者与消费者使用案例

news2024/11/23 5:01:37

在这里插入图片描述

topic模式 RoutingKey 按照英文单词点号多拼接规则填充。其中消费者匹配规则时候 * 代表一个单词,#表示多个单词
消费者C1的RoutingKey 规则按照*.orange.* 匹配 绑定队列Q1
package com.esint.rabbitmq.work05;

import com.esint.rabbitmq.RabbitMQUtils;
import com.rabbitmq.client.BuiltinExchangeType;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.DeliverCallback;

public class ReceiveLogsTopic01 {

    public static final String EXCHANGE_NAME = "topic";
    public static void main(String[] args) throws Exception {

        Channel channel = RabbitMQUtils.getChannel();

        channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.TOPIC);

        String queueName = "Q1";

        channel.queueDeclare(queueName,false,false,false,null);

        channel.queueBind(queueName,EXCHANGE_NAME,"*.orange.*");
        System.out.println("Q1队列等待接受消息...");

        DeliverCallback deliverCallback = (deliverTag,mes)->{
            System.out.println("打印ReceiveLogsTopic01控制台消息:" + new String(mes.getBody(),"UTF-8"));
            System.out.println("接收队列:" + queueName + " 绑定键:" + mes.getEnvelope().getRoutingKey());
        };
        channel.basicConsume(queueName,true,deliverCallback,deliverTag->{});
    }

}

消费者C2的RoutingKey 规则按照*.rabbit.* 和 lazy.# 匹配 绑定队列Q2
package com.esint.rabbitmq.work05;

import com.esint.rabbitmq.RabbitMQUtils;
import com.rabbitmq.client.BuiltinExchangeType;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.DeliverCallback;

public class ReceiveLogsTopic02 {

    public static final String EXCHANGE_NAME = "topic";
    public static void main(String[] args) throws Exception {

        Channel channel = RabbitMQUtils.getChannel();

        channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.TOPIC);

        String queueName = "Q2";

        channel.queueDeclare(queueName,false,false,false,null);

        channel.queueBind(queueName,EXCHANGE_NAME,"*.*.rabbit");
        channel.queueBind(queueName,EXCHANGE_NAME,"lazy.#");
        System.out.println("Q2队列等待接受消息...");

        DeliverCallback deliverCallback = (deliverTag,mes)->{
            System.out.println("打印ReceiveLogsTopic01控制台消息:" + new String(mes.getBody(),"UTF-8"));
            System.out.println("接收队列:" + queueName + " 绑定键:" + mes.getEnvelope().getRoutingKey());
        };
        channel.basicConsume(queueName,true,deliverCallback,deliverTag->{});
    }

}

生产者顺序发送
        bindKeyMap.put("quick.orange.rabbit","Q1 Q2 catch【1】");
        bindKeyMap.put("lazy.orange.elep","Q1 Q2 【2】");
        bindKeyMap.put("quick.orange.fox","Q1【3】");
        bindKeyMap.put("lazy.brown.fox","Q2【4】");
        bindKeyMap.put("lazy.pink.rabbit","Q2 Q2【5】");
        bindKeyMap.put("quick.brown.fox","wu【6】");
        bindKeyMap.put("quick.orange.male.rabbit","wu【7】");
        bindKeyMap.put("lazy.orange.male.rabbit","Q2【8】");
package com.esint.rabbitmq.work05;

import com.esint.rabbitmq.RabbitMQUtils;
import com.rabbitmq.client.Channel;

import java.util.HashMap;
import java.util.Map;

public class ProductLogs {

    public static final String EXCHANGE_NAME = "topic";

    public static void main(String[] args) throws Exception {

        Channel channel = RabbitMQUtils.getChannel();

        HashMap<String,String > bindKeyMap = new HashMap<>();
        bindKeyMap.put("quick.orange.rabbit","Q1 Q2 catch【1】");
        bindKeyMap.put("lazy.orange.elep","Q1 Q2 【2】");
        bindKeyMap.put("quick.orange.fox","Q1【3】");
        bindKeyMap.put("lazy.brown.fox","Q2【4】");
        bindKeyMap.put("lazy.pink.rabbit","Q2 Q2【5】");
        bindKeyMap.put("quick.brown.fox","wu【6】");
        bindKeyMap.put("quick.orange.male.rabbit","wu【7】");
        bindKeyMap.put("lazy.orange.male.rabbit","Q2【8】");

        for (Map.Entry<String, String> bindingKeyEntry : bindKeyMap.entrySet()) {
            String key = bindingKeyEntry.getKey();
            String value = bindingKeyEntry.getValue();
            channel.basicPublish(EXCHANGE_NAME,key,null,value.getBytes("UTF-8"));
            System.out.println("生产者发消息:"+ value);
        }
    }
}

运行消费者1 消费者2,执行生产者:

生产者:
在这里插入图片描述
消费者1:
在这里插入图片描述
消费者2:
在这里插入图片描述

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

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

相关文章

关于响应式编程ReactiveX,RxGo

ReactiveX&#xff0c;简称为 Rx&#xff0c;是一个异步编程的 API。与 callback&#xff08;回调&#xff09;、promise&#xff08;JS 提供这种方式&#xff09;和 deferred&#xff08;Python 的 twisted 网络编程库就是使用这种方式&#xff09;这些异步编程方式有所不同&a…

深度学习YOLO图像视频足球和人体检测 - python opencv 计算机竞赛

文章目录 0 前言1 课题背景2 实现效果3 卷积神经网络4 Yolov5算法5 数据集6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习YOLO图像视频足球和人体检测 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非…

听GPT 讲Rust源代码--library/core/src(7)

题图来自 Hello, crustaceans.[1] File: rust/library/core/src/ptr/metadata.rs 在Rust的源代码中&#xff0c;rust/library/core/src/ptr/metadata.rs 文件的作用是定义了与指针&#xff08;ptr&#xff09;和元数据&#xff08;metadata&#xff09;相关的结构体和 trait&am…

30天黑客(网络安全)自学

前言 前几天发布了一篇 网络安全&#xff08;黑客&#xff09;自学 没想到收到了许多人的私信想要学习网安黑客技术&#xff01;却不知道从哪里开始学起&#xff01;怎么学 今天给大家分享一下&#xff0c;很多人上来就说想学习黑客&#xff0c;但是连方向都没搞清楚就开始学习…

设计模式—结构型模式之外观模式(门面模式)

设计模式—结构型模式之外观模式&#xff08;门面模式&#xff09; 外观&#xff08;Facade&#xff09;模式又叫作门面模式&#xff0c;是一种通过为多个复杂的子系统提供一个一致的接口&#xff0c;而使这些子系统更加容易被访问的模式。 例子 我们的电脑会有很多 组件&am…

Linux网络之传输层协议tcp/udp

文章目录 目录 一、再谈端口号 1.端口号划分 2.知名端口号 3.netstat&#xff0c;pidof 二、UDP协议 1.udp协议格式 2.udp特点 3.基于udp的应用层协议 三、TCP协议 1.tcp报头 确认应答机制&#xff08;ACK) 超时重传机制 连接管理机制&#xff08;三次握手四次挥…

【Proteus仿真】【Arduino单片机】HC05蓝牙通信

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真Arduino单片机控制器&#xff0c;使用PCF8574、LCD1602液晶、HC05蓝牙传感器等。 主要功能&#xff1a; 系统运行后&#xff0c;LCD1602显示蓝牙接收数据。 二、软件设计 /* 作者…

初始MySQL(六)(自增长,索引,事务,隔离级别)

目录 自增长 索引 索引的原理: mysql索引的类型 添加/删除索引/查看索引 添加索引 删除索引 查看索引(没有生成或者问问什么时候存在) 小结 MySQL事务 关于事务的一些概念 mysql数据库控制台事务的几个重要操作 MySQL事务细节讨论 MySQL事务隔离级别 介绍 数据库…

UI原型图

最近没啥项目&#xff0c;闲来无事&#xff0c;研究了一下原型图&#xff0c;万一以后年龄大了&#xff0c;代码敲不动还可以画画原型图&#xff0c;嘿嘿嘿 今天研究了两款画原型图的工具&#xff0c;即时设计-即时设计 - 可实时协作的专业 UI 设计工具 MODAO-墨刀 两款工具…

数组相关面试题--5.合并两个有序数组

5. 合并两个有序数组 88. 合并两个有序数组 - 力扣&#xff08;LeetCode&#xff09; 解题思路:1. 从后往前遍历数组&#xff0c;将nums1和nums2中的元素逐个比较将较大的元素往nums1末尾进行搬移2. 第一步结束后&#xff0c;nums2中可能会有数据没有搬移完&#xff0c;将nums…

Docker的3主3从redis集群配置(扩容和缩容配置)

3主3从redis集群配置 1、关闭防火墙启动docker后台服务 systemctl start docker2、新建6个docker容器redis实例 docker run -d --name redis-node-1 --net host --privilegedtrue -v /data/redis/share/redis-node-1:/data redis:6.0.8 --cluster-enabled yes --appendonly …

蓝凌OA sysUiComponent 任意文件上传漏洞复现

0x01 产品简介 蓝凌核心产品EKP平台定位为新一代数字化生态OA平台&#xff0c;数字化向纵深发展&#xff0c;正加速构建产业互联网&#xff0c;对企业协作能力提出更高要求&#xff0c;蓝凌新一代生态型OA平台能够支撑办公数字化、管理智能化、应用平台化、组织生态化&#xff…

论文排版一步搞定之图表题注——(图标自动编号,引用题注)

同学们在撰写研究生毕业大论文时&#xff0c;一定会进行章节的多次调整&#xff0c;不到最后一刻很难定稿。此时&#xff0c;一幅插图或表格位置的变化可能会导致此章内大部分插图或表格编号的变化&#xff0c;插图和表格编号的改变同样会使得前文的引用发生变化。牵一发而动全…

如何在Docker部署Draw.io绘图工具并远程访问

文章目录 前言1. 使用Docker本地部署Drawio2. 安装cpolar内网穿透工具3. 配置Draw.io公网访问地址4. 公网远程访问Draw.io 前言 提到流程图&#xff0c;大家第一时间可能会想到Visio&#xff0c;不可否认&#xff0c;VIsio确实是功能强大&#xff0c;但是软件为收费&#xff0…

Tomcat web.xml文件中的mime-mapping

在Tomcat安装目录的conf/web.xml文件中&#xff0c;定义了大量的<mime-mapping>元素&#xff0c;例如&#xff1a; 其中<extension>指定了文件的扩展名&#xff0c;<mime-type>指定了mime类型&#xff0c;放在<mime-mapping>元素中&#xff0c;就是将…

某60工业互联网安全测试技术学习记录

系列文章目录 文章目录 系列文章目录前言工业互联网安全测试技术安全工具分类常用安全工具介绍 主机安全测试5.1 主机安全测试概览5.2 通用主机安全测试技术主机信息扫描 5.3 Linux主机安全测试5.4 Android 安全测试5.5 Windows主机安全测试5.6 UNIX 主机安全测试 工业渗透测试…

基于单片机的指纹密码锁(论文+源码)

1.系统设计 基于单片机的指纹锁控制系统设计的整体框图如图2.1所示&#xff0c;主控制模块选用单片机STC89C52单片机&#xff0c;同时还包括AT24C02存储电路&#xff0c;指纹模块&#xff0c;LCD12864液晶&#xff0c;继电器&#xff0c;矩阵键盘等硬件电路。其中指纹模块和矩…

分布式事务 - seata安装

分布式事务 - seata 一、本地事务与分布式事务 1.1、本地事务 本地事务&#xff0c;也就是传统的单机事务。在传统数据库事务中&#xff0c;必须要满足四个原则&#xff08;ACID&#xff09;。 1.2、分布式事务 分布式事务&#xff0c;就是指不是在单个服务或单个数据库架构…

【LeetCode刷题-滑动窗口】--567.字符串的排列

567.字符串的排列 方法&#xff1a;滑动窗口 由于排列不会改变字符串中每个字符的个数&#xff0c;所以只有当两个字符串每个字符的个数均相等时&#xff0c;才是另一个字符串的排列 根据这一性质&#xff0c;记s1的长度为n&#xff0c;遍历s2中的每个长度为n的子串&#xff…

JVM虚拟机:垃圾回收器ZGC和Shenandoah算法

随着计算机技术的不断发展,内存管理成为了一个重要的话题。垃圾回收是一种自动内存管理技术,它可以自动地回收不再使用的内存,从而减少内存泄漏和程序崩溃的风险。在Java等高级编程语言中,垃圾回收器是必不可少的组件。近年来,ZGC和Shenandoah算法作为新一代的垃圾回收器,…