比如,一个订单服务,如下单,就可能是下的数码,有的可能下的是水果,数码供应商就只关心数码的消息,水果的只关心水果的。同时这样也可以分压系统,就可以对消息进行分组
消息接收
package com.lm.test.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;
/**
* 接收方
*/
@Slf4j
@Component
public class MqReceiver2 {
//数码供应商服务
@RabbitListener(bindings = @QueueBinding(
exchange = @Exchange("myOrder"),
key = "computer",
value = @Queue("order-computer")
))
public void processComputer(String message){
log.info("数码供应商服务 消息接受:{}",message);
}
//水果供应商服务
@RabbitListener(bindings = @QueueBinding(
exchange = @Exchange("myOrder"),
key = "fruit",
value = @Queue("order-fruit")
))
public void processFruit(String message){
log.info("水果供应商服务 消息接受:{}",message);
}
}
消息发送
package com.lm.test.controller;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Date;
//发送MQ测试
@RestController
public class SendMessage2Controller {
@Autowired
private AmqpTemplate amqpTemplate;
@GetMapping("/sendMessage2")
public void process(){
String message = "发送的消息:"+new Date();
// amqpTemplate.convertAndSend("myOrder","computer",message);
amqpTemplate.convertAndSend("myOrder","fruit",message);
}
}