目录
1.引入rabbitmq依赖
<!--rabbitmq-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
<version>2.1.3.RELEASE</version>
</dependency>
2.application.yml配置文件
spring:
rabbitmq:
host: 127.0.0.1
port: 5672 #默认端口5762
username: ***
password: ***
3.消息接收端的三种实现
package com.free.food.order.mq.receiver;
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:***
* @createTime:2019-02-27 16:29
*/
@Component
public class TestReceiver {
/**
* 1.接收已有队列 (不推荐)
* 需要事先在rabbitmq上手动创建好"testQueues"队列
*/
@RabbitListener(queues = "testQueues")
public void process(String message) {
System.out.println("testQueues收到消息:" + message);
}
/**
* 2.自动创建队列 (大多数使用这种方式)
*/
@RabbitListener(queuesToDeclare = @Queue("autoCreateQueues"))
public void process2(String message) {
System.out.println("autoCreateQueues收到消息:" + message);
}
/**
* 3.自动创建队列,Exchange和Queue绑定 (需要精确划分业务)
* Exchange可以看成消息的分组,
* 如果有两个消息队列绑定了同一个exchange,那么向exchange发消息的时候,这两个消息队列都能收到消息
* 如果一个消息队列绑定了两个exchange,那么往任意一个exchange发消息的时候,这个消息队列都能收到消息
*
*/
@RabbitListener(bindings = @QueueBinding(value = @Queue("bindQueues"), exchange = @Exchange("oneExChange"), key = "one"))
public void process3(String message) {
System.out.println("bindQueues,oneExChange,one收到消息:" + message);
}
@RabbitListener(bindings = @QueueBinding(value = @Queue("bindQueues"), exchange = @Exchange("twoExChange"), key = "two"))
public void process4(String message) {
System.out.println("bindQueues,twoExChange,two收到消息:" + message);
}
}
4.发送端的实现
package com.free.food.order.mq.receiver;
import com.free.food.order.OrderServiceApplicationTests;
import org.junit.Test;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import static org.junit.Assert.*;
/**
* 类功能描述:
*
* @author:***
* @createTime:2019-02-27 16:33
*/
@Component
public class TestReceiverTest extends OrderServiceApplicationTests {
@Autowired
private AmqpTemplate amqpTemplate;
@Test
public void process() {
//向消息队列发送消息
amqpTemplate.convertAndSend("testQueues","test");
}
@Test
public void process2() {
//向消息队列发送消息
amqpTemplate.convertAndSend("autoCreateQueues","test");
}
@Test
public void process3() {
//向exchange的某个key发送消息,process3接收到消息
amqpTemplate.convertAndSend("oneExChange","one","发往bindQueues队列,oneExChange,one的消息");
}
@Test
public void process4() {
//向exchange的某个key发送消息,process4接收到消息
amqpTemplate.convertAndSend("twoExChange","two","发往bindQueues队列,twoExChange,two的消息");
}
}