当前位置: 首页 > news >正文

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

在这里插入图片描述

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.lryc.cn/news/232552.html

相关文章:

  • 【软考篇】中级软件设计师 第五部分
  • 论文阅读——RetNet
  • 【Proteus仿真】【51单片机】锂电池管理系统
  • 【工具使用-VScode】设置 VSCode 的自动保存功能
  • 常用Git命令记录
  • Go语言常用库
  • 二叉树(进阶)
  • Flink之OperatorState
  • Python集成学习和随机森林算法
  • 代码随想录算法训练营第二十四天| 77 组合
  • el-dialog element-ui弹窗
  • 计算机网络的发展
  • 官宣!Wayland正式支持基于IntelliJ的IDE
  • 大模型在数据分析场景下的能力评测|进阶篇
  • 服务注册发现 springcloud netflix eureka
  • Spring cloud负载均衡@LoadBalanced LoadBalancerClient
  • 6.运行mysql容器-理解容器数据卷
  • golang学习笔记——查找质数
  • C++ 基础二
  • 鼎盛合 | 宠物智能投食机方案设计开发
  • ERR_PNPM_INVALID_WORKSPACE_CONFIGURATION packages field missing or empty
  • ubuntu 23.04从源码编译安装rocm运行tensorflow-rocm
  • echarts 图表文字大小自适应 字体大小自适应
  • 【项目】云备份系统基础功能实现
  • 【Shell脚本13】Shell 文件包含
  • 2023.11.15 关于 Spring Boot 配置文件
  • 2023年第九届数维杯国际大学生数学建模挑战赛A题
  • IDEA写mybatis程序,java.io.IOException:Could not find resource mybatis-config.xml
  • 1软件管理
  • flutter 绘制右上角圆角三角形标签