zoukankan      html  css  js  c++  java
  • rabbitmq学习(五):springboot整合rabbitmq

    一、Springboot对rabbitmq的支持

    springboot提供了对rabbitmq的支持,并且大大简化了rabbitmq的相关配置。在springboot中,框架帮我们将不同的交换机划分出来,这样使我们的编程变得更加清晰易于理解。

    所需要的依赖为:

    <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-amqp</artifactId>
    </dependency>

    二、代码实现

    1.创建springboot项目

    我的项目目录如下:

    2.代码实现

    1.在springboot中,rabbitmq的连接信息配置在application.properties中

    spring.rabbitmq.host=localhost
    spring.rabbitmq.username=guest
    spring.rabbitmq.password=guest
    spring.rabbitmq.port=5672
    //直连交换机的确认机制
    spring.rabbitmq.listener.direct.acknowledge-mode=auto

     2.先在配置类中声明队列、交换机以及交换机和队列的绑定关系。下面配置为直连交换机的配置

    /**
     * 基础配置类
     */
    @Configuration("directRabbitConfig")
    public class RabbitConfig {
        /**
         * 定义队列
         * @return
         */
        @Bean
        public Queue queue(){
            return new Queue("directQueue",false,false,false);
        }
    
        /**
         * 定义直连交换机
         * @return
         */
        @Bean
        public DirectExchange directExchange(){
            return new DirectExchange("directExchange",false,false);
        }
    
        /**
         * 定义交换机和队列之间的绑定关系
         * @return
         */
        @Bean
        public Binding binding(){
            return BindingBuilder.bind(queue()).to(directExchange()).with("directRoutingKey");
        }
    }

     3.消费者代码

    /**
     * 消费者
     */
    @Component
    public class DirectConsumer {
        /**
         * 监听directQueue中的消息
         * @param message
         */
        @RabbitListener(queues = "directQueue")
        public void receive(String message){
            System.out.println("DirectConsumer receive message " + message);
        }
    }

     我们可以看到在spring boot中是通过监听器注解并指明获取消息的队列的名称来接收消息的。

    4.生产者代码

    /**
     * 生产者
     */
    @Component
    public class DirectProducer {
        /**
         * 注入amqpTempalte发送消息
         */
        @Autowired
        public AmqpTemplate template;
    
        public void send(String message){
            template.convertAndSend("directExchange","directRoutingKey", message);
            System.out.println("Producer send message " + message);
        }
    }

    发布消息通过注入AmqpTmeplate来实现。

    5.测试:编写测试类,发送消息

    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class DirectExchangeTest {
    
        @Autowired
        private DirectProducer producer;
    
        @Test
        public void contextLoads() {
            producer.send("directExchange message test");
        }
    
    }

    查看日志可以看到我们的消息被路由到了队列,并成功的被接收到了

    剩下的扇形交换机和主题交换机的实现方式和直连交换机的非常相似,这里就不把代码详细列出了。代码的github地址为:https://github.com/wutianqi/springboot-rabbitmq.git

    参考资料:https://www.cnblogs.com/hlhdidi/p/6535677.html

  • 相关阅读:
    JAVA--导数到Mongodb
    关于jquery的事件委托-bind,live,delegate,on的区别发展
    cookies localStorage和sessionStorage的区别
    px em 和rem之间的区别
    js中string常用方法
    js中number常用方法
    json格式常用操作
    Node.js到底是做什么的?这是我看到最好的解释了
    数组常用操作方法
    JQuery.Ajax()的data参数类型
  • 原文地址:https://www.cnblogs.com/wutianqi/p/10058760.html
Copyright © 2011-2022 走看看