SpringBoot结合RabbitMq

SpringBoot 框架部署

HelloWorld 简单模式

Topic 通配符模式

一、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 通俗易懂 超详细 【内含案例】的更多相关文章

  1. 😊SpringBoot 整合 Elasticsearch (超详细).md

    SpringBoot 整合 Elasticsearch (超详细) 注意: 1.环境搭建 安装es Elasticsearch 6.4.3 下载链接 为了方便,环境使用Windows 配置 解压后配置 ...

  2. Springboot整合MybatisPlus(超详细)完整教程~

    新建springboot项目 开发工具:idea2019.2,maven3 pom.xml <dependency> <groupId>org.springframework. ...

  3. 功能:SpringBoot整合rabbitmq,长篇幅超详细

    SpringBoot整合rabbitMq 一.介绍 消息队列(Message Queue)简称mq,本文将介绍SpringBoot整合rabbitmq的功能使用 队列是一种数据结构,就像排队一样,遵循 ...

  4. 一篇学习完rabbitmq基础知识,springboot整合rabbitmq

    一   rabbitmq 介绍 MQ全称为Message Queue,即消息队列, RabbitMQ是由erlang语言开发,基于AMQP(Advanced MessageQueue 高级消息队列协议 ...

  5. Springboot 整合RabbitMq ,用心看完这一篇就够了

    该篇文章内容较多,包括有rabbitMq相关的一些简单理论介绍,provider消息推送实例,consumer消息消费实例,Direct.Topic.Fanout的使用,消息回调.手动确认等. (但是 ...

  6. RabbitMQ入门到进阶(Spring整合RabbitMQ&SpringBoot整合RabbitMQ)

    1.MQ简介 MQ 全称为 Message Queue,是在消息的传输过程中保存消息的容器.多用于分布式系统 之间进行通信. 2.为什么要用 MQ 1.流量消峰 没使用MQ 使用了MQ 2.应用解耦 ...

  7. SpringBoot整合RabbitMQ实现六种工作模式

    RabbitMQ主要有六种种工作模式,本文整合SpringBoot分别介绍工作模式的实现. 前提概念 生产者 消息生产者或者发送者,使用P表示: 队列 消息从生产端发送到消费端,一定要通过队列转发,使 ...

  8. springboot学习笔记-6 springboot整合RabbitMQ

    一 RabbitMQ的介绍 RabbitMQ是消息中间件的一种,消息中间件即分布式系统中完成消息的发送和接收的基础软件.这些软件有很多,包括ActiveMQ(apache公司的),RocketMQ(阿 ...

  9. 【SpringBoot系列5】SpringBoot整合RabbitMQ

    前言: 因为项目需要用到RabbitMQ,前几天就看了看RabbitMQ的知识,记录下SpringBoot整合RabbitMQ的过程. 给出两个网址: RabbitMQ官方教程:http://www. ...

  10. SpringBoot系列八:SpringBoot整合消息服务(SpringBoot 整合 ActiveMQ、SpringBoot 整合 RabbitMQ、SpringBoot 整合 Kafka)

    声明:本文来源于MLDN培训视频的课堂笔记,写在这里只是为了方便查阅. 1.概念:SpringBoot 整合消息服务 2.具体内容 对于异步消息组件在实际的应用之中会有两类: · JMS:代表作就是 ...

随机推荐

  1. cdh版本 livy部署

    1.livy部署主要就是依赖spark_home的环境变量 如何找到spark_home在哪 locate spark-shell locate是个linux找文件的命令,直接找到该目录

  2. 一行超长日志引发的 “血案” - Containerd 频繁 OOM 背后的真相

    案发现场:混沌初现 2024年6月10日,本应是平静的一天.但从上午 9 点开始,Sealos 公有云的运维监控告警就开始不停地响.北京可用区服务器节点突然出现大量 "not ready&q ...

  3. Go1.13的坑:无法结束Goroutine

    背景 本人作为一名SRE,想用Go模拟Cpu占用100% 1秒钟,但是在Go1.13上遇到了问题,1s后Goroutine不会停止. 只要用了for{},Goroutine就无法结束,即使主Gorou ...

  4. 3.8折年终钜惠,RK3568J国产工业评估板

    3.8折年终钜惠,RK3568J国产工业评估板活动火热进行中,错过等一年! -核心板国产化率100%,提供报告-瑞芯微四核ARM Cortex-A55@1.8GHz-4K视频解码.1080P视频编码. ...

  5. 基于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 模 ...

  6. QT 使用相对路径读取.txt文件

    QT可以使用QFile来读取.txt文件,具体代码实现如下: 1 #include <QCoreApplication> 2 #include <QString> 3 #inc ...

  7. Java获取客户端请求信息

    客户端工具类 /** * 客户端工具类 * * @author hviger */ public class ServletUtils { /** * 获取String参数 */ public sta ...

  8. WOE编码与IV值

    参考: WOE与IV值浅谈 机器学习-变量筛选之IV值和WOE 0. Introduction WOE (weight of evidence): 证据权重 IV (information value ...

  9. 洛谷P1365

    WJMZBMR打osu! / Easy 题目背景 原 维护队列 参见 P1903 题目描述 某一天WJMZBMR在打osu~~~但是他太弱逼了,有些地方完全靠运气:( 我们来简化一下这个游戏的规则 有 ...

  10. Python生成PDF:Reportlab的六种使用方式

    Reportlab是Python创建PDF文档的功能库 这里是整理过的六种Reportlab使用方式,主要参考的是<ReportLab User Guide> 一.使用文档模板DocTem ...