今天来记录一下自己在学习过程中用到的几大核心API:
Exchange:接收消息,并根据路由键转发消息所绑定的队列
交换机属性:
- Name: 交换机名称
- Type: 交换机类型direct,topic,fanout,headers
- Durability: 是否需要持久化,true为持久化
- Auto Delete: 当最后一个绑定在Exchange上的队列删除后,自动删除该Exchange
- Internal: 当前Exchange是否用于RabbitMQ内部使用,默认为false
- Arguments: 扩展参数,用于扩展AMQP协议自制定化使用
Direct Exchange
所有发送到Direct Exchange的消息被转发到RouteKey中指定的Queue
- 注意:Direct模式可以使用RabbitMQ自带的Exchange:default Exchange,所以不需要将Exchange进行任何的绑定(binding)操作,消息传递时,RouteKey必须完全匹配才会被队列接收,否则该消息会被抛弃。
Topic Exchange
所有发送到Topic Exchange的消息被转发到所有关心RouteKey中指定topic的Queue中
- Exchange将RouteKey和某Topic进行模糊匹配,此时队列需要绑定一个Topic
- 注意:可以使用通配符进行模糊匹配
1. “#” 匹配一个或多个词
2. “*” 匹配不多不少一个词
Fanout Exchange
- 不处理路由键,只需要简单将路由键绑定到交换机上
- 发送到交换机的消息都会被交换机转发到与该交换机绑定的队列上
- fanout转发消息是最快的
Binding
- Exchange和Exchange、Queue之间的连接关系
- Binding中可以包含RoutingKey或者参数
Queue消息队列
- 消息队列,实际存储消息数据
- Durability:是否持久化,Durable:是,Transient:否
- Auto delete: 如选yes,代表最后一个监听被移除后,该Queue会自动被删除
Message 消息
- 服务器和应用程序只见传送的数据
- 本质是就是一段数据,由properties和payload(Body)组成
- 常用属性:delivery mode,headers(自定义属性)
- content_type,content_encoding,priority
- correlation_id,reply_to,expiration,message_id
- timestamp,type,user_id,app_id,cluster_id
Virtual host
- 虚拟地址,用于进行逻辑隔离,最上层的消息路由
- 一个Virtual host里面可以若干个Exchange和Queue
- 同一个Virtual host里面不能有相同名称的Exchange和Queue