springboot整合rabbitmq实战

简介: springboot整合rabbitmq实战

公众号merlinsea


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


前置条件: 在自己的云服务器上先部署好rabbitMQ。

  • pom文件中引入依赖


<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
  • 在application.yml中配置RabbitMQ服务端的信息【通过这些配置信息,spring就可以找到rabbitmq服务端的位置】
#消息队列
spring:
  rabbitmq:
    host: 39.107.221.166
    #客户端的端口
    port: 5672
    #虚拟主机
    virtual-host: /dev
    #密码
    password: password
    #账号
    username: admin
  • 编写RabbitMQConfig配置类,并交给spring容器管理,主要是用于创建交换机和队列,并绑定关系,指定bindingkey
@Configuration
public class RabbitMQConfig {
    //交换机名称
    public static final String EXCHANGE_NAME = "order_exchange";
    //队列名称
    public static final String QUEUE = "order_queue";
    /**
     * 创建topic交换机
     * @return
     */
    @Bean
    public Exchange orderExchange(){
        return ExchangeBuilder.topicExchange(EXCHANGE_NAME).durable(true).build();
    }
    /**
     * 创建队列
     * @return
     */
    @Bean
    public Queue orderQueue(){
        return QueueBuilder.durable(QUEUE).build();
    }
    /**
     * 交换机和队列绑定关系,并指定路由key
     * spring会把IOC容器中的Exchange和Queue按类型自动注入形参
     */
    @Bean
    public Binding orderBinding(Queue queue, Exchange exchange){
        return BindingBuilder.bind(queue).to(exchange).with("order.#").noargs();
    }
}
  • 编写生产者
  • 使用springboot 内置的RabbitTemplate对象来向交换机发送消息,同时指定消息的key
  • 消息不一定要字符串,任意的对象都行,但【要求的是这些消息类型要实现Serializable接口即可以序列化】
@RestController
@RequestMapping("/api/v1/producer")
public class Producer {
    @Autowired
    private RabbitTemplate template;
    @RequestMapping("send_string")
    void testSendString() {
        for(int i=0;i<5;i++){
        // 这里需要指明向那个交换机发送消息,key是什么,消息体是什么
            template.convertAndSend(RabbitMQConfig.EXCHANGE_NAME, "order.new","新订单");
        }
    }
    @RequestMapping("send_user")
    void testSendUser(){
        User user = new User("lianglin",24);
        template.convertAndSend(RabbitMQConfig.EXCHANGE_NAME, "order.new",user);
    }
}


  • 编写消费者
  • 消费者需要指定监听的队列,同时交由spring容器管理
  • 可以有多个Handler,即消费者可以处理多种不同类型的消息,每当对列中有消息会根据消息的类型自动适配用于处理这种类型消息的handler


@Component
//监听的队列名
@RabbitListener(queues = "order_queue")
public class OrderMQListener {
    //收到消息执行的动作,处理String消息,自动根据消息body的类型适配合适的handler方法
    @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);
    }
    //收到消息执行的动作,处理User消息
    @RabbitHandler
    public void messageHandler(User user, Message message){
        long msgTag = message.getMessageProperties().getDeliveryTag();
        System.out.println("msgTag="+msgTag);
        System.out.println("message="+message.toString());
        System.out.println("user="+user);
    }
}

640.jpg

相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
3月前
|
消息中间件 Java 网络架构
|
1月前
|
消息中间件 数据采集 中间件
RabbitMQ的使用—实战
RabbitMQ的使用—实战
|
3月前
|
消息中间件 Java 测试技术
消息中间件RabbitMQ---SpringBoot整合RabbitMQ【三】
这篇文章是关于如何在SpringBoot应用中整合RabbitMQ的消息中间件。内容包括了在SpringBoot项目中添加RabbitMQ的依赖、配置文件设置、启动类注解,以及如何通过单元测试来创建交换器、队列、绑定,并发送和接收消息。文章还介绍了如何配置消息转换器以支持对象的序列化和反序列化,以及如何使用注解`@RabbitListener`来接收消息。
消息中间件RabbitMQ---SpringBoot整合RabbitMQ【三】
|
2月前
|
消息中间件 缓存 Java
RocketMQ的JAVA落地实战
RocketMQ作为一款高性能、高可靠、高实时、分布式特点的消息中间件,其核心作用主要体现在异步处理、削峰填谷以及系统解耦三个方面。
168 0
|
4月前
|
消息中间件 新零售 弹性计算
云消息队列 RabbitMQ 版入门训练营,解锁对比开源优势与零基础实战
欢迎加入「云消息队列 RabbitMQ 版入门训练营」。
167 14
|
3月前
|
网络协议 Java 物联网
MQTT(EMQX) - SpringBoot 整合MQTT 连接池 Demo - 附源代码 + 在线客服聊天架构图
MQTT(EMQX) - SpringBoot 整合MQTT 连接池 Demo - 附源代码 + 在线客服聊天架构图
774 2
|
3月前
|
消息中间件 Java Maven
|
4月前
|
消息中间件 Java 数据安全/隐私保护
Spring Boot与RabbitMQ的集成
Spring Boot与RabbitMQ的集成
|
23天前
|
消息中间件 JSON Java
开发者如何使用轻量消息队列MNS
【10月更文挑战第19天】开发者如何使用轻量消息队列MNS
63 5
|
18天前
|
消息中间件 存储 Kafka
MQ 消息队列核心原理,12 条最全面总结!
本文总结了消息队列的12个核心原理,涵盖消息顺序性、ACK机制、持久化及高可用性等内容。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。