RabbitMq的三种交换机分别为fanout,direct,topic
1.fanout:可以理解为分发的意思,也就是说你只需要将队列绑定到交换机上,一个发送到交换机的消息都会被转发到与该交换机绑定的所有队列上,就像广播。
2.direct,可以理解为1对1定向发送,需要将一个队列绑定到交换机上,要求该消息与一个特定的路由键完全匹配。
3.topic:讲路由键和某种模式进行匹配。如"#"匹配一个或者多个词,"*"匹配一个词。如“topic.#”可以匹配到“topic.A.all”,"topic.*"只能匹配到“topic.A”
rabbitMq如何做到信息的可靠,不丢失不重复
rabbitMq是通过信道(虚拟TCP模式)传递消息的,在发送端,设置发送者确认模式,通过信道发送消息(生成唯一的id),当发送到指定的队列后,给生产者发送一个ack指令说明消息已发送出去。若此过程中出现服务器异常,信道会给生产者发送一个nack指令,由于是异步的,生产者会再次发送消息出去
在接受端,设置为接收者确认模式,当消费者接收到消息时并确认后,mq会删除掉队列中的数据。当在确认之前出现服务器异常,mq会认为该消息没有被分发出去,重新下发给另一个消费者。
在消息生产时,MQ内部针对每条生产者发送的消息生成一个inner-msg-id,作为去重和幂等的依据(消息投递失败并重传),避免重复的消息进入队列;在消息消费时,要求消息体中必须要有一个bizId(对于同一业务全局唯一,如支付ID、订单ID、帖子ID等)作为去重和幂等的依据,避免同一条消息被重复消费。
具体配置见https://blog.csdn.net/kevinmcy/article/details/82221297