赞
踩
1、前提:安装:RabbitMQ 通过Docker方式快速安装
2、pox.xml 引入
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-cloud-starter-amqp</artifactId>
- </dependency>
3、application.yml 配置
- spring:
- rabbitmq:
- host: localhost
- port: 5672
- username: guest
- password: guest
4、三种方式代码
- package com.macs.order.message;
-
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.amqp.rabbit.annotation.Exchange;
- import org.springframework.amqp.rabbit.annotation.Queue;
- import org.springframework.amqp.rabbit.annotation.QueueBinding;
- import org.springframework.amqp.rabbit.annotation.RabbitListener;
- import org.springframework.stereotype.Component;
-
- /**
- * 接收mq消息
- * @author antma
- */
- @Slf4j
- @Component
- public class MqReceiver {
-
- //1. 手动创建,需在RabbitMQ中手动创建myQueue1 队列,否则报错
- @RabbitListener(queues = "myQueue1")
- public void process1(String message){
- log.info("MqReceiver1: {}", message);
- }
-
- //2. 自动创建队列
- @RabbitListener(queuesToDeclare = @Queue("myQueue2"))
- public void process2(String message){
- log.info("MqReceiver2: {}", message);
-
- }
-
- //3. 自动创建队列,Exchange 与 Queue绑定
- @RabbitListener(bindings = @QueueBinding(
- value = @Queue("myQueue3"),
- exchange = @Exchange("testExChange")
- ))
- public void process3(String message){
- log.info("MqReceiver3: {}", message);
- }
-
-
- // @RabbitListener(bindings = @QueueBinding(
- // exchange = @Exchange("myOrder"),
- // key = "computer",
- // value = @Queue("computerOrder")
- // ))
- // public void processComputer(String message){
- // log.info("computer MqReceiver: {}", message);
- //
- // }
- //
- // @RabbitListener(bindings = @QueueBinding(
- // exchange = @Exchange("myOrder"),
- // key = "fruit",
- // value = @Queue("fruitOrder")
- // ))
- // public void processFruit(String message){
- // log.info("fruit MqReceiver: {}", message);
- //
- // }
-
- }

5、测试类
- package com.macs.order;
-
- import org.junit.Test;
- import org.springframework.amqp.core.AmqpTemplate;
- import org.springframework.beans.factory.annotation.Autowired;
-
- import java.util.Date;
-
- public class MqSenderTest extends OrderApplicationTests {
-
- @Autowired
- private AmqpTemplate amqpTemplate;
-
- @Test
- public void send1(){
- amqpTemplate.convertAndSend("myQueue1", "1 now " + new Date());
- }
-
- @Test
- public void send2(){
- amqpTemplate.convertAndSend("myQueue2", "2 now " + new Date());
- }
-
- @Test
- public void send3(){
- amqpTemplate.convertAndSend("myQueue3", "3 now " + new Date());
- }
-
- // @Test
- // public void sendOrder(){
- // amqpTemplate.convertAndSend("myOrder","computer", "now " + new Date());
- // }
- //
- //
- // @Test
- // public void sendFruitOrder(){
- // amqpTemplate.convertAndSend("myOrder","fruit", "now " + new Date());
- // }
- }

6、启动spring boot 项目,在RabbitMQ队列(Queues)中即可看到队列出现:
注意:第一种方式为手动创建队列,否则启动会报错:
- org.springframework.amqp.rabbit.listener.BlockingQueueConsumer$DeclarationException:
- Failed to declare queue(s):[myQueue1]
可以看到 myQueue3 绑定了 testExChange ,如下图:
7、执行测试类的三个测试方法:
可以看到idea控制台输出可以分别接收到RabbitMQ消息。
在RabbitMQ控制台上看到有相应的队列并被消费:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。