AMQP学习小记

栏目: Redis · 发布时间: 8年前

内容简介:AMQP学习小记

阅读《RabbitMQ实战》一书第二章 理解消息通信 的读书笔记。

AMQP学习小记

消费者和生产者

  • 生产者(producer)创建消息,然后发送到代理服务器(RabbitMQ)。
  • 消息包含两部分:有效载荷(payload)和标签(label);有效载荷就是你想要传输的数据(可以是任何格式的任何内容);标签描述了有效载荷,并且RabbitMQ用它来决定谁将获得消息的拷贝。
  • 消费者(consumer)连接到代理服务器上,并订阅到队列(queue)上;当消费者接收到消息时,它只得到消息的一部分:有效载荷(标签并没有随有效载荷一同传递)。
  • 信道(channel)建立在”真实的”TCP连接内的虚拟连接;不论是发布信息、订阅队列或是接收消息,都是通过信道完成的;不使用TCP连接主要是因为对于操作系统而言建立和销毁TCP会话非常昂贵的开销;在一条TCP连接上创建多少条信道是没有限制的。

队列

  • AMQP消息路由必须有三部分:交换器、队列和绑定。生成者把消息发布到交换器上;消息最终到达队列,并被消费者接收;绑定决定了消息如何从路由器到特定的队列。
  • 消费者和生产者都可以通过queue.declare命令来创建队列。queue-name:队列名称,不指定则随机生产;exclusive:设置为true则为私有队列,只有当前消费者可以订阅;auto-delete:设置为true时最后一个消费者取消订阅将自动移除队列;passive:队列不存在时返回错误。
  • 消费者通过两种方式从特定队列中接收消息:basic.consume(消息一到达队列就自动接收,推荐的方式)和basic.get(从队列里主动获取单条消息)。
  • 当一个队列拥有多个消费者时,队列接收到的消息将以循环(round-robin)的方式发给消费者。每条信息只会发送给一个订阅的消费者。
  • 消费者接收的每一条信息都必须进行确认,可以使用basic.ack命令显式确认或在订阅队列时将auto_ack参数设置为true(一旦接收就自动确认)。如果确认前与RabbitMQ断开连接,则会重新分发给下一个订阅的消费者;如果由于bug等忘记确认的话,RabbitMQ将不会发生新的消息。如果想明确拒绝新消息的话可以使用basic.reject命令(requeue参数为true则发送给其他消费者,为false则从队列中移除)。

交换器和绑定

  • 队列通过路由键(routing-key)绑定到交换器。如果消息不匹配任何绑定模式的话,将进入“黑洞”。
  • 四种类型的交换器:direct、fanout、topic和headers。direct类型以队列名称作为routing-key;fanout类型会把消息投递所有附件在此交换器上的队列;topic支持通过“*”和“#”符号匹配消费者发送的topic消息,并投递到指定队列。

多租户模式

  • 每个RabbitMQ服务器都能创建虚拟主机(vhost),其本质是一个mini版的RabbitMQ服务器,拥有自己的队列、交换器和绑定,同时也拥有自己的权限机制。
  • vhost之间是绝对隔离的。

以上所述就是小编给大家介绍的《AMQP学习小记》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Pro JavaScript Techniques

Pro JavaScript Techniques

John Resig / Apress / 2006-12-13 / USD 44.99

Pro JavaScript Techniques is the ultimate JavaScript book for the modern web developer. It provides everything you need to know about modern JavaScript, and shows what JavaScript can do for your web s......一起来看看 《Pro JavaScript Techniques》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具