AMPQ 0-9-1学习笔记

AMQP 0-9-1学习笔记

  1.  

AMQP(Advanced Message Queuing Protocol)高级消息队列协议:是一个进程间传递异步消息的网络协议

2.
AMQP的基本模型: Publisher(发布者) → Exchange(交换机) → Queue(队列) → Consumer(消费者)
3.
工作原理:publisher public Message to Exchange. Exchange distribute the message to Queue by Route.Consumer consum the message(Return result or no return).
4.深入理解
4.1 发布者、交换机、队列、消费者都可以有多个。因为AMQP是一个网络协议协议,所以这个过程中的发布者,消费者,消息代理可以分别存在于不同的设备上。负载均衡处理
4.2 发布者发货消息时可以给消息指定各种消息属性(Message Meta-data)。有些属性有可能会被消息代理(Brokers)使用,然而其他的属性则是完全不透明的,他们只能被接受消息的应用所使用。
4.3 从安全角度考虑,网络是不可靠的,又或是消费者在处理消息的过程中意外挂掉,这样没有处理成功的消息就会丢失。基于此原因,AMQP模块包含了一个消息确认(Message Acknowledgements)机制:当一个消息从队列中投递给消费者后,不会立即从队列中删除,直到它收到来自消费者的确认回执(Acknowledgement)后,才完全从队列中删除。
4.5 我们可以把一些无法消费的消息和无法路由的消息,扔到死信队列里面去。当我们需要处理或者观察这些消息的时候,可以从消息队列里面把这些死信拿出来分析和处理。
5.Exchange(交换机)
AMQP 0-9-1提供了4种默认的交换机
1.Direct Exchange((Empty string) and amq.direct) :routingkey完全相同,exchange才会选择对应的binding进行消息路由。
2.Topic exchange(amq.topic) :exchange和上面的direct类型差不多,但direct类型要求routingkey完全相等,这里的routingkey可以有通配符:'*','#'.其中'*'表示匹配一个单词, '#'则表示匹配没有或者多个单词
3.Fanout exchange(amq.fanout) :将消息路由到所有的绑定队列中,无需对消息进行routingkey的匹配操作。
4.Headers exchange(amq.match(and amq.headers in RabbitMQ))  :完全通过Headers属性进行匹配的。
除了这些交换机类型外,交换机还有很多的属性,比较重要的如下:
1.Name(名称)名称
2.Durability(Exchange survive broker restart)重启MQ服务后,代理仍然会重新声明持久的交换机
3.Auto-delete(exchange is deleted when last queue is unbound from it) 当最后一个队列也解绑后,交换机是否还存在
4.Arguments(optional,used by plugins and broker-specific features)  可选,由插件和特定于代理的功能使用
6.Queue(消息队列)
所有的消息都存储在消息队列里面(包括:1.待消费的消息 2.正在消费的消息),一般的消息队列都只要声明了,就不会修改队列的属性,如果修改了,必须要删除旧的消息队列,然后重新生成新的。
6.1消息队列的特性:
6.1.1 Name 如果声明队列的时候不指定队列名称,代理会为队列声明一个唯一的队列名称。
6.1.2 Durable(the queue will survive a broker restart) 队列的持久性不会使路由到该队列的消息持久。如果代理被删除然后重新启动,则在代理重启期间将重新声明持久队列,但是,只会恢复持久性消息。
6.1.3 Exclusive(Used by only one connection and the queue will be deleted when that connection closes)最后一个连接到这个消息队列的连接都被关闭后,如果Exclusive=true,这个消息队列会被删除。
6.1.4 Auto-delete(queue that has had at least one consumer is deleted when last consumer unsubscribes)最后一个消费者取消订阅的时候,这个消息队列会被删除。
6.1.5 Arguments(optional;used by plugins and broker-specific features such as message TTL.queue length limit,etc)
7.消费消息(Consumers)
Comsume message are two way in AMQP 0-9-1 (1) Have messages delivered to them("push API") (2) Fetch messages as needed("pull API")
8.Message Acknowledgements
因为网络和程序的一个失败,所以一些程序需要有一个"消息确认"。"消息确认"机制可以帮助我们创建一个更加稳定,保障的软件系统
消息确认大体分为两种:(1) 消息接受确认 (2) 消息接受并且消费确认
9.Connections(连接)
AMPQ 0-9-1 使用TCP传输。连接使用身份验证,可以使用TLS进行保护。当应用程序不再需要连接服务器时,关闭它的AMQP 0-9-1连接,而不是关闭TCL连接。
10.Vitual Host(虚拟主机)
为了使单个代理可以托管多个隔离的“环境”(用户组,交换,队列等),AMQP包含虚拟主机(虚拟主机)的概念。它们类似于许多流行的Web服务器使用的虚拟主机,并提供AMQP实体所在的完全隔离的环境。AMQP客户端指定在AMQP连接协商期间要使用的vhost。
11.Message Attributes And Payload(消息特性和有效负载)
消息特性:①Content type(消息格式) ②Content encoding(消息编码) ③Routing key ④Delivery mode or persistent or not(消息是否持久) ⑤Message priority(消息优先级) ⑥Message publishing timestamp(消息发布时间戳) ⑦Expiration period(有效期) ⑧Publisher application id(发布消息发布者Id)
posted @ 2019-03-20 14:38  落落落落码  阅读(163)  评论(0编辑  收藏  举报