当前位置: 首页 > 网络应用技术

最全面,最彻底的RabbitMQ指南

时间:2023-03-09 12:49:32 网络应用技术

  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