生产者
生产消息,并将其发布到消息代理服务器中。
消费者
连接到消息代理服务器,并订阅队列中的消息
消息
由有效载荷和标签组成
- 有效载荷:生产者要发送的有效信息
- 标签:描述发送的有效载荷,以及谁能得到该消息的拷贝
信道(channel)
- 建立在真实tcp连接上的虚拟连接
- 每个信道都有一个唯一ID
- 信道的个数不受限制
amqp消息路由组成部分
- 交换器
- 队列
- 绑定(路由键)
消息消费
- basic.consume:当消费者处理完消息后会继续获取该队列中的有效消息
- basic.get:只获取队列中的一条消息
?basic.consume是持续消费中有效提升吞吐量的方法,而不是循环使用basic.get
消息确认(消息被从队列安全移除)
- 队列auto_ack设置为true
- 向队列发送basic.ack命令
消息拒绝
- 直接与消息服务器断开(存在性能隐患)
- 发送basic.reject命令给队列
?如果requeue为true,消息重新归队发送给其他消费者
?如果reqeue为false,则被移除队列;最新版本中有dead letter的死信队列
3.也可以直接发送basic.ack,好处是版本兼容
队列(
- 为消息提供了住所,消息在这里等待消费
- 对于负载均衡来说,队列是一个绝佳的方案
- 消息在rabbitmq的最后一站(除非消息进入黑洞)
### 创建队列 - 使用queue.declare声明队列(生产者和消费者均可)
- exclusive设置为true,队列变为私有,只有你的应用程序才能消费
- auto-delete设置为true,当最后一个订阅者断开连接后队列自动删除
- passive设置为true,用于检测队列是否存在,不存在返回错误
?当不指定队列名称时,会随机生成并返回该名称
?如果队列存在则什么都不做
?信道订阅了队列时不可以声明队列,应先取消订阅将信道设置为“传输”模式