spring boot整合rabbitmq

本文详细介绍了RabbitMQ的基本概念,包括交换机类型,并深入讲解了如何使用Spring Boot集成RabbitMQ,从添加依赖、配置ConnectionFactory到配置生产者和消费者,以及消息发送的反馈机制和异常处理。此外,还探讨了消息发送过程中遇到的网络中断问题和消费者对消息的处理策略,包括死信队列的使用。
摘要由CSDN通过智能技术生成

第一部分:RabbitMQ介绍

RabbitMQ是实现AMQP(高级消息队列协议)的消息中间件的一种,最初起源于金融系统,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。RabbitMQ主要是用来实现应用程序的异步和解耦,同时也能起到消息缓冲,消息分发的作用。当生产者大量产生数据时,消费者无法快速消费,那么需要一个中间层。保存这个数据。

AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。

RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。

1.1 几个重要概念

一般的消息中间件的工作流程可以用消费者模式来表示。即消费者不断向消息队列发送消息,生产者不断从消息队列中取出消息进行消费,如下图所示:
在这里插入图片描述

对于rabbitMQ来说,除了最基本的消费者,消息队列,生产者之外,还引进了一个新的模块,即交换机(Exchange)。它使得生产者和消息队列之间进行了隔绝,生产者只需要将消息发给交换机,有交换机根据一定的调度策略,将消息发送给相应的消息队列。RabbitMQ的 工作流程如下:
在这里插入图片描述

至此,RabbitMQ的几个重要概念就出来了:
1.生产者:生产消息的应用程序
2.消费者:消费消息的应用程序
3.消息:一串二进制数据流
4.队列:消息的暂存/存储区
5.交换机:消息的中转站,用于接收分发消息, 有 fanout,direct,topic,headers四种类型
6.路由(绑定关系):将消息队列和交换机进行绑定(BindingKey),交换机才能将消息发送到指定队列。

下面重点介绍一下交换机:

1.Direct类型的交换机

Direct是RabbitMQ默认的交换机模式,也是最简单的模式.即创建消息队列的时候,指定一个BindingKey.当发送者发送消息的时候,指定对应的Key.当Key和消息队列的BindingKey一致的时候,消息将会被发送到该消息队列中.
在这里插入图片描述

2.Topic类型的交换机

topic转发信息主要是依据通配符,队列和交换机的绑定主要是依据一种模式(通配符+字符串),而当发送消息的时候,只有指定的Key和该模式相匹配的时候,消息才会被发送到该消息队列中.
在这里插入图片描述

3.Fanout类型的交换机

Fanout是路由广播的形式,将会把消息发给绑定它的全部队列,即便设置了key,也会被忽略.
在这里插入图片描述

4.Headers类型的交换机

headers 也是根据规则匹配, 相较于 direct 和 topic 固定地使用 routing_key , headers 则是一个自定义匹配规则的类型. 在队列与交换器绑定时, 会设定一组键值对规则, 消息中也包括一组键值对( headers 属性), 当这些键值对有一对, 或全部匹配时, 消息被投送到对应队列.

至此,概念部分基本就完了。注意本地安装RabbitMQ的话,需要先安装Erlang,注意Erlang和rabbitMQ的版本不要差太多,否则rabbitMQ启动会报错(我安装的是RabbitMQ 3.6.5, Erlang 18.1)。

第二部分:spring boot 集成RabbitMQ

2.1 添加pom依赖

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

2.2 application.properties中添加配置信息

spring.application.name=spirng-boot-rabbitmq-sender
spring.rabbitmq.host=127.0.0.1
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest

#并发消费者的初始化值
spring.rabbitmq.listener.concurrency=1
#并发消费者的最大值
spring.rabbitmq.listener.max-concurrency=1
#每个消费者每次监听时可拉取处理的消息数量
spring.rabbitmq.listener.prefetch=1 

下面的配置,如果不是业务必须,都可以不配置,spring-amqp中都有默认配置

2.3 配置ConnectionFactory

这里的ConnectionFactory指的是spring-rabbit包下面的ConnectionFactory接口

@Configuration

public class MqProducerConfig {

    @Autowired

    @Bean

    public ConnectionFactory amqpConnectionFactory(ConnectionListener connectionListener,

                                                  RecoveryListener recoveryListener,

                                                  ChannelListener channelListener) {

        CachingConnectionFactory connectionFactory = new CachingConnectionFactory();

        connectionFactory.setAddresses("localhost:5672");

        connectionFactory.setUsername("guest");

        connectionFactory.setPassword("guest");

        connectionFactory.setVirtualHost("/");

        connectionFactory.setCacheMode(CachingConnectionFactory.CacheMode.CHANNEL);

        connectionFacto
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值