zoukankan      html  css  js  c++  java
  • RabbitMQ(三):RabbitMQ与Spring Boot简单整合

    RabbitMQ是目前非常热门的一款消息中间件,不管是互联网大厂还是中小企业都在大量使用。Spring Boot的兴起,极大地简化了Spring的开发,本文将使用Spring Boot与RabbitMQ进行简单整合,实现生产和消费消息。

    配置

    Spring Boot使用了这么久,套路差不多摸清楚了。Spring Boot与其他组件进行整合,无非就是加入pom依赖,接着配置一些基本信息,然后就可以使用相关注解进行开发了。

    RabbitMQ也是相同的套路,第一步要引入依赖。要引入的依赖比较容易记,RabbitMQ实现了AMQP协议,引入依赖spring-boot-starter-amqp

               <!-- rabbitmq依赖 -->
               <dependency>
                   <groupId>org.springframework.boot</groupId>
                   <artifactId>spring-boot-starter-amqp</artifactId>
               </dependency>
    

    第二步要配置RabbitMQ连接信息,包括主机、端口号、用户名和密码。RabbitMQ配置信息:

    spring.rabbitmq.host=192.168.16.128
    spring.rabbitmq.port=5672
    spring.rabbitmq.username=guest
    spring.rabbitmq.password=guest
    

    如果没有安装RabbitMQ,我推荐使用Docker快速安装和启动,启动命令:

    docker run -d --hostname my-rabbit -p 5672:5672 -p 15672:15672 rabbitmq:3.8.0-beta.4-management
    

    实现生产者和消费者

    第三步实现生产和消费者。

    生产者

    生产者用来生产消息并进行发送。需要用到RabbitTemplateRabbitTemplate是发送消息的关键类,convertAndSend方法可以指定消息发送的交换器、路由键、消息内容等。

    @Component
    public class Producer {
        @Autowired
        RabbitTemplate rabbitTemplate;
        
        public void produce() {
            String message =  new Date() + "Beijing";
            System.out.println("生产者生产消息=====" + message);
            rabbitTemplate.convertAndSend("rabbitmq_queue",  message);
        }
    }
    

    消费者

    消费者消费生产者发送的消息。实现消费者主要用到注解@RabbitListener@RabbitListener是一个功能强大的注解。这个注解里面可以注解配置@QueueBinding、@Queue、@Exchange直接通过这个组合注解一次性搞定多个交换机、绑定、路由、并且配置监听功能等。

    1. 在RabbitMQ控制面板创建好队列,使用@RabbitListener监听队列。
    @RabbitListener(queues = "rabbitmq_queue")
    
    1. 使用@RabbitListener自动创建队列。
    @RabbitListener(queuesToDeclare = @Queue("myQueue"))
    
    1. 使用@RabbitListener自动创建队列,并对Exchange和Queue进行绑定。
    @RabbitListener(bindings = @QueueBinding(value =  @Queue("myQueue"), key = "mobi", exchange = @Exchange("myExchange")))
    

    本文使用@RabbitListener自动创建一个队列。

    @Component
    public class Consumer {
        @RabbitHandler
        @RabbitListener(queuesToDeclare = @Queue("rabbitmq_queue"))
        public void process(String message) {
            System.out.println("消费者消费消息=====" + message);
        }
    }
    

    测试

    第四步测试。为了方便,写一个测试类生产消息。然后启动工程,运行测试类,使生产者发送消息,不出意外消费者将会消费消息,在控制台输出信息。

    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class ApplicationTests {
    
        @Autowired
        Producer producer;
    
        @Test
        public void contextLoads() {
            producer.produce();
        }
    
    }
    

    操作之后可以在测试控制台看到生产者消息发送成功,在该工程的控制台看到消息消费成功。

    访问RabbitMQ控制面板也会看到有消息。

    总结

    Spring Boot极大的简化各种组件的使用,在实际应用中,当一个服务处理完成之后可以将消息放进RabbitMQ消息队列,另外一个服务从队列中取消息进行消费,这样可以降低服务之间的耦合,实现一些异步的操作。本文仅作为一个简单demo供参考。

    GitHub地址

  • 相关阅读:
    Ignoring HTTPS certificates
    利用Httponly提升web应用程序安全性
    HttpUrlConnection java.net.SocketException: Software caused connection abort: recv failed
    DISPOSE_ON_CLOSE 和 EXIT_ON_CLOSE 的区别
    Swing多线程
    攒机知识积累
    数组最大子数组和
    fork()详解
    理解Socket编程【转载】
    STM32F407_LED代码
  • 原文地址:https://www.cnblogs.com/sgh1023/p/11256273.html
Copyright © 2011-2022 走看看