交换机(Exchange)
交换机介绍
生产者发送消息到RabbitMQ首先会到交换机中交换机的职责是根据一定规则把消息发送到队列中交换机与队列的关系是多对多(多对多的关系交给Binding去维护)交换机有四种类型(direct(默认)、fanout、topic,headers(基本没用请无视掉))
创建交换机
channel
.exchangeDeclare("shanguoyu", BuiltinExchangeType
.DIRECT
,false,false,false,null
);
Direct类型的Exchange
当消息路由键(RouteKey)与该类型交换机的绑定一致时发送到相应队列
Topic类型的Exchange
当消息的路由键与绑定关系模糊匹配成功则发送到相应队列,使用通配符进行模糊匹配,#匹配一个或多个词,*匹配一个词
Fanout类型的Exchange
与路由键和绑定无关了,如果消息发送到Fanout类型的Exchange上,那么这种类型的交换机会把消息发送给所有队列。
队列(Queue)
队列介绍
用于存储消息消息最终会到达队列中等待消费者取走
创建队列
channel
.queueDeclare("shanguoyu",false,false,false,null
);
创建队列时的扩展参数
参数名目的
x-dead-letter-exchange死信交换机x-dead-letter-routing-key死信消息的可选路由键x-expires队列在指定毫秒数后被删除(x-expires从没有消费者连接开始算起)x-ha-policy创建HA队列x-ha-nodesHA队列的分布节点x-max-length队列的最大消息数x-message-ttl毫秒为单位的消息过期时间,队列级别x-max-length-bytes队列的最大容量,单位 Bytex-max-priority最大优先值为255的队列优先排序功能
绑定(Binding)
用于队列和交换机之间的关联(维护队列与交换机之间的关系)绑定中包含路由键(RoutingKey)Exchanger和Queue的绑定可以绑定多次只是绑定规则不一样
消息(Message)
消息介绍
服务器和应用程序之间传送的数据由Properties和Body(Payload)组成
Properties
属性名用处
content-type消息体的MIME类型,如application/jsoncontent-encoding消息的编码类型,如是否压缩message-id消息的唯一性标识,由应用进行设置correlation-id一般用做关联消息的message-id,常用于消息的响应timestamp消息的创建时刻,整形,精确到秒expiration消息的过期时刻,字符串,但是呈现格式为整型,精确到秒delivery-mode消息的持久化类型,1为非持久化,2为持久化,性能影响巨大app-id应用程序的类型和版本号user-id标识已登录用户,极少使用type消息类型名称,完全由应用决定如何使用该字段reply-to构建回复消息的私有响应队列headers键/值对表,用户自定义任意的键和值priority指定队列中消息的优先级
Virtual Host
虚拟主机/虚拟地址用于进行逻辑隔离表示一批交换器、消息队列和相关对象Virtual Host是AMQP概念的基础,必须在连接时指定,RabbitMQ默认的vhost是 /每个vhost本质上就是一个mini版的RabbitMQ服务器,拥有自己的队列、交换器、绑定和权限机制