唠个嗑
网络上搜罗了多次想知道 RabbitMQ 现实业务种怎么实现消息的可靠性的,但是大多都不太理想,站在各位大佬巨人的肩膀上研究了一段时间,我也整理了一套简单可行性的方案,包括消息异常处理。这篇文章想主要讲一些业务处理方案,项目中加入 RabbitMQ 中间件很简单,但是根据具体业务实现消息的可靠性,这个需要多加考虑。当然下面也会通过测试代码来分析,文末也会附上源码地址。
1、准备
1.1、环境准备
之前博客上写过一篇编译安装的方法 地址,大家可以参考,因为 RabbitMQ 底层语言的原因可能稍微麻烦点,那就没有办法了吗?如果你是先搞测试,再在项目中使用的话,那可以使用 docker 安装,2 行代码,如下
docker pull rabbitmq
docker run -d --hostname my-rabbit --name some-rabbit -p 15672:15672 -p 5672:5672 rabbitmq:3-management
1.2、理论准备
RabbitMQ 的类型包括:direct、topic、fanout、headers、system(翻源码看到的)
这里主要通过 topic 来分析,bindingkey 可以通过通配符 # 和 * 来匹配多个 路由键 (routingKey),
bindingkey 是绑定交换机(exchange)和队列(queue)的, 生产者(publisher)发消息的时候会携带 routingKey、exchange 和 消息发送给 RabbitMQ,
连接成功后实际是组件 exchange 接收了生产者的消息,然后通过 bindingkey 匹配 routingKey,决定送给哪个 queue,每个消费者都会有 queue,所以 queue接收到消息 后就可以确保消费者接可以收到消息了,最后消费者再消费。
再详细的内容可以查看大佬 erlie 的总结 地址
2、消息确认
RabbitMQ 基础配置
pom
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.5.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
application.yml
spring:
rabbitmq:
host: 192.168.1.105
port: 5672
username: guest