RabbitMQ的基础使用

  • 记录一下RabbitMQ+SpirngBoot的基础使用

    1. 引入maven配置

         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-amqp</artifactId>
         </dependency>
    2. 修改yml配置文件

      rabbitmq:
      host: "ip"
      port: 5672(端口默认一般都是5672)
      username: "guest"
      password: "guest"  
  1. 消息消费
    三种方式

    1. @RabbitListener(queues = “myqueue”) 仅连接队列不自动创建队列如果队列不存在就会报错
    2. @RabbitListener(queuesToDeclare = @Queue(“myqueue”))自动创建和连接队列
    3. @RabbitListener(bindings = @QueueBinding(value = @Queue(“myqueue”),exchange = @Exchange(“myExchange”)))自动创建队列和连接队列并且绑定exchange

    如果我有大的订单服务,订单服务下有水果服务和电脑服务,他们两个只想接受和自己有关的消息,应该如何配置。
    @RabbitListener(bindings = @QueueBinding(value = @Queue(“水果订单/电脑订单”), key=”订单/水果”,exchange = @Exchange(“订单的exchange”)))
    使用订单的exchange 但是队列和key设置成水果/电脑相应的,并且消息发送方也要有相应的改变

    @Slf4j
    @Component
    public class MqReceiver {
         //@RabbitListener(queues = "myqueue") 仅连接队列不自动创建队列如果队列不存在就会报错
         //@RabbitListener(queuesToDeclare = @Queue("myqueue"))自动创建和连接队列
         @RabbitListener(bindings = @QueueBinding(value = @Queue("myqueue"),exchange = @Exchange("myExchange")))
            public  void  process(String message){
                log.info(message);
            }
    
            @RabbitListener(bindings = @QueueBinding(
                    value = @Queue("computerqueue"),
                    key = "computer"
                    ,exchange = @Exchange("orderExchange")
            ))
            public  void  computer(String message){
                log.info(message);
            }
    
            @RabbitListener(bindings = @QueueBinding(
                    value = @Queue("fruitQueue"),
                    key = "fruit"
                    ,exchange = @Exchange("orderExchange")
            ))
            public  void  fruit(String message){
                log.info(message);
            }
    
        }    
  1. 消息发起
    消息发起的关键主要是使用amqpTemplate.convertAndSend方法
    直接写一个测试类方便测试

    
    @SpringBootTest
    @RunWith(SpringRunner.class)
    public class MqTest {
        @Autowired
        private AmqpTemplate amqpTemplate;
    
        //    void convertAndSend(String routingKey, Object message) throws AmqpException;
    
        @Test
        public void sendMessage(){
            amqpTemplate.convertAndSend("myqueue","now"+new Date());
        }
    
        //void convertAndSend(String exchange, String routingKey, Object message) throws AmqpException;
    
        @Test
        public void sendMessageToComputer(){
            amqpTemplate.convertAndSend("orderExchange","computer","nowcomputer "+new Date());
        }
        @Test
        public void sendMessageTofruit(){
            amqpTemplate.convertAndSend("orderExchange","fruit","nowfruit "+new Date());
        }
    
    }

    我把方法对应的源码注释在方法上 仔细看就知道该传什么参数,
    exchange,key,message


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。邮件至 wcfinyourheart@163.com

文章标题:RabbitMQ的基础使用

本文作者:wcf

发布时间:2020-05-05, 15:17:54

最后更新:2020-05-05, 17:36:47

原始链接:http://1007638786.github.io/2020/05/05/RabbitMQ%E7%9A%84%E5%9F%BA%E7%A1%80%E4%BD%BF%E7%94%A8/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏