0


《云原生》一文搞懂rabbitMQ消息队列概述

由于公司生产环境使用了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种:

  1. 基本模型(点对点)

简述:生产者发送消息到队列,一个队列只能被一个消费者订阅

  1. 任务模型(点对点)

简述:生产者发送消息到队列,一个队列可以被多个消费者订阅,并且队列中的一条消息只能被消费****一次

注:在该消息模式下可设置负载均衡将消息合理的分配到不同的消费者,以及其他规则进行合理配置使用

  1. 发布/订阅模型(发布/订阅)

简述:生产者发送消息到交换机,交换机将消息存储到队列中,一个或多个消费者订阅交换机中的队列,消费者只要进行了订阅,那么交换机下的队列消息都能可以消费。一条消息可以被不同的订阅消费者****重复消费(同下)

  1. routing-路由模式(发布/订阅)

简述:生产者发送消息到交换机,交换机将消息存储到队列中,一个或多个消费者订阅交换机中的队列,生产者通过routing key发送消息到与 binding key完全相等的 队列中,消费者订阅交换机下的队列进行消费。

  1. topics-主题模式 (发布/订阅)

简述:生产者发送消息到交换机,交换机将消息存储到队列中,一个或多个消费者订阅交换机中的队列,生产者的routing key通过规则表达式 发送消息到包含与 binding key满足的 队列中,消费者订阅交换机下的队列进行消费。

消息模型一览图

三,实践应用

注:下面为客户端应用中大致需要的配置参数以及简述,根据不同的业务需要作出调整,本文列出一般情况方便后续使用时有所方向。

1. 配置文件

  • host-实例地址:服务器地址或服务商控制台中的vpn/公网ip地址(控制台获取)
  • port:端口(控制台获取)
  • username:静态用户名(控制台获取)
  • password:密码(控制台获取)
  • queue:某个消费者需要监听的队列名(控制台获取)
  • 消费者监听的自定义类名(客户端获取)

2. 生产者

  • exchange:交换机名(控制台获取)
  • routing key:路由键(控制台获取)
  • messageBody:消息体(客户端自定义)
  • messageId:消息唯一键(客户端自定义)

3. 消费者

  • 自定义消费者监听类

配置一览图

注:rabbitMq项目实践流程可移步到Springboot 整合 阿里云消息队列RabbitMQ版服务 ,从零搭建消息队列基础项目。


写到最后

至此rabbitMq消息队列的相关整理告一段落,在自己加深理解的同时也能帮助到小伙伴。

标签: rabbitmq 云原生

本文转载自: https://blog.csdn.net/qq_39818325/article/details/128503268
版权归原作者 RemainderTime 所有, 如有侵权,请联系我们删除。

“《云原生》一文搞懂rabbitMQ消息队列概述”的评论:

还没有评论