SpringBoot 整合 RabbitMQ demo

Rabbit Windows安装教程
本文只做Demo案例的分享,具体只是需自行百度

一、生产者

1.application.properties

配置Rabbit的基本信息

bash 复制代码
#rabbit 主机IP
spring.rabbitmq.host=127.0.0.1
#rabbit 端口
spring.rabbitmq.port=5672
#rabbit 账号 可自行创建 这里是默认的
spring.rabbitmq.username=guest
#rabbit 密码 可自行创建 这里是默认的
spring.rabbitmq.password=guest
#rabbit 虚拟机地址 可自行指定 这里是默认的
spring.rabbitmq.virtual-host=/
#主程序的端口 和 rabbit无关
server.port=8081

2.pom文件

导入两个maven依赖

第一个是SpringBoot集成的rabbit

第二个是web依赖,用来方便发消息

xml 复制代码
<!--RabbitMq-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<!--Web 方便用来发消息-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

3.Rabbit配置类

这里用的是主题模式,也就是模糊匹配的模式

这里设置的是只要是rabbit.开头就会进入这个队列
更详细的方法意义 请自行百度

java 复制代码
@Configuration
public class RabbitConfig {

    public static final String EXCHANGE_NAME = "rabbit_exchange";
    public static final String QUEUE_NAME = "rabbit_queue";
    /**
     * 创建交换机
     * ExchangeBuilder有四种交换机模式
	 * Direct Exchange:直连交换机,根据Routing Key(路由键)进行投递到不同队列。
     * Fanout Exchange:扇形交换机,采用广播模式,根据绑定的交换机,路由到与之对应的所有队列。
     * Topic Exchange:主题交换机,对路由键进行模式匹配后进行投递,符号#表示一个或多个词,*表示一个词。
     * Header Exchange:头交换机,不处理路由键。而是根据发送的消息内容中的headers属性进行匹配。
     * durable 交换器是否持久化(false 不持久化,true 持久化)
     **/
    @Bean
    public Exchange rabbitExchange(){
        return ExchangeBuilder.topicExchange(EXCHANGE_NAME).durable(true).build();
    }
	/**
	 * 创建队列
	 * durable 队列是否持久化 队列调用此方法就是持久化 可查看方法的源码
	 * deliveryMode 消息是否持久化(1 不持久化,2 持久化)
	 **/
    @Bean
    public Queue rabbitQueue(){
        return QueueBuilder.durable(QUEUE_NAME).build();
    }
	/**
	* 绑定交换机和队列
	* bing 方法参数可以是队列和交换机
	* to 方法参数必须是交换机
	* with 方法参数是路由Key 这里是以rabbit.开头
	* noargs 就是不要参数的意思
	* 这个方法的意思是把rabbit开头的消息 和 上面的队列 和 上面的交换机绑定
	**/
    @Bean
    public Binding rabbitBinding(@Qualifier("rabbitExchange") Exchange exchange, @Qualifier("rabbitQueue") Queue queue){
        return BindingBuilder.bind(queue).to(exchange).with("rabbit.#").noargs();
    }

}

4.Controller

这里整一个网页调用的形式进行发送信息

java 复制代码
@RestController
public class ProducerWebController {

    @Autowired
    ProducerService producerService;

    @RequestMapping("/sendMq")
    public String sendMq(@RequestParam("mq") String mq){
        return producerService.sendMq(mq);
    }

}

5.Service

在service层注入RabbitTemplate

convertAndSend 即是消息发送的方法

java 复制代码
public interface ProducerService {
    public String sendMq(String mq);
}
java 复制代码
@Service
public class ProducerServiceImpl implements ProducerService {

    @Autowired
    RabbitTemplate rabbitTemplate;

	/**
	* convertAndSend 参数
	* 第一个是交换机的名字
	* 第二个是队列的具体名字 因为是rabbit开头 因为RabbitConfig设置rabbit开头通配 所以会被监听到
	* 第三个是具体的消息
	**/
    @Override
    public String sendMq(String mq) {
        rabbitTemplate.convertAndSend(RabbitConfig.EXCHANGE_NAME, "rabbit.demo", mq);
        return "发送成功,消息是:" + mq;
    }
}

6.发送消息

启动生产者程序

浏览器输入 127.0.0.1/sendMq?mq=测试

二、消费者

1.application.properties

bash 复制代码
spring.rabbitmq.host=127.0.0.1
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
spring.rabbitmq.virtual-host=/
server.port=8082

2.Rabbit监听

只需要在消费者中创建一个监听即可监听到队列的消息

可以直接打印出Message消息

java 复制代码
@Component
public class ConsumerListener {

	/**
	* 设置监听哪一个队列 这个队列是RabbitConfig里面设置好的队列名字
	**/
    @RabbitListener(queues = "rabbit_queue")
    public void listenQueue(Message message){
        System.out.println(new String(message.getBody()));
    }

}
相关推荐
青槿吖7 分钟前
Feign 微服务远程调用指南:告别手写 RestTemplate
java·redis·后端·spring·微服务·云原生·架构
iOS妖狐小北10 分钟前
RabbitMQ之交换机
分布式·rabbitmq·ruby
spring29979215 分钟前
SpringBoot返回文件让前端下载的几种方式
前端·spring boot·后端
阿丰资源16 分钟前
Java项目基于SpringBoot+Vue前后端分离在线商城系统(附源码)
java·vue.js·spring boot
喜欢流萤吖~20 分钟前
Nacos 配置中心:微服务的配置管家
java·运维·微服务
indexsunny37 分钟前
互联网大厂Java求职面试实战:Spring Boot微服务在电商场景中的应用与挑战
java·spring boot·redis·面试·kafka·oauth2·microservices
chenxu98b39 分钟前
SpringBoot Maven 项目 pom 中的 plugin 插件用法整理
spring boot·后端·maven
dEso RSET1 小时前
Skywalking介绍,Skywalking 9.4 安装,SpringBoot集成Skywalking
spring boot·后端·skywalking
青槿吖1 小时前
告别RestTemplate!Feign让微服务调用像点外卖一样简单
java·开发语言·分布式·spring cloud·微服务·云原生·架构
unDl IONA1 小时前
Linux安装RabbitMQ
linux·运维·rabbitmq