AMQP初探

AMQP是什么

AMQP 全称为( Advanced Message Queuing Protocol), 它是一个跨平台的提供统一消息服务的应用层标准协议,它允许来自不同供应商的生产以及消费者之前的 相互通信,因此,基于AMQP协议开发的客户端与消息中间件之前的通信并不受供应商,开发语言等条件的限制。

基于AMQP协议的常见消息中间件有QPID、RabbitMQ、ActiveMQ等等。


基本概念

生产者 Producer

产生消息,并将消息递交给Exchange

交换机 Exchange

负责消息将正确地转发到相应的队列

队列 Queue

存储消息的容器(队列),先进先出

消费者 Consumer

从队列中取出消息并进行处理

路由键 Routing_key

在生产者将消息发送到Exchange时需要用到的参数。

该参数说明了消息的属性,换言之,说明了该消息是什么类型的消息。

绑定键 Binding_key

在交换机将生产者递送来的消息转发到与此交换机绑定的队列时,需要用到的参数。

该参数说明了队列的属性,换言之,说明了该队列愿意接纳什么样类型的消息


消息转发方式

取决于交换机的类型,如下:

Direct型

单播型: 在路由键和绑定键完全匹配的消息和队列之间建立转发通道

Fanout型

广播型: 将消息和当前所有队列(和当前exchange建立绑定)之前建立转发通道

Topic 型

组播型 : 路由键和绑定键是模糊匹配的,匹配规则如下:

格式: <elem>.<color>.<specific>

* : 匹配一个单词,表示该处必须有一个单词

# : 匹配任意个单词,表示该处有没有单词都行

示例: 消息路由键为*.color.#将与队列绑定键为parameter.color或者parameter.color.red匹配

Header 型

Message是AMQP模型中所操纵的基本单位,它由Producer产生,经过Broker被Consumer所消费。它的基本结构有两部分: Header和Body。Header是由Producer添加上的各种属性的集合,这些属性有控制Message是否可被缓存,接收的queue是哪个,优先级是多少等。

所以,对于RabbitMQ,由于routing_key以及其他一些参数,充当了消息头的角色,故,RabbitMq中并未实现header

# send message
message =  "Hello World!"
channel.basic_publish(exchange='',
                  routing_key='color',
                  body=message,
                  properties=pika.BasicProperties(
                     delivery_mode = 2, 
                      ))
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,991评论 19 139
  • 来源 RabbitMQ是用Erlang实现的一个高并发高可靠AMQP消息队列服务器。支持消息的持久化、事务、拥塞控...
    jiangmo阅读 10,409评论 2 34
  • 关于消息队列,从前年开始断断续续看了些资料,想写很久了,但一直没腾出空,近来分别碰到几个朋友聊这块的技术选型,是时...
    预流阅读 585,503评论 51 786
  • 1 RabbitMQ安装部署 这里是ErLang环境的下载地址http://www.erlang.org/down...
    Bobby0322阅读 2,273评论 0 11
  • 什么叫消息队列 消息(Message)是指在应用间传送的数据。消息可以非常简单,比如只包含文本字符串,也可以更复杂...
    lijun_m阅读 1,366评论 0 1