码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • springboot 3.x 之 集成rabbitmq实现动态发送消息给不同的队列


    背景

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

    环境

    springboot 3.2
    JDK 17

    rabbitMQ模型介绍

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

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

    依赖

    <dependency>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-amqpartifactId>
    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
    

    关键代码

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

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

    参考文档列表

    RabbitMQ 5中消息模型介绍

    RabbitMQ动态创建消息队列

    RabbitMQ官方说明文档java指南

  • 相关阅读:
    在Qt中,怎么获取到在mainwindow.ui文件中添加的控件
    非递归中序遍历二叉树
    python教程--基础语法
    慧尔视:以CRM为抓手,打造用数据说话的企业
    FFmpeg入门详解之121:颜色空间转换RGB和YUV的原理与实战
    Mysql-解决Truncated incorrect DOUBLE value xxx
    智能温室大棚监控 环境监控 视频监控网关数采仪应用
    React TypeScript 样式报错
    SSM公司企业绩效考核管理系统
    adb命令大全
  • 原文地址:https://blog.csdn.net/u013919153/article/details/139775290
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号