扩大
缩小
  

2.6.2 AMQP协议和RabbitMQ基础

1.什么是AMQP? 

AMQP(高级消息队列协议)是一种消息传递协议,使一致的客户端应用程序与一致的消息传递中间件代理进行通信。

2.AMQP模型简介

AMQP 0-9-1 Model Explained:https://www.rabbitmq.com/tutorials/amqp-concepts.html

 

3.交换机(Exchange)

  • 3.1Direct 直连

  • 3.2Fanout 发布订阅-广播

  • 3.3Topic 发布订阅-路由

  • 3.4Headers

特性中可以做路由的匹配

4.队列(Queues)

指的是它们存储由应用程序使用的消息。

队列与交换共享一些属性,但也具有一些其他属性:

  • 名称
  • 持久性(队列将在代理重新启动后幸存)
  • 独占性(仅由一个连接使用,并且该连接关闭时队列将被删除)
  • 自动删除(至少有一个使用方的队列在最后一个使用方退订时被删除)
  • 参数(可选;由插件和特定于代理的功能使用,例如消息TTL,队列长度限制等)

必须先声明队列,然后才能使用队列。声明队列将导致它创建(如果尚不存在)。如果队列已经存在并且其属性与声明中的相同,则该声明无效。

如果有至少一个消费者订阅了队列,当消息到达队列时,消息会发送给订阅者。如果一个订阅者都没有,消息会在队列中等待,直到出现第一个订阅者

5.绑定(Binding)

绑定是交换使用(其中包括)将消息路由到队列的规则。

为了指示交换机E将消息路由到队列Q,必须将Q绑定到E。绑定可能具有某些交换机类型使用的可选 路由键属性。

路由密钥的目的是选择发布到交换机的某些消息以路由到绑定队列。换句话说,路由键就像一个过滤器。

6.信道(Channel)

AMQP 引进的一个特殊的概念,建立在 tcp 之上的一个引用层协议。

一个客户端与一个服务器建立一个连接,可以用于多个消费者。

一个 tcp 连接里面可以产生多个信道。

7.消息(Message)

7.1消息确认(什么时候从队列中移除)

  • 默认模式(不需要 ack,发送到消费者之后即从队列中移除)
  • ack 模式(需要消息者回复)

7.2拒绝消息

当使用者应用程序接收到一条消息时,对该消息的处理可能会成功也可能不会成功。应用程序可以通过拒绝消息来向代理指示消息处理失败(或当时无法完成)。拒绝消息时,应用程序可以要求代理放弃或重新排队。当队列中只有一个使用者时,请确保您不会通过反复拒绝和拒绝来自同一使用者的消息来创建无限消息传递循环。

7.3消息格式

  • Content type
  • Content encoding
  • Routing key
  • Delivery mode (persistent or not)
  • Message priority
  • Message publishing timestamp
  • Expiration period
  • Publisher application id

7.4预读消息 prefetching

对于多个使用者共享一个队列的情况,在发送下一个确认之前,可以指定每个使用者可以一次发送多少消息是很有用的。如果消息倾向于批量发布,则可以将其用作简单的负载平衡技术或提高吞吐量。例如,如果生产应用程序由于其工作性质而每分钟发送一次消息。

请注意,RabbitMQ仅支持通道级别的预取计数,不支持基于连接或大小的预取。

posted @ 2021-01-26 10:46  风筝遇上风  阅读(216)  评论(0编辑  收藏  举报