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

springboot 3.x 之 集成rabbitmq实现动态发送消息给不同的队列

背景

实际项目中遇到针对不同类型的消息,发送消息到不同的队列,而且队列可能还不存在,需要动态创建,于是写了如下代码,实践发现没啥问题,这里分享下。

环境

springboot 3.2
JDK 17

rabbitMQ模型介绍

在这里插入图片描述
图片来自参考链接表中的一篇介绍

注意,下面例子用到的是Direct模型

依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId>
</dependency>

配置

spring.rabbitmq.host=xxx
spring.rabbitmq.port=5672
spring.rabbitmq.username=xxx
spring.rabbitmq.password=xxx
spring.rabbitmq.virtual-host=/
#开启发布确认回调
spring.rabbitmq.publisher-confirm-type=correlated
spring.rabbitmq.publisher-returns=true
spring.rabbitmq.listener.simple.retry.enabled=true
spring.rabbitmq.listener.simple.retry.max-attempts=3
spring.rabbitmq.listener.simple.retry.initial-interval=10000ms

关键代码

    @Resourceprivate ConnectionFactory connectionFactory;//这里指定一个exchange,之后会根据routeKey动态绑定不同的队列@Value("${rabbitmq.msgExchangeName:MsgExchange}")private String registerExchangeName;@Testvoid contextLoads() {}@Testvoid testMQ(){try (Connection connection = connectionFactory.createConnection();Channel channel = connection.createChannel(false)) {String msgType = "bus_error";// Declare an exchangeString exchangeName = registerExchangeName;channel.exchangeDeclare(exchangeName, BuiltinExchangeType.DIRECT, true);// Generate a unique queue nameString queueName = "msg_" + msgType;channel.queueDeclare(queueName, true, false, false, null);// Define the routing keychannel.queueBind(queueName, exchangeName, msgType);// Send a message to the exchangeString message = "Hello, RabbitMQ!";channel.basicPublish(exchangeName, msgType, null, message.getBytes());} catch (IOException | TimeoutException e) {e.printStackTrace();}}

至于监听队列,消费,就没啥好写的了,百度一大堆。

参考文档列表

RabbitMQ 5中消息模型介绍

RabbitMQ动态创建消息队列

RabbitMQ官方说明文档java指南

相关文章:

  • 证明 几何分布 的期望和方差
  • 实现锚点链接点击tab跳转到指定位置 并且滚动鼠标顶部锚点的样式也跟随变化
  • 了解 XML HttpRequest 及其在 Web 开发中的应用
  • 什么是模型轻量化?如何自动进行模型轻量化?
  • Linux命令的语法和帮助系统
  • 海豚调度异常处理: 使用 arthas 在内存中删除启动失败的工作流
  • AMS(ActivityManagerService)源码解析2,Android应用是如何被启动的
  • 【Android】安Android Studio环境搭建注意点
  • QT
  • 练习时长 1 年 2 个月的 Java 菜鸡练习生最近面经,期望25K
  • article:文章信息表
  • 和鲸101计划:以神经计算建模培训,助力北大学术人才培养
  • lspci总结
  • 【最新鸿蒙应开发】——HarmonyOS沙箱目录
  • 【Kafka】Kafka Producer 分区-05
  • [微信小程序] 使用ES6特性Class后出现编译异常
  • 【391天】每日项目总结系列128(2018.03.03)
  • 【刷算法】求1+2+3+...+n
  • 78. Subsets
  • Android 架构优化~MVP 架构改造
  • android百种动画侧滑库、步骤视图、TextView效果、社交、搜房、K线图等源码
  • Essential Studio for ASP.NET Web Forms 2017 v2,新增自定义树形网格工具栏
  • GitUp, 你不可错过的秀外慧中的git工具
  • jquery cookie
  • Less 日常用法
  • Quartz初级教程
  • Spring Cloud(3) - 服务治理: Spring Cloud Eureka
  • 不上全站https的网站你们就等着被恶心死吧
  • 警报:线上事故之CountDownLatch的威力
  • 七牛云 DV OV EV SSL 证书上线,限时折扣低至 6.75 折!
  • 使用 QuickBI 搭建酷炫可视化分析
  • 腾讯优测优分享 | 你是否体验过Android手机插入耳机后仍外放的尴尬?
  • 学习Vue.js的五个小例子
  • 一个项目push到多个远程Git仓库
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • 仓管云——企业云erp功能有哪些?
  • 策略 : 一文教你成为人工智能(AI)领域专家
  • #pragma once
  • (01)ORB-SLAM2源码无死角解析-(66) BA优化(g2o)→闭环线程:Optimizer::GlobalBundleAdjustemnt→全局优化
  • (175)FPGA门控时钟技术
  • (二)正点原子I.MX6ULL u-boot移植
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • (四)docker:为mysql和java jar运行环境创建同一网络,容器互联
  • (五)关系数据库标准语言SQL
  • (原)Matlab的svmtrain和svmclassify
  • (转)如何上传第三方jar包至Maven私服让maven项目可以使用第三方jar包
  • (轉貼)《OOD启思录》:61条面向对象设计的经验原则 (OO)
  • .NET Core IdentityServer4实战-开篇介绍与规划
  • .net core使用RPC方式进行高效的HTTP服务访问
  • .NET IoC 容器(三)Autofac
  • .NET 快速重构概要1
  • .net 桌面开发 运行一阵子就自动关闭_聊城旋转门家用价格大约是多少,全自动旋转门,期待合作...
  • .NET开源项目介绍及资源推荐:数据持久层 (微软MVP写作)
  • .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验
  • .sys文件乱码_python vscode输出乱码