当前位置:

首页 > 编程开发 > SpringBoot怎么集成RabbitMQ

SpringBoot怎么集成RabbitMQ

SpringBoot集成RabbitMQ首先搭建SpringBoot项目,在POMXML文件中添加如下依赖org.springframework.bootspring-boot-starter-amqporg.springframework.bootspring-boot-starter-web修改配置文件,添加如下RabbitMQ配置服务器:port:8888#设置端口号Spring:rabbitMQ:host:127.0.0.1#设置RabbitMQ的主机port:5672#设置RabbitMQ服务端

本文目录

    SpringBoot 集成 RabbitMQ

    首先搭建SpringBoot项目,在POM XML文件中添加如下依赖

    <依赖>
        org.springframework.boot
        spring-boot-starter-amqp<依赖>
        org.springframework.boot
        spring-boot-starter-web

    修改配置文件,添加如下RabbitMQ配置

    服务器:
      port: 8888 # 设置端口号Spring:
      rabbitMQ:
        host: 127.0.0.1 # 设置 RabbitMQ 的主机
        port: 5672 # 设置 RabbitMQ 服务端口
        username: guest # 设置 RabbitMQ 用户名
        password: guest # 设置 RabbitMQ 密码

    新的公共常量类

    public interface RabbitConstant { 
        /** 
         * 简单模式
         */ 
        String SIMPLE_QUEUE_NAME = "simple_queue"; 
        /** 
         * 工作模式
         */ 
        String WORK_QUEUE_NAME = "work_queue"; 
        /** 
         * 发布/订阅模式
         */ 
        String PUBLISH_SUBSCRIBE_EXCHANGE_NAME = "publish_subscribe_exchange"; 
        字符串 PUBLISH_SUBSCRIBE_FIRST_QUEUE_NAME = "publish_subscribe_first_queue"; 
        字符串 PUBLISH_SUBSCRIBE_SECOND_QUEUE_NAME = "publish_subscribe_second_queue"; 
        /** 
         * 路由模式
         */ 
        String ROUTING_EXCHANGE_NAME = "routing_exchange";
        字符串 ROUTING_FIRST_QUEUE_NAME = "routing_first_queue"; 
        字符串 ROUTING_SECOND_QUEUE_NAME = "routing_second_queue"; 
        字符串 ROUTING_THIRD_QUEUE_NAME = "routing_third_queue"; 
        字符串 ROUTING_FIRST_QUEUE_ROUTING_KEY_NAME = "routing_first_queue_routing_key"; 
        字符串 ROUTING_SECOND_QUEUE_ROUTING_KEY_NAME = "routing_second_queue_routing_key"; 
        字符串 ROUTING_THIRD_QUEUE_ROUTING_KEY_NAME = "routing_third_queue_routing_key"; 
        /** 
         * 主题模式
         */ 
        String TOPICS_EXCHANGE_NAME = "topics_exchange"; 
        字符串 TOPICS_FIRST_QUEUE_NAME = "topics_first_queue"; 
        字符串 TOPICS_SECOND_QUEUE_NAME = "
        字符串 TOPICS_THIRD_QUEUE_NAME = "topics_third_queue"; 
        String TOPICS_FIRST_QUEUE_ROUTING_KEY = "topics.first.routing.key"; 
        String TOPICS_SECOND_QUEUE_ROUTING_KEY = "topics.second.routing.key"; 
        String TOPICS_THIRD_QUEUE_ROUTING_KEY = "topics.third.routing.key"; 
        字符串 TOPICS_ROUTING_KEY_FIRST_WILDCARD = "#.first.#"; 
        字符串 TOPICS_ROUTING_KEY_SECOND_WILDCARD = "*.second.#"; 
        字符串 TOPICS_ROUTING_KEY_THRID_WILDCARD = "*.third.*"; 
        /** 
         * 标题模式
         */ 
        String HEADER_EXCHANGE_NAME = "header_exchange"; 
        字符串 HEADER_FIRST_QUEUE_NAME = "header_first_queue"; 
        字符串 HEADER_SECOND_QUEUE_NAME = "header_second_queue"; 
        /**
         * rpc 模式
         */ 
        String RPC_QUEUE_NAME = "rpc_queue"; 
    }

    添加一个Controller请求类(用于验证结果,最后可以添加)

    导入 com.example.rabbitmq.constant.RabbitConstant;
    导入 org.springframework.amqp.core.Message;
    导入 org.springframework.amqp.core.MessageProperties;
    导入 org.springframework.amqp.rabbit.core.RabbitTemplate;
    导入 org.springframework.beans.factory.annotation.Autowired;
    导入 org.springframework.web.bind.annotation.GetMapping;
    导入 org.springframework.web.bind.annotation.RestController;
    导入 java.nio.charset.StandardCharsets;@RestController public class RabbitController { 
        @Autowired 
        private RabbitTemplate rabbitTemplate; 
        @GetMapping(value = "/simple") 
        public void simple() {
            rabbitTemplate.convertAndSend(RabbitConstant.SIMPLE_QUEUE_NAME, "你好世界!"); 
        } 
        @GetMapping(value = "/work") 
        public void work() { 
            rabbitTemplate.convertAndSend(RabbitConstant.WORK_QUEUE_NAME, "work hello!"); 
        } 
        @GetMapping(value = "/pubsub") 
        public void pubsub() { 
            rabbitTemplate.convertAndSend(RabbitConstant.PUBLISH_SUBSCRIBE_EXCHANGE_NAME, null, "发布/订阅你好"); 
        } 
        @GetMapping(value = "/routing") 
        public void routing() { 
            // 向第一个队列发送消息
            rabbitTemplate.convertAndSend(RabbitConstant.ROUTING_EXCHANGE_NAME, RabbitConstant.ROUTING_FIRST_QUEUE_ROUTING_KEY_NAME, "路由你好"); 
        } 
        @GetMapping(value = "/topics") 
        public void topics() { 
            // 向第一个队列发送消息。这时候队列可以接收到消息,因为队列的通配符是#first.#,而routing_key是topics first。路由。键,匹配成功
            rabbitTemplate.convertAndSend(RabbitConstant.TOPICS_EXCHANGE_NAME, RabbitConstant.TOPICS_FIRST_QUEUE_ROUTING_KEY, "topics hello");        // 向第二个队列发送消息。这时候队列也能收到消息了,因为队列的通配符是*秒#,而routing_key是topic秒。路由。键,匹配成功
            rabbitTemplate.convertAndSend(RabbitConstant.TOPICS_EXCHANGE_NAME, RabbitConstant.TOPICS_SECOND_QUEUE_ROUTING_KEY, "topics hello"); 
            // 向第三个队列发送消息。此时队列无法接受消息,因为队列通配符是*第三个*,而routing_key是topics第三个。路由。键,匹配失败
            rabbitTemplate.convertAndSend(RabbitConstant.TOPICS_EXCHANGE_NAME, RabbitConstant.TOPICS_THIRD_QUEUE_ROUTING_KEY, "topics hello"); 
        } 
        @GetMapping(value = "/header")    public void header() { 
            // 这个消息应该被两个队列接收。第一个队列全部匹配成功,第二个队列 Hello 值任意匹配成功
            MessageProperties messageProperties = new MessageProperties(); 
            messageProperties.setHeader("matchAll", "YES"); 
            messageProperties.setHeader("你好", "world"); 
            Message message = new Message("header first hello".getBytes(StandardCharsets.UTF_8), messageProperties); 
            rabbitTemplate.convertAndSend(RabbitConstant.HEADER_EXCHANGE_NAME, null, message); 
            // 这个消息应该只被第二个队列接受。第一个队列全部匹配失败,
            MessageProperties messagePropertiesSecond = new MessageProperties(); 
            messagePropertiesSecond.setHeader("matchAll", "NO"); 
            Message messageSecond = new Message("header second hello".getBytes(StandardCharsets.UTF_8), messagePropertiesSecond); 
            rabbitTemplate.convertAndSend(RabbitConstant.HEADER_EXCHANGE_NAME, null, messageSecond); 
        } 
        @GetMapping(value = "/rpc") 
        public void rpc() { 
            Object responseMsg = rabbitTemplate.convertSendAndReceive(RabbitConstant.RPC_QUEUE_NAME, "rpc hello!"); 
            System.out.println("rabbit rpc 响应消息:" + responseMsg); 
        } 
    }
    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    编程开发
    相关文章 更多
    RabbitMQ Fanout Exchange 多消费者正确实现指南
    RabbitMQ Fanout Exchange 多消费者正确实现指南

    在Go中使用RabbitMQFanoutExchange时,多个消费者需同时接收消息。正确做法是声明fanout类型交换器,并为每个消费者创建独立队列并绑定到该交换器,确保交换器类型正确、队列名唯一,RabbitMQ会将消息广播至所有绑定队列,实现一对多分发。

    Centos 6.4 安装erlang&rabbitmq的方法
    Centos 6.4 安装erlang&rabbitmq的方法

    在开始搭建消息队列服务之前,得先搞定两个核心组件:Erlang 和 RabbitMQ。Erlang 是 RabbitMQ 的运行时环境,所以顺序不能乱——先装 Erlang,再装 RabbitMQ。下面把整个过程拆开来讲,每一步都配了具体的命令,照着走基本不会出错。 1. 安装 Erlang 1.1

    Symfony 将RabbitMQ消息转为数组方法
    Symfony 将RabbitMQ消息转为数组方法

    答案:将Symfony中RabbitMQ消息转为数组需根据消息体格式选择反序列化方式,常见为JSON或PHP序列化;若为JSON,使用json_decode($messageBody,true)转换并校验错误;若为PHP序列化,使用unserialize()但需注意安全风险;其他格式则用对应解析器;若消息封装在对象中,需先提取消息体。

    Python RabbitMQ教程:消息队列入门指南
    Python RabbitMQ教程:消息队列入门指南

    Python操作RabbitMQ的关键在于理解其消息队列流程和工作机制,安装pika库后即可通过简单步骤实现消息发送与接收。首先需安装pika:pipinstallpika,并确保RabbitMQ服务运行;其次,发送消息时需建立连接、打开通道、声明队列并发送消息;接着,接收消息时需监听队列、定义回调函数处理消息,并注意确认机制与连接关闭;此外,实际应用中应关注异常处理、消息持久化、多消费者支持及死信队列等特性以提升系统健壮性。掌握这些步骤和注意事项后,Python结合RabbitMQ的基础操作便能快速上手

    PHP实战:RabbitMQ消息队列详解
    PHP实战:RabbitMQ消息队列详解

    PHP结合RabbitMQ构建异步处理系统需安装RabbitMQ和AMQP扩展1,通过AMQP类连接服务器2,声明交换机和队列并绑定路由键3,使用publish方法发布消息4,利用consume消费消息并调用ack确认5,为避免消息丢失应启用持久化、发布者确认或事务机制6,可通过RabbitMQManagementPlugin、命令行工具或Prometheus+Grafana监控性能7,配置死信队列处理无法消费的消息8,保证消息顺序可通过单消费者、单一队列或分组排序等策略实现9。

    springBoot项目常用目录有哪些
    springBoot项目常用目录有哪些

    springBoot项目常用目录springBoot项目的目录结构及名规范介绍基于SpringBoot开发时的目录结构及命名规范,通过介绍能够为你解决,在实际项目中如何规划目录结构?如何命名目录更规范?各个目录分别代表什么含义?等三个问题。目录说明servicex//项目名|-admin-ui//管理服务前端代码(一般将UI和SERVICE放到一个工程中,便于管理)|-servicex-auth//模块1|-servicex-common//模块2|-servicex-gateway//模块3|-serv

    学习如何安装、配置、部署和使用宝塔面板中的RabbitMQ可视化工具
    学习如何安装、配置、部署和使用宝塔面板中的RabbitMQ可视化工具

    RabbitMQ是一款开源的消息代理和队列服务器,旨在通过通用协议实现不同应用之间的数据共享,实现跨平台和跨语言的通信。该系统采用Erlang语言编写,并基于AMQP协议。其最显著的特点之一是在提供高度解耦的服务之间无需确保提供方的存在。接下来介绍关于如何在宝塔面板上可视化安装、配置、部署、使用RabbitMQ。一、RabbitMQ的特点1.可靠性RabbitMQ通过诸如持久化、传输确认和发布确认等机制来确保消息的可靠性。2.灵活的路由消息在进入队列之前通过交换器进行路由,可按照特定规则进行灵活分发。3.

    PHP开发中如何使用RabbitMQ实现消息传递
    PHP开发中如何使用RabbitMQ实现消息传递

    RabbitMQ是一种消息队列软件,可用于在应用程序之间进行消息传递。在PHP开发中,使用RabbitMQ可以实现异步处理任务、实现分布式系统等。本篇文章将介绍如何在PHP开发中使用RabbitMQ实现消息传递。一、安装RabbitMQ服务RabbitMQ是开源软件,可从其官网(https://www.rabbitmq.com/download.html)下

    PHP与RabbitMQ结合实现消息队列处理和分发的方法
    PHP与RabbitMQ结合实现消息队列处理和分发的方法

    随着互联网业务的不断发展,系统间的数据交换变得越来越频繁。在传统的请求响应式架构中,数据传递的方式往往是同步的,即等待请求响应结果后才能进行下一步操作,当数据量较大或者请求响应时间较长时,这种方式往往会导致系统性能下降。此时,消息队列就成为一种比较理想的解决方案,可以实现异步、解耦、扩展性好等优点。RabbitMQ作为一款消息队列中间件,提供了丰富的API,

    比较RabbitMQ和Kafka:如何选择高效的消息中间件
    比较RabbitMQ和Kafka:如何选择高效的消息中间件

    RabbitMQ和Kafka的比较:选择高效的消息中间件简介消息中间件是一种软件,它允许应用程序通过异步消息传递进行通信。消息中间件可以用于各种目的,包括:解耦应用程序:消息中间件可以将应用程序解耦,使它们能够独立于彼此开发和部署。提高可伸缩性:消息中间件可以帮助应用程序提高可伸缩性,使它们能够处理更多的并发请求。提高可靠性:消息中间件可以帮助应用程序提高可

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程
    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版
    macOS

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版
    Windows

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。