简述RabbitMQ架构设计
rabbitmq生产者发送消息到rabbitmq
rabbitmq接收到到消息,先到交换机,交换机根据规则routingkey,路由到指定的队列queue
队列向消费者推送消息,消费者进行消费
RabbitMQ如何确保消息发送 ? 消息接收?
rabbitmq消息的可靠性可以从三方面考虑
(1)生产者丢失消息
生产者生产消息发送到交换机的时候消息丢失,可能是网络波动丢失,我们可以在配置文件中使用publisher-confirm,消息正确发送到交换机,返回ack,没有正确到交换机,返回nack,返回之后重新发送
交换机到队列也可能消息丢失,可以使用publsher-return,消息没有正确到队列,就会返回nack,返回之后重新发送
(2)rabbitmq宕机也可能造成消息丢失,在创建交换机和队列的时候选择持久化,消息也要持久化
(3)消费者服务器宕机或者消费者代码发生异常之后可能造成消息丢失,可以使用本地重试机制,失败策略可以使用RepublishMessageRecoverer,将消息发送到error交换机,在路由到error队列
在RabbitMQ中场见工作工作模式?
简单模式
工作模式
发布订阅模式
路由模式
通配符模式
RabbitMQ死信队列、延时队列
队列满了,溢出的消息就是死信
当消息时间到期也会变成死信
被消费者拒绝后的消息也会变成死信
我们可以设置队列消息的存活时间,当消息过期的时间的时候,消息会发送到死信交换机,死信交换机路由到死信队列,写一个消费者,用来消费死信队列
简述RabbitMq的交换机类型
Direct路由模式
Fanout 发布订阅模式
Topic 通配符模式
rabbitmq可以直连队列么.
不可以,简单模式,是由默认交换机来路由消息
简述rabbitmq的持久化机制
rabbitmq的要保证持久化,如果要是rabbitmq宕机,就会造成消息,队列,交换机丢失
在创建队列和交换机的时候可以持久化
在发送消息的时候,会将消息转换为Massage对象,这个对象默认就进行了持久化