2018-11-28-Python全栈开发-day90-分支开发0--rabbitmq

rabbitmq理论知识

  可以当作一个邮局,是一个消息队列,生产者将消息放入队列,消费者在队列中取消息。rabbitqm是一个服务器,不同的程序都可以通过rabbitmq来进行通讯。

1.队列queue

  不同的程序可以确定不同的队列来进行信息的传输,生产者将消息放在队列中,消费者从队列中获取信息。多个消费者可以同时从队列中取数据,而且rabbitmq是公平的,给多个消费者平均的发消息,而不是像线程一样来抢资源。

  1.1 多个消费者可能出现的问题

  1)若消费者没有处理完消息就宕机,则有可能会导致这条消息丢失,为了避免这种情况,每个消费者完成了一个消息,服务器会检测消费者的状态,是否断开了连接,消费者都必须给rabbitmq服务器返回一个回执来进行确定,此时rabbitmq才会从队列中删除这个消息,但是只要消费者没有断开连接,且没有返回回执,则这个消息一直在队列中。

  2)若多个消费者处理消息的能力不同,当第一个消费者刚处理一半时,又轮到给这个消费者发消息,则会出现问题,

    可以通过设置prefetchcount来设置每次给消费者的消息数,每次只给一个,这样当检测到正在处理时,则不会给他发消息。

2.exchange

  在rabbitmq中,实际上服务器并不是直接将消息放入队列,而是将消息放入交换机,交换机根据不同的规则,来确定发送的消费者

  2.1 rounting key

    生产者在将消息发送给ex的时候,一般会指定一个rounting key,也就是发送规则,

  2.2 binding

    binding的作用是将交换机和队列关联起来,这样就可以通过交换机放队列里发数据

  

猜你喜欢

转载自www.cnblogs.com/hai125698/p/10040938.html