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()));
    }

}
相关推荐
IT策士42 分钟前
Python 中间件系列:消息队列 RabbitMQ 操作
python·中间件·rabbitmq
aXin_ya1 小时前
微服务面试篇1
微服务·面试·架构
Devin~Y1 小时前
大厂Java面试实录:Spring Boot微服务 + Redis/Kafka + Prometheus/Jaeger + RAG/Agent(小Y水货版)
java·spring boot·redis·spring cloud·kafka·prometheus·jaeger
星梦清河1 小时前
微服务-Elasticsearch02
微服务·架构·jenkins
user_admin_god1 小时前
Spring Boot 3 + WebFlux 企业级流式SSE接口最佳实践
java·spring boot·后端
怪祝浙1 小时前
spring boot的启动原理以及mvc和ssm的解释
spring boot·后端·mvc
小小仙。1 小时前
IT自学第四十四天(微服务安全与分布式事务)
微服务·云原生·架构
lvrongbao1 小时前
互联网大厂Java面试场景:从Spring到Redis的技术问答解析
java·redis·spring·微服务·分布式事务
是梦终空17 小时前
计算机源码273—基于SpringBoot+Vue3停车场管理系统带支沙箱支付(源代码+数据库)
数据库·spring boot·vue·mybatis·停车场管理系统·沙箱支付·毕设设计
Filwaod17 小时前
Java面试:AIGC场景下的技术深度拷问-谢飞机篇
spring boot·缓存·微服务·消息队列·aigc·java面试·ai技术