• Spring中使用RabbitMQ


    问题

    最近项目中需要在Spring中使用RabbitMQ进行消息的推送和监听。

    概念

    rabbitMQ核心概念

    在RabbitMQ中,主要有Exchange,Routing Key,Queue,这3个概念。
    消息生产者将消息给Exchange,Exchange根据Routing Key与Queue的路由绑定规则来,判定哪些消息去哪些Queue。消息消费者监听Queue就阔以了。

    步骤

    Maven

    <dependency>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-amqpartifactId>
    dependency>
    
    • 1
    • 2
    • 3
    • 4

    properties

    单机版配置如下:

    spring:
      rabbitmq:
        host: localhost
        port: 5672
        username: guest
        password: guest
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    托管版配置如下:

    spring:
      rabbitmq:
        virtual-host: feature1
        addresses: xxx.com
        username: guest
        password: guest
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    Java

    import org.springframework.amqp.support.converter.MessageConverter;
    
    @SpringBootApplication
    public class Application {
        ...
    
        @Bean
        MessageConverter createMessageConverter() {
            return new Jackson2JsonMessageConverter();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    推送消息

    
    
    import org.springframework.amqp.rabbit.annotation.RabbitListener;
    import org.springframework.amqp.rabbit.core.RabbitTemplate;
    
    @Slf4j
    @Service
    public class MessagingServiceImpl implements MessagingService {
     ...
        @Value("${exchange.xxx.xxx:xxx.exchange}")
        private String exchange;
    
        @Value("${routing.key.xxx.xxx:xxx.routing.key}")
      private String routingKey;
    
      @Resource private RabbitTemplate rabbitTemplate;
      
    
      @Override
      public void sendMessage(String message) {
        rabbitTemplate.convertAndSend(exchange, routingKey, message);
      }
    
      ...
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    推送消息的时候,主要使用RabbitTemplate,只要知道Exchange,Routing Key就可以进行消息推送了,并不需要了解是推送到那个队列。

    监听消息

    
    import org.springframework.amqp.rabbit.annotation.RabbitListener;
    import org.springframework.amqp.rabbit.core.RabbitTemplate;
    
    @Slf4j
    @Service
    public class MessagingServiceImpl implements MessagingService {
      
      private final String QUEUE = "xxxx.queue";
    
        ....
    
      @Override
      @RabbitListener(queues = QUEUE)
      public void receiveQueue(String message) {
        log.info("queue {} received registration message: {}", QUEUE, message);
        ....
      }
    
      
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    监听消息的时候,只需要使用@RabbitListener(queues = xxx)进行消息队列监听就阔以了,并不需要了解Exchange,Routing Key。

    总结

    Spring amqp中使用RabbitMQ的消息发送和监听,主要就是使用RabbitTemplate@RabbitListener注解。

    参考:

  • 相关阅读:
    多个线程启动 ,等待全部执行完毕再搜集数据
    openresty 内置变量
    c语言宏相关高级用法
    使用tftpd更新开发板内核
    Java面试题(每天10题)-------连载(27)
    【JVM内存区域及创建对象的过程】
    前端——Vue响应式适配
    12.3 实现模拟鼠标录制回放
    Jenkins+RebotFramework 持续环境集成
    卷积神经网络 图像识别,卷积神经网络图像增强
  • 原文地址:https://blog.csdn.net/fxtxz2/article/details/125893202