优点:同步变异步,解耦,流量削峰
流程:生产者向指定交换机发信息,交换机再路由到队列中去,rabbit服务器和应用服务器建立连接,无论时发布消息,接收消息,都是通过信道完成的。
1:给rabbitmq,分配每一个权限用户,都会为该用户分配一个虚拟的mq空间,不同的mq空间是相互隔离的。
2:生产者,发送消息时候,会指定交换机,以及路由键发送消息。
3:消费者,会通过交换机,路由键,和队列进行绑定
当生产者把消息,交换机,和路由键,进行消息发布。 消息进入对交换机中,交换机通过 绑定关系,把信息路由到队列中去。消费者监听到消息,就从队列中取走。
保证信息不丢失:希望当无服务器重启的情况下,也不会丢失消息,我们对队列和消息进行持久化,
列:当生产者发送100个消息,如果不实例化,当时消费者服务关闭,队列中的消息将会丢失,实例化,当服务器重新启动,会从队列中继续接受消息
ACK:默认开启,如果正在处理消息的过程中,消费者服务器,网络,出现故障,那么正在处理的消息可能就没有完成,数据就会丢失,为了确保消息不会丢失,mq支持消息确认, ACK
ACK机制是消费者从mq收到消息后处理反馈给mq,mq收到反馈后才将消息从队列中删除。
1:如果一个消费者,在处理消息时挂掉,那么就不会有ACK反馈,mq就会认为这个消息没有正常消费,会把这个消息重新放到队列中;
2:如果在集群的情况下,mq会立即把这个消息推送给其它消费者,这种机制保证乐在消费者服务器故障的时候,不会丢失任何消息和任务。
3:消息永远不会从mq服务器中删除,只会,当消费者正确的发送ack确认反馈,mq确认收到后消息,才会从mq服务器的队列中删除此数据
4:消息的ack是默认打开的。,
问题:如果忘了,ack,当消费者退出时,信息会一直重新分发,然后mq的占用内存会越来越多,最后会导致内存泄漏
2:如果消费者接收到消息发生异常(此时消费者没有告诉mq服务器消费完成,ack没有消费确认), 那么 消息会不停的重试, 第一try catch包裹,第二设置重试次数。