RabbitMQ

打印 上一主题 下一主题

主题 896|帖子 896|积分 2688

RabbitMQ快速入门

RabbitMQ是由erlang语言开发,基于AMQP(Advanced Message Queue 高级消息队列协议)协议实现的消息队列

RabbitMQ的工作原理


组成部分说明:

Broker:消息队列服务历程,此历程包罗两个部分:Exchange和Queue
Exchange:消息队列交换机,按肯定的规则将消息路由转发到某个队列,对消息进行过虑。
Queue:消息队列,存储消息的队列,消息到达队列并转发给指定的
Producer:消息生产者,即生产方客户端,生产方客户端将消息发送
Consumer:消息斲丧者,即斲丧方客户端,接收MQ转发的消息。
生产者发送消息流程:

1、生产者和Broker建立TCP毗连。
2、生产者和Broker建立通道。
3、生产者通过通道消息发送给Broker,由Exchange将消息进行转发。
4、Exchange将消息转发到指定的Queue(队列)
斲丧者接收消息流程:

1、斲丧者和Broker建立TCP毗连
2、斲丧者和Broker建立通道
3、斲丧者监听指定的Queue(队列)
4、当有消息到达Queue时Broker默认将消息推送给斲丧者。
5、斲丧者接收到消息。
6、ack回复

消息确认机制(ACK)

当斲丧者获取消息后,会向RabbitMQ发送回执ACK,告知消息已经被接收。删除队列中的消息
回执ACK分两种环境:


  • 自动ACK:消息一旦被接收,斲丧者自动发送ACK(用作消息不太紧张场景)
  • 手动ACK:消息接收后,不会发送ACK,必要手动调用(用作消息很紧张, 不可丢失场景)
六种消息模型

①根本消息模型:




  • P:生产者,也就是要发送消息的步伐
  • C:斲丧者:消息的担当者,会一直等待消息到来。
  • queue:消息队列,图中赤色部分。可以缓存消息;生产者向其中投递消息,斲丧者从其中取出消息。 
②work消息模型


两个斲丧端共同斲丧同一个队列中的消息,但是一个消息只能被一个斲丧者获取。这个消息模型在Web应用步伐中特殊有用,可以处置惩罚短的HTTP哀求窗口中无法处置惩罚复杂的使命。

生产者会将消息平均分发给两个斲丧端,但是当其中一个斲丧端处置惩罚其他工作时, 我们准确做法是将消息分发给空闲的斲丧端, 必要设置一个参数   prefetchCount  = 1。 注意, 这个参数只有在手动ack下才生效
订阅模型分类

1、一个生产者多个斲丧者
2、每个斲丧者都有一个本身的队列
3、生产者没有将消息直接发送给队列,而是发送给exchange(交换机、转发器)
4、每个队列都必要绑定到交换机上
5、生产者发送的消息,颠末交换机到达队列,实现一个消息被多个斲丧者斲丧
X(Exchanges):交换机一方面:接收生产者发送的消息。另一方面:知道如何处置惩罚消息,比方递交给某个特殊队列、递交给所有队列、或是将消息抛弃。到底如何操作,取决于Exchange的类型。
Exchange类型有以下几种:
Fanout:广播,将消息交给所有绑定到交换机的队列
Direct:定向,把消息交给符合指定routing key 的队列
Topic:通配符,把消息交给符合routing pattern(路由模式) 的队列
Header:header模式与routing不同的地方在于,header模式取消routingkey,使用header中的 key/value(键值对)匹配队列。
Header模式不展开了,感爱好可以参考这篇文章 RabbitMQ学习之Headers交换类型(java)_header类型的mq 是不是 没有斲丧者也没事-CSDN博客
Exchange(交换机)只负责转发消息,不具备存储消息的能力,如果没有任何队列与Exchange绑定,大概没有符合路由规则的队列,那么消息会丢失!

Publish/subscribe(交换机类型:Fanout,也称为广播 


图中的蓝色X代表Exchange(交换机)


  • 1) 声明Exchange,不再声明Queue
  • 2) 发送消息到Exchange,不再发送到Queue
  • 3) 队列必要绑定到交换机, 交换机遇发送消息给所有绑定他的队列
④Routing 路由模型(交换机类型:direct)


P:生产者,向Exchange发送消息,发送消息时,会指定一个routing key。
X:Exchange(交换机),接收生产者的消息,然后把消息递交给 与routing key完全匹配的队列
C1:斲丧者,其所在队列指定了必要routing key 为 error 的消息
C2:斲丧者,其所在队列指定了必要routing key 为 info、error、warning 的消息

⑤Topics 通配符模式(交换机类型:topics)


每个斲丧者监听本身的队列,而且设置带统配符的routingkey,生产者将消息发给broker,由交换机根据routingkey来转发消息到指定的队列。
Routingkey一般都是有一个大概多个单词组成,多个单词之间以“.”分割,比方:inform.sms
通配符规则:
#:匹配一个或多个词
*:匹配不多不少恰好1个词
举例:
audit.#:能够匹配audit.irs.corporate 大概 audit.irs
audit.*:只能匹配audit.irs

⑥RPC

RPC是指长途过程调用,也就是说两台服务器A,B,一个应用部署在A服务器上,想要调用B服务器上应用提供的函数/方法,由于不在一个内存空间,不能直接调用,必要通过网络来表达调用的语义和传达调用的数据。
Callback queue 回调队列客户端向服务器发送哀求,服务器端处置惩罚哀求后,将其处置惩罚结果保存在一个存储体中。而客户端为了获得处置惩罚结果,那么客户在向服务器发送哀求时,同时发送一个回调队列地点reply_to。
Correlation id 关联标识,客户端大概会发送多个哀求给服务器,当服务器处置惩罚完后,客户端无法辨别在回调队列中的相应具体和谁人哀求时对应的。为了处置惩罚这种环境,客户端在发送每个哀求时,同时会附带一个独有correlation_id属性,如许客户端在回调队列中根据correlation_id字段的值就可以分辨此相应属于哪个哀求。
流程说明


  • 当客户端启动的时间,它创建一个匿名独享的回调队列。
  • 在 RPC 哀求中,客户端发送带有两个属性的消息:一个是设置回调队列的 reply_to 属性,另一个是设置唯一值的 correlation_id 属性。
  • 将哀求发送到一个 rpc_queue 队列中。
  • 服务器等待哀求发送到这个队列中来。当哀求出现的时间,它执行他的工作而且将带有执行结果的消息发送给 reply_to 字段指定的队列。
  • 客户端等待回调队列里的数据。当有消息出现的时间,它会查抄 correlation_id 属性。如果此属性的值与哀求匹配,将它返回给应用

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

知者何南

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表