RABBITMQ是高级消息队列协议(AMQP)的开源消息代理软件(也称为消息导向的中间件)。RabbitMQ服务器用Erlang语言编写,并且在开放的电信平台平台框架上构建了簇和故障传输。所有主要的编程语言都有与代理接口通信的客户库。
RabbitMQ是一组开源(MPL)消息队列服务软件。它是由Lshift提供的高级消息排队协议(AMQP)的开源实现,该协议是由Erlang编写的,该协议以高性能,强大和可扩展性而闻名。
AMQP实际上是像HTTP这样的协议,但是HTTP是为网络传输的,并且AMQP基于消息队列
**经纪人:**
接收和分发消息的应用,消息系统在介绍消息中间软件时表示,消息代理是消息代理。
**虚拟主机:**
对于多个租户和安全因素,AMQP的基本组件分为虚拟组,类似于网络中的名称空间概念。当多个不同的用户使用同一RabbitMQ服务器提供的相同服务时,可以将多个VHOST划分,并且可以分配多个VHOST,并且每个用户在其VHOST中创建Exchange /队列。
“联系:”
出版商 / Consuume和Broker之间的TCP连接。断开连接的操作仅在客户端执行,并且经纪人不会断开连接连接,除非网络故障或经纪人服务存在问题。
** 渠道: **
如果建立了对RabbitMQ的每次访问,建立了一个连接,并且TCP连接的开销建立TCP连接将是巨大的,并且当消息量很大时,效率也很低。CHANNEL是在连接内建立的逻辑连接。如果应用程序支持多线程,则通常每个线程都会创建一个单独的通道进行通信。AMQP方法包含频道ID,以帮助客户端和消息代理标识该频道,因此通道是完全隔离的。Channel作为轻量级连接,大大降低了为操作系统建立TCP连接的成本。
“交换:”
消息到达经纪人的第一站。根据分布规则,它与查询表中的路由密钥匹配并将消息分发给队列。共同类型为:直接(点对点),主题(Publish-subscribe)和fanout(多播)。
** 队列: **
该消息终于在这里发送了此消息,以等待骗子带走。可以同时将一条消息复制到多个队列。
“捆绑:”
交换和队列之间的虚拟连接可以包含绑定中的路由键。结合信息存储在“查询表”中的“交换中”中,用于发行消息。
“直接的:”
这种类型的交换机的路由规则基于RoutingKey的徽标。开关通过RoutingKey绑定到队列。当生产者的生产消息时,将RoutingKey指定为队列的RoutingKey绑定。LET的将此消息发送到相应的队列。
“粉丝:”
这种类型的开关路由规则非常简单。只要队列与他绑在一起,他就会将消息发送给相应的队列(与RoutingKey无关)
“话题:”
(因为*是此注释软件中的关键字,因此星星被星星替换。)这种类型的交换路由规则也与RoutingKey有关。但是,主题可以基于:star,#(星号代表过滤一个单词,星号代表一个单词,星号代表一个单词,星号代表一个单词,星号代表一个单词,星号,星号代表一个单词,星号表示一个单词,星号表示一个单词,该单词正在滤波一个单词,星号表示一个单词。#代表过滤后的所有单词,使用。使用。单独)以识别RoutingKey。例如,假设我绑定RoutingKey的RoutingKey的路由键是:#.userB。
然后,我会产生一个消息routingKey:error.user,因此,此时,如果您将其更改为topic.error.user,则目前可以接受这两个队列,那么此时只有B可以接受它。
“标题:”
这种类型的开关很少使用。他的路由规则与RoutingKey无关,但通过判断标题参数可以识别。基本上,没有应用程序方案,因为以上三种类型可以是应对。
1.客户端已连接到消息队列服务器以打开通道。
2.客户端声明交换并设置相关属性。
3.客户端声明队列并设置相关属性。
4.客户端使用路由密钥来建立交换和队列之间的绑定关系。
5.客户交付消息交换。
在交易所收到消息后,根据消息的消息和已建立的绑定,消息路由将传递到一个或多个队列。有三种交换类型:直接,粉丝,主题,主题,每个实施不同的路由算法:
默认情况下,如果消费者正确地收到了消息,则该消息将从队列中删除。当然,可以将相同的消息发送给许多消费。
如果没有任何消费者订阅的队列,则该队列可以到达数据,则该数据将是缓存的,并且不会被丢弃。当有消费者时,此数据将立即发送给该消费者。当消费者正确地收到此数据时,该数据将从队列中删除。
RabbitMQ支持消息的耐用性,即数据写在磁盘上。对于数据安全考虑因素,大多数用户选择持久。消息队列的持久性包括3个部分:
1.交换持久性,在语句中指定耐用=> 1
2.标题耐用,指定耐用=> 1
3.新闻很耐用,指定delvity_mode => 2(交货过程中1个无孔))
如果交换和队列耐用,它们之间的结合也持久。交换和队列之间存在耐用,并且不允许结合。
射精:集群服务
消息是持久的:从内存的耐用消息到硬盘,然后从硬盘加载到内存
1. Linux
2. Windows to 10
3. VXWORKS
4. MacOS
5. freebsd
6. Windows Server2003至2016
7,Solaris
8. TRU64
1.迅速
2. Java
3.长生不老药
4. Python
5. JavaScript
6. Objective-C
7.去
8.红宝石
9,C#
7.红宝石
8. PHP
在特殊情况下,它具有相应的好处,脱钩,异步和峰值。
“缺点”
1.系统的可用性降低
系统引入的外部依赖性越多,系统悬挂就越容易。
2.增加系统的复杂性
引入MQ之后,需要考虑的问题变得更加多。如何确保新闻不会重复消费?如何确保新闻不会丢失?如何确保消息传输顺序?
3.一致的问题
在A系统发送消息后,它将直接返回成功,但是如果BCD系统中有一个失败的系统,则数据将是不一致的。这涉及分布式交易的问题。
原始:https://juejin.cn/post/70994574571307597