• 对于每一个队列都会默认绑定默认交换器,bindingkey与队列名同名,默认Exchange类型direct
  • 对于非持久化的交换器,集群中的所有节点同时重启才会删除,对于非持久化的队列,只有队列所在的节点重启,队列才会删除
  • 重复声明queue或Exchange,在不设置passive=True,的情况下,重复声明,如果参数有变化会报出异常,如果设置,则正常,但不会修改已经创建的queue或Exchange,不存在会报出异常。此参数为True表示获取queue或exchange的信息,为False表示声明
  • python RabbitMQ 使用mandatory发送消息必须开启投递确认模式,mandatory确保消息到达某个队列,投递确认模式确保消息到达RabbitMQ。如果备份交换器和mandatory参数一起使用,那么mandatory参数无效。
  • 延迟队列:如果延迟队列超时,其中的消息会抛弃,在延迟队列超时之前如果队列头部的消息超时会直接抛向死信交换器,如果头部消息未超时则全部抛弃(尽管其后有超时消息)
  • 消息ttl可以在声明队列时设置,也可以在发送消息时设置,两者都是用则最小者生效,延迟队列应该通过声明队列设置消息超时时间 在确认模式,交换器不存在会抛出异常;mandatory为true,交换器不存在不会返回结果
  • rabbitmq什么时候拒绝消息:如果RabbitMQ因为自身内部错误导致消息丢失,就会发送一条nack(Basic.Nack)命令 集群节点崩溃时,该节点的队列和关联的绑定都消失了,在其他节点声明此队列会报404错误
  • 创建队列镜像,默认同步模式为manual,已存在的消息不会立即同步,新生产的消息会同步,需要手动同步或者等待未同步的消息消费完则自动同步,当设置模式为automatic时会自动同步,当同步时服务不可用,所以不建议对生产环境中正在使用的队列进行操作。
  • rabbitmactl join_cluster 加入集群时指定一个节点名,而非集群名 移除节点时,被移除节点必须停止,在集群节点上操作移除,如果集群停止,则需要添加--offline参数
  • 消费者qos不返回ack时,消息情况一直等待当连接断开时会存入队列 在队列主从同步时,此队列服务不可用,并且从节点比较消耗内存,容易出现内存告警,如果内存不够,可能会同步阻塞
  • Headers类型的exchange使用的比较少,它也是忽略routingKey的一种路由方式。是使用Headers来匹配的。Headers是一个键值对,可以定义成Hashtable。发送者在发送的时候定义一些键值对,接收者也可以再绑定时候传入一些键值对,两者匹配的话,则对应的队列就可以收到消息。匹配有两种方式all和any。这两种方式是在接收端必须要用键值"x-mactch"来定义。all代表定义的多个键值对都要满足,而any则代码只要满足一个就可以了。fanout,direct,topic exchange的routingKey都需要要字符串形式的,而headers exchange则没有这个要求,因为键值对的值可以是任何类型。