前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Springboot整合RabbitMQ ,用心看完这一篇就够了

Springboot整合RabbitMQ ,用心看完这一篇就够了

作者头像
I Teach You 我教你
发布于 2023-07-18 10:10:36
发布于 2023-07-18 10:10:36
69401
代码可运行
举报
运行总次数:1
代码可运行
下载安装

RabbitMQ官网:https://www.rabbitmq.com/

  1. 下载地址 RabbitMQ下载链接在Github中,可以从官网处https://www.rabbitmq.com/#getstarted点击进入,也可以直接输入地址进入:https://github.com/rabbitmq/rabbitmq-server/releases。
  2. 选择版本 Linux CentOS版本:rabbitmq-server-3.11.15-1.el8.noarch.rpm Windows版本:rabbitmq-server-3.11.15.exe
  3. 安装ErLang 由于RabbitMQ是采用ErLang语言开发的,所以需要ErLang支持,下载地址 https://www.erlang.org/downloads,选择对应的版本即可。 Windows安装ErLang相对简单,就是一直下一步即可,Linux安装较麻烦,以下介绍CentOS中安装ErLang步骤。
安装Erlang环境
  1. 检查Linux是否有erlang环境
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1erl
  1. 安装GCC、GCC-C++、Openssl等模块,安装过就不需要安装了
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel 
  1. 安装驱动UnixODBC
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1yum install unixODBC unixODBC-devel
  1. 解压ErLang安装包,并进入文件夹
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1tar -zxvf otp_src_25.3.2.tar.gz
2cd otp_src_25.3.2
  1. 进行编译配置
  • 5.1. 如果没有JDK,或者就是新的Linux环境用如下命令:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1./configure --prefix=/usr/local/erlang --enable-hipe --enable-threads --enable-smp-support --enable-kernel-poll --without-javac
  • 5.2. 如果有JDK环境用上面或者下面命令(建议直接用上面命令):
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1./configure --prefix=/usr/local/erlang

其中APPLICATIONS DISABLED 标示是必须要安装的,另外两个项目可以忽略,我们上上面--without-javac忽略了java编译,出现这个就算配置成功了。

  1. 编译安装
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1./configure --prefix=/usr/local/erlang
  1. 将erlang的启动软链到/usr/local/bin/下
  • 7.1. 配置快捷方式(比较偷懒的方法)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1ln -s /usr/local/erlang/bin/erl /usr/local/bin/
  • 7.2. 配置erlang环境
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1vim /etc/profile

追加如下配置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1export ERLANG_HOME=/usr/local/erlang
2export PATH=$PATH:$ERLANG_HOME/bin
  1. 重新加载profile
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1source /etc/profile
  1. 测试
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1erl
安装RabbitMQ
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1yum install rabbitmq-server-3.11.15-1.el8.noarch.rpm
  1. 常用命令
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1# 启动
2service rabbitmq-server start
3# 查看状态
4rabbitmqctl status
5# 启用插件 (图像化界面)
6rabbitmq-plugins enable rabbitmq_management
7# 重启
8service rabbitmq-server restart
  1. 其它操作在图形化界面中均可完成,这里不做详细解释
Springboot 链接 RabbitMQ
  1. Maven依赖
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1<!--rabbitmq-->
2<dependency>
3    <groupId>org.springframework.boot</groupId>
4    <artifactId>spring-boot-starter-amqp</artifactId>
5</dependency>
  1. application.yml
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1spring:
2  # 配置RabbitMq 服务器
3  rabbitmq:
4    host: 127.0.0.1
5    port: 5672
6    username: guest
7    password: guest
8    # 虚拟host可以不设置,默认/
9    virtual-host: /

注意:里面的虚拟host配置项不是必须的,我自己在rabbitmq服务上创建了自己的虚拟host,所以我配置了;你们不创建,就不用加这个配置项(默认写 :virtual-host: /)。

  1. 接着我们先使用下direct exchange(直连型交换机),创建RabbitDirectProducerConfig.java(对于队列和交换机持久化以及连接使用设置,在注释里有说明,后面的不同交换机的配置就不做同样说明了):
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1package cn.xuexiluxian.crm.websocket.config;
 2
 3import cn.xuexiluxian.open.common.constant.Constants;
 4import org.springframework.amqp.core.Binding;
 5import org.springframework.amqp.core.BindingBuilder;
 6import org.springframework.amqp.core.DirectExchange;
 7import org.springframework.amqp.core.Queue;
 8import org.springframework.context.annotation.Bean;
 9import org.springframework.context.annotation.Configuration;
10
11
12/**
13 * RabbitMQ直连配置
14 */
15@Configuration
16public class RabbitDirectProducerConfig {
17    //队列 起名:TestDirectQueue
18    @Bean
19    public Queue crmProducerDirectQueue() {
20        // durable:是否持久化,默认是false,持久化队列:会被存储在磁盘上,当消息代理重启时仍然存在,暂存队列:当前连接有效
21        // exclusive:默认也是false,只能被当前创建的连接使用,而且当连接关闭后队列即被删除。此参考优先级高于durable
22        // autoDelete:是否自动删除,当没有生产者或者消费者使用此队列,该队列会自动删除。
23        // return new Queue("TestDirectQueue",true,true,false);
24        //一般设置一下队列的持久化就好,其余两个就是默认false
25        return new Queue(Constants.RABBITMQ_DEFAULT_QUEUE,true);
26    }
27
28    //Direct交换机 起名:TestDirectExchange
29    @Bean
30    DirectExchange crmProducerDirectExchange() {
31        //  return new DirectExchange("TestDirectExchange",true,true);
32        return new DirectExchange(Constants.RABBITMQ_DEFAULT_DIRECT_EXCHANGE,true,false);
33    }
34
35    //绑定  将队列和交换机绑定, 并设置用于匹配键:TestDirectRouting
36    @Bean
37    Binding bindingProducerDirect() {
38        return BindingBuilder.bind(crmProducerDirectQueue()).to(crmProducerDirectExchange()).with(Constants.RABBITMQ_DEFAULT_DIRECT_ROUTING);
39    }
40
41    @Bean
42    DirectExchange lonelyDirectExchange() {
43        return new DirectExchange("lonelyDirectExchange");
44    }
45}
  1. 测试生产者
  • 4.1. 注入
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1@Autowired
2private RabbitTemplate rabbitTemplate;
  • 4.1. 发送消息
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1rabbitTemplate.convertAndSend(Constants.RABBITMQ_DEFAULT_DIRECT_EXCHANGE, Constants.RABBITMQ_DEFAULT_DIRECT_ROUTING, "Hello RabbitMQ");
  1. 配置消费者
  • 5.1. Maven依赖参考上面第一步
  • 5.2. 消费者配置类RabbitDirectConsumerConfig.java
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1package cn.xuexiluxian.crm.websocket.config;
 2
 3import cn.xuexiluxian.open.common.constant.Constants;
 4import org.springframework.amqp.core.Binding;
 5import org.springframework.amqp.core.BindingBuilder;
 6import org.springframework.amqp.core.DirectExchange;
 7import org.springframework.amqp.core.Queue;
 8import org.springframework.context.annotation.Bean;
 9import org.springframework.context.annotation.Configuration;
10
11/**
12 * @Author : JCccc
13 * @CreateTime : 2019/9/3
14 * @Description :
15 **/
16@Configuration
17public class RabbitDirectConsumerConfig {
18    @Bean
19    public Queue crmConsumerDirectQueue() {
20        return new Queue(Constants.RABBITMQ_DEFAULT_QUEUE,true);
21    }
22
23    //Direct交换机
24    @Bean
25    DirectExchange crmConsumerDirectExchange() {
26        return new DirectExchange(Constants.RABBITMQ_DEFAULT_DIRECT_EXCHANGE);
27    }
28
29    //绑定:将队列和交换机绑定,并设置用于匹配键
30    @Bean
31    Binding bindingConsumerDirect() {
32        return BindingBuilder.bind(crmConsumerDirectQueue()).to(crmConsumerDirectExchange()).with(Constants.RABBITMQ_DEFAULT_DIRECT_ROUTING);
33    }
34}
  1. 监听器
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1@Component
2@RabbitListener(queues = Constants.RABBITMQ_DEFAULT_QUEUE) //监听的队列名称
3public class CrmRabbitMQListener {
4    @RabbitHandler
5    public void callback(Map testMessage) {
6        System.out.println("消费者收到消息  : " + testMessage.toString());
7    }
8}
  1. 常量类
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1package cn.xuexiluxian.open.common.constant;
2
3public class Constants {
4    public static final String RABBITMQ_DEFAULT_QUEUE = "xiaoluxian-crm-queue";
5    public static final String RABBITMQ_DEFAULT_DIRECT_EXCHANGE = "xiaoluxian-crm-direct_exchange";
6    public static final String RABBITMQ_DEFAULT_DIRECT_ROUTING = "xiaoluxian-crm-direct-routing";
7}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023/05/08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
手把手带你Springboot整合RabbitMq ,一篇讲完
该篇文章内容较多,包括有rabbitMq相关的一些简单理论介绍,provider消息推送实例,consumer消息消费实例,Direct、Topic、Fanout的使用,消息回调、手动确认等。(但是关于rabbitMq的安装,就不介绍了)
java进阶架构师
2020/06/16
1.7K0
手把手带你Springboot整合RabbitMq ,一篇讲完
SpringBoot RabbitMQ 整合进阶版
RabbitMQ 是消息中间件的一种, 消息中间件即分布式系统中完成消息的发送和接收的基础软件. 这些软件有很多, 包括 ActiveMQ ( apache 公司的), RocketMQ (阿里巴巴公司的, 现已经转让给 apache), 还有性能极高的 Kafka。
botkenni
2022/05/06
3150
SpringBoot RabbitMQ 整合进阶版
SpringBoot与RabbitMQ详解与整合
Direct Exchange是RabbitMQ默认的交换机模式,也是最简单的模式,根据key全文匹配去寻找队列。
码哥字节
2021/07/27
7830
springboot下使用rabbitMQ之开发配置方式(一)
本次结合着B站某MQ视频以及最近在MQ上的实践聊一聊个人在使用rabbitMQ中所得。
上帝
2023/10/16
1.1K0
springboot下使用rabbitMQ之开发配置方式(一)
SpringBoot整合RabbitMQ消息组件
1、RabbitMQ是一个在AMQP基础上构建的新一代企业级消息系统,该组件由Pivotal公司提供,使用ErLang语言开发。
别先生
2020/11/26
2980
SpringBoot整合RabbitMQ消息组件
SpringBoot整合rabbitMq
消息队列(Message Queue)简称mq,本文将介绍SpringBoot整合rabbitmq的功能使用
半月无霜
2023/03/03
5970
SpringBoot整合RabbitMQ 实现五种消息模型 详细教程
今天说下了消息队列中间件,各种队列性能对比,RabbitMQ队列,交换机(Exchange)以及消息 中间件的应用场景,然后带着大家一起实现RabbitMQ的五种消息模型。
全栈程序员站长
2022/08/28
1.2K0
SpringBoot整合RabbitMQ 实现五种消息模型 详细教程
mall整合RabbitMQ实现延迟消息
1.安装Erlang,下载地址:http://erlang.org/download/otpwin6421.3.exe
猿天地
2019/07/09
7200
mall整合RabbitMQ实现延迟消息
springboot整合rabbitMQ 死信队列(基本)
创建两个队列QA和QB,两者队列TTL分别设置为10S和40S,然后在创建一个交换机X和死信交换机Y,它们的类型都是direct,创建一个死信队列QD,它们的绑定关系如下
一个风轻云淡
2022/11/13
5780
springboot整合rabbitMQ 死信队列(基本)
SpringBoot RabbitMQ 实战
RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务器是用Erlang语言编写的,而集群和故障转移是构建在开放电信平台框架上的。所有主要的编程语言均有与代理接口通讯的客户端库。
默存
2022/06/24
4560
SpringBoot RabbitMQ 实战
SpringBoot教程(十五) | SpringBoot集成RabbitMq
RabbitMq是我们在开发过程中经常会使用的一种消息队列。今天我们来研究研究rabbitMq的使用。
一缕82年的清风
2022/04/08
7450
SpringBoot教程(十五) | SpringBoot集成RabbitMq
RabbitMQ:第三章:Springboot集成RabbitMQ(直连模式,工作队列模式,发布订阅模式,路由模式,通配符模式)
RabbitMQ:第二章:Spring整合RabbitMQ(简单模式,广播模式,路由模式,通配符模式,消息可靠性投递,防止消息丢失,TTL,死信队列,延迟队列,消息积压,消息幂等性)
Java廖志伟
2022/03/07
4550
RabbitMQ:第三章:Springboot集成RabbitMQ(直连模式,工作队列模式,发布订阅模式,路由模式,通配符模式)
RabbitMQ 入门
MQ,中文是消息队列(MessageQueue),字面来看就是存放消息的队列。也就是事件驱动架构中的Broker。
ma布
2024/10/21
840
RabbitMQ 入门
RabbitMQ的工作队列在Spring Boot中实现(详解常⽤的⼯作模式)
上文着重介绍RabbitMQ 七种工作模式介绍RabbitMQ 七种工作模式介绍_rabbitmq 工作模式-CSDN博客
用户11369558
2024/11/20
3240
RabbitMQ的工作队列在Spring Boot中实现(详解常⽤的⼯作模式)
rabbitMq实现延时队列 原
    rabbitMq是受欢迎的消息中间件之一,相比其他的消息中间件,具有高并发的特性(天生具备高并发高可用的erlang语言编写),除此之外,还可以持久化,保证消息不易丢失,高可用,实现集群部署,提供灵活的路由和可靠性,可视化管理等等的优点。
chinotan
2019/04/03
6270
rabbitMq实现延时队列
                                                                            原
Springboot整合Rabbitmq,Direct、Fanout、Topic
https://www.rabbitmq.com/install-windows.html 注意安装Erlang,没有安装的话安装rabbitmq也会提示你跳转安装Erlang
鱼找水需要时间
2023/02/16
7030
Springboot整合Rabbitmq,Direct、Fanout、Topic
SpringBoot基础(四、整合RabbitMQ)
先安装Erlang语言(一路确定即可),再安装RabbitMQ服务(一路确定即可,注意WIN10是否中文名字)。
营琪
2019/11/04
4710
03、RabbitMQ延迟队列(死信交换机)
天蝎座的程序媛
2023/10/17
2870
03、RabbitMQ延迟队列(死信交换机)
RabbitMQ消息队列入门及解决常见问题
两种方式各有优劣,打电话可以立即得到响应,但是你却不能跟多个人同时通话。发送邮件可以同时与多个人收发邮件,但是往往响应会有延迟。
不吃紫菜
2023/02/13
2.2K0
RabbitMQ消息队列入门及解决常见问题
【Rabbitmq篇】高级特性----TTL,死信队列,延迟队列
目前有俩种方式可以设置消息的TTL 一是设置队列的TTL,队列中所有消息都有相同的过期时间.
用户11369558
2024/11/25
5420
【Rabbitmq篇】高级特性----TTL,死信队列,延迟队列
相关推荐
手把手带你Springboot整合RabbitMq ,一篇讲完
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验