首先引入pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
手动创建队列
- 接收端
在rabbitmq页面添加 myQueue 队列
@Log4j2
@Component
public class MqReceiver {
@RabbitListener(queues = "myQueue")
public void process(String message) {
log.info("MqReceiver: {} ", message);
}
}
- 发送端
应用需要先启动
@Log4j2
@Component
public class MqReceiverTest extends SpringDomeApplicationTests {
@Autowired
AmqpTemplate amqpTemplate;
@Test
public void process() {
log.info("123");
amqpTemplate.convertAndSend("myQueue", "测试mq,简单发送,简单接受!");
}
}
自动创建队列
- 接收端
/**
* 自动创建队列
*
* @param message
*/
@RabbitListener(queuesToDeclare = @Queue("autoQueue"))
public void autoCreateMq(String message) {
log.info("接受自动创建的队列消息: {} ", message);
}
- 发送端
@Test
public void autoCreateMq() {
amqpTemplate.convertAndSend("autoQueue", "测试mq自动创建队列,");
}
自动绑定exchanges
使用场景 一个exchanges可以绑定多个队列queue; 比如一个订单里面有两种商品 A,B;需要同时发送给A,B的库存服务修改库存数量
- 接收端
/**
* 自动绑定exchange
*
* @param message
*/
@RabbitListener(bindings = @QueueBinding(
value = @Queue("autoExchangeQueue"),
exchange = @Exchange("autoExchange")
))
private void autoExchange(String message) {
log.info("自动绑定exchange: {} ", message);
}
- 发送端
@Test
public void autoExchange() {
amqpTemplate.convertAndSend("autoExchangeQueue", "测试mq自动创建队列和绑定exchange,");
}
exchanges使用场景
- 接收端
/**
* 给老王发通知,绑定autoExchange
*
* @param message
*/
@RabbitListener(bindings = @QueueBinding(
exchange = @Exchange("autoExchange"),
key = "lw",
value = @Queue("lwQueue")
))
private void noticeMrW(String message) {
log.info("老王, {} ", message);
}
/**
* 给老张发通知,绑定autoExchange
*
* @param message
*/
@RabbitListener(bindings = @QueueBinding(
exchange = @Exchange("autoExchange"),
key = "lz",
value = @Queue("lzQueue")
))
private void noticeMrZ(String message) {
log.info("老张, {} ", message);
}
- 发送端
注意绑定是exchange( autoExchange)
@Test
public void noticeMrW() {
amqpTemplate.convertAndSend("autoExchange", "lw", "老张来了");
}
@Test
public void noticeMrZ() {
amqpTemplate.convertAndSend("autoExchange", "lz", "老王来了");
}