序
由于公司生产环境使用了MQ消息中间件,并且项目中同时使用了rabbitMq和rocketMq两种技术框架,时常将它们之间的使用方式和相关概念混淆。根本的原因是没有深入理解每一种mq,仅仅停留在项目已经造好的轮子不假思索的使用。
前言
首先对rabbitMq的相关概念进行梳理。
由于篇幅问题rocketMq写在了另一篇:《一文搞懂RocketMQ队列概述 》。
概念简述
根据博主自己的理解
将从三个方面对rabbitMq的相关概念进行概述
- 控制台概念
- 消息传输模型
- 实践应用
一,控制台概念
本段参考阿里云控制台rabbitMQ控制台配置
概念一览图
- 队列实例
一个独立的消息队列RabbitMQ版资源实体,包含Vhost、Exchange、Queue等基本的资源要素
- 虚拟主机 vhost
用作逻辑隔离,分别管理各自的Exchange、Queue和Binding,使得应用安全地运行在不同的Vhost上,相互之间不会干扰。一个实例下可以有多个Vhost,一个Vhost里面可以有若干个Exchange和Queue。Producer和Consumer连接消息队列RabbitMQ版需要指定一个Vhost
- 交换机 exchange
Producer将消息发送到Exchange,由Exchange将消息路由到一个或多个Queue中(或者丢弃)。Exchange根据Routing Key和Binding Key将消息路由到Queue。不同类型的Exchange的路由规则不同。
交换机类型 exchangeType:
1. fanout-分列模式
会把所有发送到该Exchange的消息路由到所有与它绑定的Queue中,相当于广播功能。
2. direct-直接模式
该类型路由规则会将消息路由到Binding Key与Routing Key完全匹配的Queue中
Binding Key(绑定键):消息队列控制台设置。(注:定义规则可参考阿里云。下同)
Routing Key(路由键):在客户端端设置参数,与消息体一并发送到队列中(下同)
3. topics-主题模式
使用Routing Key模式匹配和字符串比较的方式将消息路由至绑定的Queue中。通俗的理解就是routing key模糊匹配绑定在队列上的biding key。
*注:阿里云版rabbitMq的实现方式选择的开源版本其中一类消息模型 **发布/订阅传输模型 *所以 exchange 这层不可少
- 队列 queue
消息最终在服务器存储的地方,消息队列的消息都会被投入到一个或多个Queue中
控制台上下级关系简图
二,消息传输模型
一般消息队列的传输模型可分为两大类:
- 点对点传输模型(简述:一条消息只能被一个消费者消费)
- 发布/订阅模型(简述:一条消息可以被多个已经订阅的消费者消费)
rabbitMQ消息模型一般细分为5种:
- 基本模型(点对点)
简述:生产者发送消息到队列,一个队列只能被一个消费者订阅
- 任务模型(点对点)
简述:生产者发送消息到队列,一个队列可以被多个消费者订阅,并且队列中的一条消息只能被消费****一次。
注:在该消息模式下可设置负载均衡将消息合理的分配到不同的消费者,以及其他规则进行合理配置使用
- 发布/订阅模型(发布/订阅)
简述:生产者发送消息到交换机,交换机将消息存储到队列中,一个或多个消费者订阅交换机中的队列,消费者只要进行了订阅,那么交换机下的队列消息都能可以消费。一条消息可以被不同的订阅消费者****重复消费(同下)
- routing-路由模式(发布/订阅)
简述:生产者发送消息到交换机,交换机将消息存储到队列中,一个或多个消费者订阅交换机中的队列,生产者通过routing key发送消息到与 binding key完全相等的 队列中,消费者订阅交换机下的队列进行消费。
- topics-主题模式 (发布/订阅)
简述:生产者发送消息到交换机,交换机将消息存储到队列中,一个或多个消费者订阅交换机中的队列,生产者的routing key通过规则表达式 发送消息到包含与 binding key满足的 队列中,消费者订阅交换机下的队列进行消费。
消息模型一览图
三,实践应用
注:下面为客户端应用中大致需要的配置参数以及简述,根据不同的业务需要作出调整,本文列出一般情况方便后续使用时有所方向。
1. 配置文件
- host-实例地址:服务器地址或服务商控制台中的vpn/公网ip地址(控制台获取)
- port:端口(控制台获取)
- username:静态用户名(控制台获取)
- password:密码(控制台获取)
- queue:某个消费者需要监听的队列名(控制台获取)
- 消费者监听的自定义类名(客户端获取)
2. 生产者
- exchange:交换机名(控制台获取)
- routing key:路由键(控制台获取)
- messageBody:消息体(客户端自定义)
- messageId:消息唯一键(客户端自定义)
3. 消费者
- 自定义消费者监听类
配置一览图
注:rabbitMq项目实践流程可移步到Springboot 整合 阿里云消息队列RabbitMQ版服务 ,从零搭建消息队列基础项目。
写到最后
至此rabbitMq消息队列的相关整理告一段落,在自己加深理解的同时也能帮助到小伙伴。
版权归原作者 RemainderTime 所有, 如有侵权,请联系我们删除。