一、RabbitMq名词
1.queue队列
最最最核心的队列,用于存储消息
2.exchange
交换机,用来接收消息,发送到队列
3.routing key
路由,生产者发送消息到交换机,一般会指定路由key,用来指定发送到绑定的哪个队列
4.virtual
虚拟机,类似于不同的数据库
二、消息类型
消息类型总共6种,RPC类型一般不用
1.Hello World
生产者直接发送消息到队列,消费者直接从队列获取消息
发送消息时,只需要指定队列,不需要指定交换机,以及路由key,只有一个消费者
2.Work queues
发送消息时,只需要指定队列,不需要指定交换机,以及路由key,设定多个消费者
3.Publish/subscribe
广播模型交换机,发送消息时,需要新建Fanout交换机,队列,交换机和队列绑定时,不需要路由key,所以队列都能获取到交换机中的消息;消息发送时需要指定交换机,消息接收时需要指定队列,每个消息都会发送到不同的队列,并且每个队列都会被消费一次;
4.Routing
Declare交换机类型,发送消息时,需要新建Declare交换机,队列,交换机和队列绑定时,需要指定routing key;如果不指定,则所有消息都会发送到该队列;消息发送时,需要指定交换机,还有Routing key,每个消息会根据不同的Routing key,发送到不同的队列,消费者绑定不同的队列来获取消息;
5.Topics
Topic交换机类型,发送消息时,需要新建Topic交换机,队列,交换机和队列绑定时,需要指定routing key,routing key指定有个规则(列如 发送 CN.HUNAN.CHANGSHA 指定routing key CN.HUNAN.* 或者 CN.# 队列能接受到消息;*只能代表一个单词,#可以代表多个单词);发送消息时,和Routing模式是一样的,指定交换机以及routing key,发送到不同的队列,消费者绑定不同的队列来获取消息;
三、延时队列
RabbitMQ并不支持延时队列,可以通过它内部得TTL和死信队列来做到延时队列
TTL队列,当消息发送到指定延时队列时,在设置时间内没有被消费,该消息则会被丢弃;
死信队列,当消息被丢弃时(消息被拒绝、消息TTL过期、队列达到最大长度),可以被移入到死信队列
所以延时消息的处理是,当创建TTL队列时,不给当前队列消费者,为TTL队列绑定一个死信交换机,并指定Routing key(该Routing key就为发送到死信交换机时的Routing key),然后为当前交换机绑定队列,并为当前队列绑定消费者;则当消息过期时,就会被发送到死信队列,就会立马被消费,则实现了延时队列;
网友评论