在Order服务中修改
1. 使用组件第一件事永远是先引入依赖
2. 配置mq(可以直接放到git上的order.test.yml上)
3. 写一个接收消息的方法MqReceiver,@RabbitListenner(queuesToDeclare=@Queue("myQueue")),process()
4. 写一个发送方 用到了AmqpTemplate,send()
Order
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency>
spring: rabbitmq: host: 127.0.0.1 port: 5672 username: guest password: guest
package com.imooc.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消息 */ @Slf4j @Component public class MqReceiver { //1. @RabbitListener(queues = "myQueue") //2. 自动创建队列 @RabbitListener(queuesToDeclare = @Queue("myQueue")) //3. 自动创建, Exchange和Queue绑定 @RabbitListener(bindings = @QueueBinding( value = @Queue("myQueue"), exchange = @Exchange("myExchange") )) public void process(String message) { log.info("MqReceiver: {}", message); } /** * 数码供应商服务 接收消息 * @param message */ @RabbitListener(bindings = @QueueBinding( exchange = @Exchange("myOrder"), key = "computer", value = @Queue("computerOrder") )) public void processComputer(String message) { log.info("computer MqReceiver: {}", message); } /** * 水果供应商服务 接收消息 * @param message */ @RabbitListener(bindings = @QueueBinding( exchange = @Exchange("myOrder"), key = "fruit", value = @Queue("fruitOrder") )) public void processFruit(String message) { log.info("fruit MqReceiver: {}", message); } }
package com.imooc.order; import org.junit.Test; import org.springframework.amqp.core.AmqpTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.Date; /** * 发送mq消息测试 */ @Component public class MqSenderTest extends OrderApplicationTests { @Autowired private AmqpTemplate amqpTemplate; @Test public void send() { amqpTemplate.convertAndSend("myQueue", "now " + new Date()); } @Test public void sendOrder() { amqpTemplate.convertAndSend("myOrder", "computer", "now " + new Date()); } }
什么情况下用Exchange?
E.G. 订单可分为数码类订单和水果类订单,通过key的不同绑定myOrder消息队列。商场做大之后卖的比较多了,对多种商品可以下单。 订单,商家都有团队服务。 订单要根据不同的商品类型,发送不同消息。 这个时候要涉及到消息的分组,就是route的key就要产生变化了。exchanger不用变。 然后key就要变了。到了不同的消息队列也就是queue。