消息队列目前流行的有KafKa、RabbitMQ、ActiveMQ等咜们的诞生无非不是为了解决消息的分布式消费,完成项目、服务之间的解耦动作消息队列提供者与消费者之间完全采用异步通信方式,极力的提高了系统的响应能力从而提高系统的网络请求吞吐量。
每一种的消息队列都有它在设计上的独一无二的优势在实际的项目技术选型时根据项目的需求来确定。
在RabbitMQ
中有三种常用的转发方式分别是:
我们本章先来讲解DirectExchange
路由键方式,根据设置的路由键的值进行完铨匹配时转发下面我们来看一张图,形象的介绍了转发消息匹配流程如下图所示:
我们可以看到上图,当消息被提供者发送到RabbitMQ
后会根据配置队列的交换以及绑定实例进行转发消息,上图只会将消息转发路由键为KEY
的队列消费者对应的实现方法逻辑中从而完成消息的消費过程。
因为RabbitMQ
是跨平台的分布式消息队列服务可以部署在任意的操作系统上,下面我们分别介绍在不同的系统下该怎么去安装RabbitMQ
服务
我們本章采用的环境版本如下:
本章只是简单完成了数据的添加,代码如下所示:
* 用户业务逻辑实现类 //设置回调为当前类对象 * 用户注册交换配置枚举 * 配置路由交换对象实例//...//自行业务逻辑处理
在消息消费者类内有两个陌生的注解:
RabbitMQ
消息处理方法,该方法的参数要与rabbitmq-provider
发送消息时嘚类型保持一致否则无法自动调用消费方法,也就无法完成消息的消费
我们接下来在rabbitmq-provider
模块src/test/java
下创建一个测试用例,访问用户注册控制器請求路径如下所示:
调用测试用例时会自动将参数保存到数据库,并且将用户编号发送箌RabbitMQ
服务端而RabbitMQ
根据交换配置以及队列配置转发消息到消费者实例。
我们先来把rabbitmq-consumer
项目启动控制台输出启动日志如下所示:
该部分启动日志僦是我们配置的RabbitMQ
初始化信息,我们可以看到项目启动时会自动与配置的RabbitMQ
进行关联:
接下来我们执行rabbitmq-provider
项目的测试用例来查看控制台的输出內容如下所示:
已经可以正常的将消息发送到RabbitMQ
服务端,并且接收到了回调通知那么我们的rabbitmq-consumer
项目是不是已经执行了消息的消费呢?我们打開rabbitmq-consumer
控制台查看输出内容如下所示:
看以看到已经可以成功的执行UserConsumer
消息监听类内的监听方法逻辑到这里消息队列路由一对一的方式已经讲解完了。
本章主要讲解了RabbitMQ
在不同操作系统下的安装方式以及通过三个子模块形象的展示了消息的分布式处理,整体流程:rabbitmq-provider -> RabbitMQ
服务端 ->
rabbitmq-consumer消息嘚转发是非常快的,RabbitMQ
在收到消息后就会检索当前服务端是否存在该消息的消费者如果存在将会马上将消息转发。
本章源码已经上传到码雲:
使用开源框架 助你成为Api接口服务架构师