SpringBoot整合RabbitMQ 通俗易懂 超详细 【内含案例】
SpringBoot结合RabbitMq
一、SpringBoot 框架部署
1.创建Maven工程(我用的IDEA)
File[文件] -> New[新建] -> Project[工程] -> Maven[选择Maven] -> Next[直接下一步] -> Name[输入项目名称] —> Finish[完成]
2.在项目里创建两个子工程
Producer 消息生产者
项目名称位置右键 -> New[新建] -> Module[组件] -> Maven[选择Maven] -> Next[下一步] -> Name[输入Producer] —> Finish[完成]
Consumer 消息消费者
项目名称位置右键 -> New[新建] -> Module[组件] -> Maven[选择Maven] -> Next[下一步] -> Name[输入Consumer] —> Finish[完成]
3.在主项目工程的pom文件里填写依赖(注意是主项目 两个子项目会继承父项目的依赖)
<!--Spring Boot依赖-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.8.RELEASE</version>
</parent>
<dependencies>
<!--spring-boot-starter-amqp依赖 [重要]-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
<version>2.2.8.RELEASE</version>
</dependency>
<!--下面三个依赖是为了方便控制台输出Log [一般]-->
<!--junit:junit 单元测试框架 用了都说好-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
</dependency>
<!--org.projectlombok:lombok 整合注解-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
</dependency>
<!--ch.qos.logback:logback-classic 日志框架-->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
<!--spring-boot-starter-test SpringBootTest-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<version>2.2.8.RELEASE</version>
</dependency>
</dependencies>
4.分别在两个子项目中创建application.yml文件
注意.yml文件需下载 YAML 插件
resource文件夹右键 -> New[新建] -> File[文件] -> Name[输入application.yml] —> Finish[完成]
spring:
rabbitmq:
host: localhost
port: 5672
virtual-host: /
username: username 改成你自己的账号
password: password 改成你自己的密码
server:
port: 服务器端口号 两个子工程不能一致
5.Producer生产者创建启动类
Java文件夹右键 -> New[新建] -> Java Class[类文件] -> Name[com.rabbit.producer.ProviderRabbitApplication.java] —> Finish[完成]
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* 生产者启动类
*/
@SpringBootApplication
public class ProviderRabbitApplication {
public static void main(String[] args) {
SpringApplication.run(ProviderRabbitApplication.class,args);
}
}
6.Consumer生产者创建启动类
Java文件夹右键 -> New[新建] -> Java Class[类文件] -> Name[com.rabbit.consumer.ConsumerRabbitMqApplication.java] —> Finish[完成]
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* 消费者启动类
*/
@SpringBootApplication
public class ConsumerRabbitMqApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerRabbitMqApplication.class,args);
}
}
二、HelloWorld 简单模式
1.创建RabbitMqConfig.java文件 绑定交换机和队列
Java文件夹右键 -> New[新建] -> Java Class[类文件] -> Name[com.rabbit.producer.config.RabbitMqConfig.java] —> Finish[完成]
import org.springframework.amqp.core.*;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* RabbitMq 配置类
*/
@Configuration
public class RabbitMqConfig {
public static final String SIMPLE_EXCHANGE_NAME = "simple_exchange";
public static final String SIMPLE_QUEUE_NAME = "simple_queue";
/**
* 创建 交换机
* @return
*/
@Bean
public Exchange simpleExchange(){
return ExchangeBuilder.topicExchange(SIMPLE_EXCHANGE_NAME).build();
}
/**
* 创建 队列
* @return
*/
@Bean
public Queue simpleQueue(){
return QueueBuilder.durable(SIMPLE_QUEUE_NAME).build();
}
/**
* 绑定 交换机与队列
* @param exchange
* @param queue
* @return
*/
@Bean
public Binding itemQueueExchange(@Qualifier("simpleExchange") Exchange exchange, @Qualifier("simplQueue") Queue queue){
return BindingBuilder.bind(queue).to(exchange).with("").noargs();
}
}
2.创建ConsumerListener.java监听消息文件
Java文件夹右键 -> New[新建] -> Java Class[类文件] -> Name[com.rabbit.cosnumer.listener.ConsumerListener.java] —> Finish[完成]
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
import lombok.extern.slf4j.Slf4j;
@Component
@Slf4j
public class ConsumerListener {
/**
* 监听某个队列的消息
* @param message 接收到的消息
*/
@RabbitListener(queuesToDeclare = "simple_queue")
public void myListener(String message){
//不用在手动转UTF-8 Spring自动转好了
log.debug("消费者接收到的消息为:{}", message);
}
}
3.创建ProducerTest.java测试文件
test->java文件夹右键 -> New[新建] -> Java Class[类文件] -> Name[com.rabbit.producer.test.ProducerTest.java] —> Finish[完成]
import lombok.extern.slf4j.Slf4j;
import com.itheima.rabbitmq.config.RabbitMQConfig;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import javax.annotation.Resource;
@RunWith(SpringRunner.class)
@SpringBootTest
@Slf4j
public class RabbitMQTest {
@Resource
private RabbitTemplate rabbitTemplate;
@Test
public void sendTest(){
rabbitTemplate.convertAndSend(RabbitMqConfig.TOPIC_EXCHANGE_NAME,"","测试 SpringBoot整合RabbitMq的普通模式");
}
}
4.测试
首先运行一次ProducerTest.java测试类 创建交换机和队列
然后在启动消费者监听器
三、Topic 通配符模式
1.创建RabbitMqConfig.java文件 绑定交换机和队列
Java文件夹右键 -> New[新建] -> Java Class[类文件] -> Name[com.rabbit.producer.config.RabbitMqConfig.java] —> Finish[完成]
import org.springframework.amqp.core.*;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* RabbitMq 配置类
*/
@Configuration
public class RabbitMqConfig {
private static final String TOPIC_EXCHANGE_NAME = "topic_exchange";
private static final String TOPIC_QUEUE_NAME = "topic_queue";
/**
* 创建 交换机
* @return
*/
@Bean
public Exchange itemTopicExchange(){
return ExchangeBuilder.topicExchange(TOPIC_EXCHANGE_NAME).build();
}
/**
* 创建 队列
* @return
*/
@Bean
public Queue itemQueue(){
return QueueBuilder.durable(TOPIC_QUEUE_NAME).build();
}
/**
* 绑定 交换机与队列
* @param exchange
* @param queue
* @return
*/
@Bean
public Binding itemQueueExchange(@Qualifier("itemTopicExchange") Exchange exchange, @Qualifier("itemQueue") Queue queue){
return BindingBuilder.bind(queue).to(exchange).with("item.#").noargs();
}
}
2.创建ConsumerListener.java监听消息文件
Java文件夹右键 -> New[新建] -> Java Class[类文件] -> Name[com.rabbit.cosnumer.listener.ConsumerListener01.java] —> Finish[完成]
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
import lombok.extern.slf4j.Slf4j;
@Component
@Slf4j
public class ConsumerListener {
/**
* 监听某个队列的消息
* @param message 接收到的消息
*/
@RabbitListener(queuesToDeclare = "topic_queue")
public void myListener(String message){
//不用在手动转UTF-8 Spring自动转好了
log.debug("消费者接收到的消息为:{}", message);
}
}
3.创建ProducerTest.java测试文件
test->java文件夹右键 -> New[新建] -> Java Class[类文件] -> Name[com.rabbit.producer.test.ProducerTest.java] —> Finish[完成]
import lombok.extern.slf4j.Slf4j;
import com.itheima.rabbitmq.config.RabbitMQConfig;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import javax.annotation.Resource;
@RunWith(SpringRunner.class)
@SpringBootTest
@Slf4j
public class RabbitMQTest {
@Resource
private RabbitTemplate rabbitTemplate;
@Test
public void sendTest(){
rabbitTemplate.convertAndSend(RabbitMqConfig.TOPIC_EXCHANGE_NAME,"item.insert","topic通配符模式,RoutingKey:item.insert");
rabbitTemplate.convertAndSend(RabbitMqConfig.TOPIC_EXCHANGE_NAME,"item.delete.yes","topic通配符模式,RoutingKey:item.delete.yes");
rabbitTemplate.convertAndSend(RabbitMqConfig.TOPIC_EXCHANGE_NAME,"null.null","topic通配符模式,RoutingKey:null.null");
}
}
4.测试
首先运行一次ProducerTest.java测试类 创建交换机和队列
然后在启动消费者监听器
SpringBoot整合RabbitMQ 通俗易懂 超详细 【内含案例】的更多相关文章
- 😊SpringBoot 整合 Elasticsearch (超详细).md
SpringBoot 整合 Elasticsearch (超详细) 注意: 1.环境搭建 安装es Elasticsearch 6.4.3 下载链接 为了方便,环境使用Windows 配置 解压后配置 ...
- Springboot整合MybatisPlus(超详细)完整教程~
新建springboot项目 开发工具:idea2019.2,maven3 pom.xml <dependency> <groupId>org.springframework. ...
- 功能:SpringBoot整合rabbitmq,长篇幅超详细
SpringBoot整合rabbitMq 一.介绍 消息队列(Message Queue)简称mq,本文将介绍SpringBoot整合rabbitmq的功能使用 队列是一种数据结构,就像排队一样,遵循 ...
- 一篇学习完rabbitmq基础知识,springboot整合rabbitmq
一 rabbitmq 介绍 MQ全称为Message Queue,即消息队列, RabbitMQ是由erlang语言开发,基于AMQP(Advanced MessageQueue 高级消息队列协议 ...
- Springboot 整合RabbitMq ,用心看完这一篇就够了
该篇文章内容较多,包括有rabbitMq相关的一些简单理论介绍,provider消息推送实例,consumer消息消费实例,Direct.Topic.Fanout的使用,消息回调.手动确认等. (但是 ...
- RabbitMQ入门到进阶(Spring整合RabbitMQ&SpringBoot整合RabbitMQ)
1.MQ简介 MQ 全称为 Message Queue,是在消息的传输过程中保存消息的容器.多用于分布式系统 之间进行通信. 2.为什么要用 MQ 1.流量消峰 没使用MQ 使用了MQ 2.应用解耦 ...
- SpringBoot整合RabbitMQ实现六种工作模式
RabbitMQ主要有六种种工作模式,本文整合SpringBoot分别介绍工作模式的实现. 前提概念 生产者 消息生产者或者发送者,使用P表示: 队列 消息从生产端发送到消费端,一定要通过队列转发,使 ...
- springboot学习笔记-6 springboot整合RabbitMQ
一 RabbitMQ的介绍 RabbitMQ是消息中间件的一种,消息中间件即分布式系统中完成消息的发送和接收的基础软件.这些软件有很多,包括ActiveMQ(apache公司的),RocketMQ(阿 ...
- 【SpringBoot系列5】SpringBoot整合RabbitMQ
前言: 因为项目需要用到RabbitMQ,前几天就看了看RabbitMQ的知识,记录下SpringBoot整合RabbitMQ的过程. 给出两个网址: RabbitMQ官方教程:http://www. ...
- SpringBoot系列八:SpringBoot整合消息服务(SpringBoot 整合 ActiveMQ、SpringBoot 整合 RabbitMQ、SpringBoot 整合 Kafka)
声明:本文来源于MLDN培训视频的课堂笔记,写在这里只是为了方便查阅. 1.概念:SpringBoot 整合消息服务 2.具体内容 对于异步消息组件在实际的应用之中会有两类: · JMS:代表作就是 ...
随机推荐
- cdh版本 livy部署
1.livy部署主要就是依赖spark_home的环境变量 如何找到spark_home在哪 locate spark-shell locate是个linux找文件的命令,直接找到该目录
- 一行超长日志引发的 “血案” - Containerd 频繁 OOM 背后的真相
案发现场:混沌初现 2024年6月10日,本应是平静的一天.但从上午 9 点开始,Sealos 公有云的运维监控告警就开始不停地响.北京可用区服务器节点突然出现大量 "not ready&q ...
- Go1.13的坑:无法结束Goroutine
背景 本人作为一名SRE,想用Go模拟Cpu占用100% 1秒钟,但是在Go1.13上遇到了问题,1s后Goroutine不会停止. 只要用了for{},Goroutine就无法结束,即使主Gorou ...
- 3.8折年终钜惠,RK3568J国产工业评估板
3.8折年终钜惠,RK3568J国产工业评估板活动火热进行中,错过等一年! -核心板国产化率100%,提供报告-瑞芯微四核ARM Cortex-A55@1.8GHz-4K视频解码.1080P视频编码. ...
- 基于TI Sitara系列AM5728工业开发板——FPGA视频开发案例分享
前 言 3 1 cameralink_display案例 4 1.1 案例功能 4 1.2 操作说明 4 1.3 关键代码(MicroBlaze) 11 1.4 Vivado工程说明 16 1.5 模 ...
- QT 使用相对路径读取.txt文件
QT可以使用QFile来读取.txt文件,具体代码实现如下: 1 #include <QCoreApplication> 2 #include <QString> 3 #inc ...
- Java获取客户端请求信息
客户端工具类 /** * 客户端工具类 * * @author hviger */ public class ServletUtils { /** * 获取String参数 */ public sta ...
- WOE编码与IV值
参考: WOE与IV值浅谈 机器学习-变量筛选之IV值和WOE 0. Introduction WOE (weight of evidence): 证据权重 IV (information value ...
- 洛谷P1365
WJMZBMR打osu! / Easy 题目背景 原 维护队列 参见 P1903 题目描述 某一天WJMZBMR在打osu~~~但是他太弱逼了,有些地方完全靠运气:( 我们来简化一下这个游戏的规则 有 ...
- Python生成PDF:Reportlab的六种使用方式
Reportlab是Python创建PDF文档的功能库 这里是整理过的六种Reportlab使用方式,主要参考的是<ReportLab User Guide> 一.使用文档模板DocTem ...