zoukankan      html  css  js  c++  java
  • SpringBoot2.X+SpringAMQP 整合 RabbitMQ

    一、什么是Spring-AMQP

    • 官网: https://spring.io/projects/spring-amqp
    • Spring 框架的AMQP消息解决方案,提供模板化的发送和接收消息的抽象层,提供基于消息驱动的 POJO 的消息监听等
    • 提供不依赖于任何特定的AMQP代理实现或客户端库通用的抽象,最终用户代码将很容易实现更易替换、添加和删除AMQP,因为它可以只针对抽象层来开发
    • 总之就是提高我们的框架整合消息队列的效,SpringBoot为更方便开发RabbitMQ推出了starter
    • 我们使用 spring-boot-starter-amqp 进行开发

    二、创建SpringBoot工程

    1、引入依赖

    <dependencies>
        <!-- amqp依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </dependency>
    
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
    
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    2、yml 配置文件修改

    #消息队列
    spring:
      rabbitmq:
        host: 192.168.216.130
        port: 5672
        virtual-host: /dev
        password: password
        username: admin

    3、RabbitMQConfig文件

    package net.xdclass.xdclasssp.config;
    
    import org.springframework.amqp.core.*;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    @Configuration
    public class RabbitMQConfig {
        public static final String EXCHANGE_NAME = "order_exchange";
        public static final String QUEUE = "order_queue";
    
        //topic 交换机
        @Bean
        public Exchange orderExchange() {
            return ExchangeBuilder.topicExchange(EXCHANGE_NAME).durable(true).build();
        }
    
        //队列
        @Bean
        public Queue orderQueue() {
            return QueueBuilder.durable(QUEUE).build();
        }
    
        //交换机和队列绑定关系
        @Bean
        public Binding orderBinding(Queue queue, Exchange exchange) {
            return BindingBuilder.bind(queue).to(exchange).with("order.#").noargs();
        }
    }

    4、消息生产者-测试类

    package net.xdclass.xdclasssp;
    
    import net.xdclass.xdclasssp.config.RabbitMQConfig;
    import org.junit.jupiter.api.Test;
    import org.springframework.amqp.rabbit.core.RabbitTemplate;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.context.SpringBootTest;
    
    @SpringBootTest
    class XdclassSpApplicationTests {
        @Autowired
        private RabbitTemplate template;
    
        @Test
        void send() {
            template.convertAndSend(RabbitMQConfig.EXCHANGE_NAME, "order.new", "新订单来啦1");
        }
    }

    5、消息消费者

    package net.xdclass.xdclasssp.mq;
    
    import org.springframework.amqp.core.Message;
    import org.springframework.amqp.rabbit.annotation.RabbitHandler;
    import org.springframework.amqp.rabbit.annotation.RabbitListener;
    import org.springframework.stereotype.Component;
    
    @Component
    @RabbitListener(queues = "order_queue")
    public class OrderMQListener {
    
        @RabbitHandler
        public void messageHandler(String body, Message message) {
            long msgTag = message.getMessageProperties().getDeliveryTag();
            System.out.println("msgTag=" + msgTag);
            System.out.println("message=" + message.toString());
            System.out.println("body=" + body);
        }
    }
  • 相关阅读:
    ip地址和子网掩码
    Mysql 进阶查询 (select 语句的高级用法)
    MHA高可用配置及故障切换
    数据库的备份与恢复需要修改
    每天一分钟,了解mysql索引,事务与存储引擎
    mysql基础命令详解
    带你走进mysql数据库
    Spring XML无自动提示
    Spring环境搭建错误
    读书笔记_java设计模式深入研究 第十一章 装饰器模式 Decorator
  • 原文地址:https://www.cnblogs.com/jwen1994/p/14367946.html
Copyright © 2011-2022 走看看