key:
rabbitmq的消息会携带一个key(Routing Key),交换机和队列之间绑定也会指定一个key(Binding Key) , 通过这两个key的匹配可以确认消息的路由转发
Exchange(交换机):
消息到达rabbitmq服务内部的第一站,交换机会根据路由关系将消息转发到不同的队列
如果没有任何队列与交换机绑定,那消息到达交换机后,会被丢弃
交换机有四种类型:
- direct Exchange(直接交换机) -- Routing Key和Binding Key要完全匹配才会发送到对应队列
- Fanout Excange(扇出交换机)-- 不关系key,消息会发送给所有绑定的队列
- Topic Exchange(主题交换机) -- key可以包含分隔符”.”,单个通配符“*”,多个通配符“#”,例如“*.a”可以匹配“b.a”, “#.a”不仅可以匹配“b.a”,还可以匹配“c.b.a”, 因此转发的更加灵活
- Header Exchange – 转发规则不再依赖key,而是依据Arguments参数
交换机的属性设置:
- AMQP_PASSIVE 置1表示不存在抛出异常,默认0表示不存在则创建
- AMQP_DURABLE 置1表示交换机持久化,即rabbitmq服务器重启后该交换机会重新建立
- AMQP_AUTODELETE 置1表示当没有消费者时,服务器自动删除该交换机
(Queue)队列:
用来存放消息的队列,一个消费者从该队列中取走一个数据后,其他消费者只能消费 下一个数据。
属性设置:
- AMQP_PASSIVE true:判断是否存在, 不存在抛出异常 false: 不存在则创建
- AMQP_DURABLE true:队列持久化, 即rabbitmq服务器重启后该队列会重新建立
- AMQP_AUTODELETE true:当没有消费者时, 服务器自动删除该队列
- AMQP_EXCLUSIVE true:专用队列,连接断开后就删除该队列
参数设置:
- 消息个数上限:max-length
- 消息的总长度上限:max-length-bytes
- 消息的存活时间:message-ttl
消息持久化:
1、需要先确认交换机和队列配置成持久化,否则rabbitmq故障重启后,消息也就随着队列的消失而丢失。
2、消息的发送时指定delivery_mode= 2(1是非持久化)
3、持久化消息会同时写入磁盘和内存(加快读取速度),非持久化消息会在内存不够用时,将消息写入磁盘(Rabbitmq重启之后就没有了)
标签:知识点,AMQP,队列,rabbitmq,交换机,消息,key From: https://www.cnblogs.com/ho966/p/17623444.html