RabbitMQ笔记四:Binding,Queue,Message概念

Binding详解

黄线部分就是binding

ExchangeExchangeQueue之间的虚拟连接,Binding中可以包含Routing key或者参数

创建binding

注意:

  • default Exchange不能进行Binding,也不需要进行绑定。
  • 除default Exchange之外,其他任何Exchange都需要和Queue进行Binding,否则无法进行消息路由(转发)
  • Binding的时候,可以设置一个或多个参数,其中参数要特别注意参数类型,如果Routing key中指定的参数类型和消息中指定的参数类型不一致(header Exchange)也不能进行消息转发。
  • Direct Exchange,Topic Exchange进行Binding的时候,需要指定Routing key
  • Fanout Exchange,Headers Exchange进行Binding的时候,不需要指定Routing key。

Queue详解

Queue称为Message Queue,消息队列,保存消息并将它们转发给消费者。

RabbitMQ架构图

属性

  • Durability:是否持久化,Durable是,Transient是否。如果不持久化,那么在服务器宕机或重启之后Queue就会丢失。
  • Auto delete:如果选择yes,当最后一个消费者不在监听Queue的时候,该Queue就会自动删除,一般选择false。
  • Arguments:AMQP协议留给AMQP实现者扩展使用的。
    x-message-ttl:一个消息推送到队列中的存活时间。设置的值之后还没消费就会被删除。
    x-expires:在自动删除该队列的时候,可以使用该队列的时间。
    x-max-length:在队列头部删除元素之前,队列可以包含多少个(就绪)消息,如果再次向队列中发送消息,会删除最早的那条消息,用来控制队列中消息的数量。
    x-max-length-bytes:在队列头部删除元素之前,队列的总消息体的大小,用来控制队列中消息的总大小。
    x-dead-letter-exchange:当消息被拒绝或者消息过期,消息重新发送到的交换机(Exchange)的可选名称。
    x-dead-letter-routing-key:当消息被拒绝或者消息过期,消息重新发送到的交换机绑定的Route key的名称,如果没有设置则使用之前的Route key。
    x-max-priority:队列支持的最大优先级数,如果没有设置则不支持消息优先级
    x-queue-mode:将队列设置为延迟模式,在磁盘上保留尽可能多的消息以减少RAM使用; 如果未设置,队列将保持在内存中的缓存,以尽可能快地传递消息。
    x-queue-master-locator:将队列设置为主位置模式,确定在节点集群上声明队列主节点所在的规则。

可以在控制台上查看queue列表还可以通过rabbitmqctl list_queues命令进行查看。

[root@mqserver ~]# rabbitmqctl list_queues
Listing queues
weixin  0
duanxin 0
APP     0
email   0
WAP     0
zhihao.miao.order       0
PC      0
OA      1

指定某个vhost下的队列:

[root@mqserver ~]# rabbitmqctl list_queues -p /
Listing queues
weixin  0
duanxin 0
APP     0
email   0
WAP     0
zhihao.miao.order       0
PC      0
OA      1

可以通过restful api来查看:http://192.168.1.131:15672/api/queues输入用户名密码即可。

具体的api可以点击

Message详解

消息。服务器和应用程序之间传送的数据,本质上就是一段数据,由Properties和Payload(body)组成。

Delivery mode:是否持久化,如果未设置持久化,转发到queue中并未消费则重启服务或者服务宕机则消息丢失。
Headers:头信息,是由一个或多个健值对组成的,当固定的Properties不满足我们需要的时候,可以自己扩展。

Properties(属性)
content_type:传输协议
content_encoding:编码方式
priority:优先级
correlation_id:rpc属性,请求的唯一标识。
reply_to:rpc属性,
expiration:消息的过期时间
message_id:消息的id
timestamp:消息的时间戳
...

如何保证消息的不丢失,三个地方做到持久化。

  1. Exchange需要持久化。
  2. Queue需要持久化。
  3. Message需要持久化。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 来源 RabbitMQ是用Erlang实现的一个高并发高可靠AMQP消息队列服务器。支持消息的持久化、事务、拥塞控...
    jiangmo阅读 10,406评论 2 34
  • 什么叫消息队列 消息(Message)是指在应用间传送的数据。消息可以非常简单,比如只包含文本字符串,也可以更复杂...
    lijun_m阅读 1,364评论 0 1
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,933评论 18 139
  • 转自:http://www.diggerplus.org/archives/3110 引言 你是否遇到过两个(多...
    leonardni阅读 6,946评论 0 5
  • 1 RabbitMQ安装部署 这里是ErLang环境的下载地址http://www.erlang.org/down...
    Bobby0322阅读 2,273评论 0 11