消息中间件RabbitMQ

3 篇文章 0 订阅
2 篇文章 0 订阅

如果有同学不懂什么是消息服务的地方可以参考我的上一篇博客消息服务(MQ)

绪言

之前使用过ActiveMQ,但是发现很大一部分都是在使用RabbitMQ,在springboot中整合RabbitMQ也是非常简洁的,所以这里决定学习一下RabbitMQ。要使用消息队列是非常简单,但是最好自己有一点了解。使用的时候会清楚一点,到时面试也有东西可以说。这篇博客大概的讲解一下我对于RabbitMQ的理解。下篇我会讲一下RabbitMQ的初体验。

RabbitMQ简介

RabbitMQ是一个由erlang开发的AMQP(Advanved Message Queue Protocol)的开源实现是一款消息中间件。

AMQP概述

上面提到了RabbitMQ是AMQP的实现。所以这边我们的了解下什么是AMQP协议

AMQP(高级消息队列协议)来自官网

AMQP官网下面是我看了这篇内容对于AMQP协议的一些理解

1.AMQP是一种网络协议,因此发布者,使用者和代理都可以驻留在不同的计算机上。
2.AMQP的消息传递模式,以下是消息传递模型图(这也是RabbitMq中消息传递的模式)
在这里插入图片描述
消息发布到交换机,通常与邮局或邮箱进行比较。然后,Exchange 使用称为绑定的规则将 消息副本分发到队列。然后,代理将消息传递给订阅队列的消费者,或者消费者根据需要从队列中获取/拉取消息。(这就是AMQP消息传递的过程)

RabbitMQ核心概念

1.Exchange(交换机)与Binding路由(重要)

交换机与路由是AMQP与JMS协议很大不同的一个地方也是学习RabbitMq非常重要的一个地方理解了这个那么简单使用RabbitMq基本没问题了。所有这边我把这两个放在一起,虽然跟JMS有区别但本质是不变的使用的都是点对点策略,跟发布订阅策略。

1.1Binding路由
在讲交换机之前我先讲下路由是咋一回事。在RabbitMq中消息首先发送信息给交换机,然后交换机跟据路由分发到符合条件的队列。所以路由就是把Quene(队列)跟交换机串起来的地方。只有通过了路由的对比消息才能成功发到队列上。在下文我会讲解是怎么一个匹配的。这边要先清楚这个概念,对下文才能更好的理解。
1.1交换器
交换器用来接收生产者发送的消息并将这些消息路由给服务器中的队列。
Exchange有4种类型:direct(默认),fanout, topic, 和headers,不同类型的Exchange转发消息的策略有所区别。
Direct 点对点策略 就跟微信私聊一样,一个人发,一个人接。 一个交换机绑定了多个队列,只有跟路由件匹配的队列才能收到信息。在点对点中一个路由件只能绑定一个交换机。
在这里插入图片描述
fanout 是发布订阅的一种,但是这一种忽略掉了路由件的影响,只要绑定了这个交换机的Quene(对列)都能收到消息。
在这里插入图片描述
应用场景:

  1. 大型多人在线(MMO)游戏可以将其用于排行榜更新或其他全球活动
  2. 体育新闻网站可以使用扇出交换来近乎实时地向移动客户端分发分数更新
  3. 分布式系统可以广播各种状态和配置更新
  4. 群聊可以使用扇出交换在参与者之间分发消息(尽管AMQP没有内置的存在概念,因此XMPP可能是更好的选择)

topic:是发布订阅的一种,只要绑定了这个交换机的Quene(对列)并且符合路由件规则的都能收到消息。这里的路由件规则一般有两种janhe.# 那也就是说以janhe.开头的队列都能收到信息。还有一种*.news也就是说以news结尾的队列就能收到信息。(#匹配0个或多个单词,*匹配一个单词)

topic(主题交换)具有非常广泛的用例。每当问题涉及多个消费者/应用程序选择性地选择他们想要接收哪种类型的消息时,应考虑使用主题交换。
示例用途:

分发与特定地理位置相关的数据,例如销售点
由多个工作人员完成的后台任务处理,每个工作人员能够处理特定的任务集
股票价格更新(以及其他类型的财务数据更新)
涉及分类或标记的新闻更新(例如,仅针对特定运动或团队)
在云中协调不同类型的服务
分布式架构/特定于操作系统的软件构建或打包,每个构建器只能处理一个体系结构或操作系统

在这里插入图片描述
headers标题交换目前我没有使用过,而且使用场景很少。所以这边就不做讲解了。需要了解可以去官网看看。


2.Message(消息体)
消息,消息是不具名的,它由消息头和消息体组成。消息体是不透明的,而消息头则由一系列的可选属性组成,这些属性包括routing-key(路由键)、priority(相对于其他消息的优先权)、delivery-mode(指出该消息可能需要持久性存储)等。

3.Quene(对列)

消息队列,用来保存消息直到发送给消费者。它是消息的容器,也是消息的终点。一个消息可投入一个或多个队列。消息一直在队列里面,等待消费者连接到这个队列将其取走。
这里提醒下要使用对列必须先创建

4.Publisher(发布者)

消息的生产者,也是一个向交换器发布消息的客户端应用程序。

5.Connection

网络连接,比如一个TCP连接。

6.Channel

信道,多路复用连接中的一条独立的双向数据流通道。信道是建立在真实的TCP连接内的虚拟连接,AMQP 命令都是通过信道发出去的,不管是发布消息、订阅队列还是接收消息,这些动作都是通过信道完成。因为对于操作系统来说建立和销毁 TCP 都是非常昂贵的开销,所以引入了信道的概念,以复用一条 TCP 连接。

7.Consumer

消息的消费者,表示一个从消息队列中取得消息的客户端应用程序。

8.Virtual Host

虚拟主机,表示一批交换器、消息队列和相关对象。虚拟主机是共享相同的身份认证和加密环境的独立服务器域。每个 vhost 本质上就是一个 mini 版的 RabbitMQ 服务器,拥有自己的队列、交换器、绑定和权限机制。vhost 是 AMQP 概念的基础,必须在连接时指定,RabbitMQ 默认的 vhost 是 /

9.broker
消息队列服务器实体下图为整个消息服务器结构图
在这里插入图片描述

我的下一篇文章会写一下springBoot整合RabbitMq写下怎么去使用它。这是我的个人站点希望大佬指导批评橙寂博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值