RabbitMQ

https://www.cnblogs.com/coder-programming/p/12465314.html

消息队列中间件主要解决应用耦合,异步消息, 流量削锋等问题。

常用消息队列系统:目前在生产环境,使用较多的消息队列有 ActiveMQ、RabbitMQ、 ZeroMQ、Kafka、MetaMQ、RocketMQ 等。

五种模式:

  1.简单队列------------一个生产者对应一个消费者

  2.work模式---------一个生产者对应多个消费者,但是一条消息只能有一个消费者获得消息!!!

  3.发布、订阅模式-----------一个消费者将消息首先发送到交换器,交换器绑定到多个队列,然后被监听该队列的消费者所接收并消费。

  4.路由模式 ---------生产者将消息发送到direct交换器,在绑定队列和交换器的时候有一个路由key,生产者发送的消息会指定一个路由key,那么消息只会发送到相应key相同的队列,

          接着监听该队列的消费者消费消息。 也就是让消费者有选择性的接收消息。

  5.主题模式----上面的路由模式是根据路由key进行完整的匹配(完全相等才发送消息),这里的通配符模式通俗的来讲就是模糊匹配。

         符号“#”表示匹配一个或多个词,符号“*”表示匹配一个词。

6.工作模式总结

​ 这五种工作模式,可以归为三类:

  1. 生产者,消息队列,一个消费者;
  2. 生产者,消息队列,多个消费者;
  3. 生产者,交换机,多个消息队列,多个消费者;

7、四种交换器

  1、direct 如果路由键完全匹配的话,消息才会被投放到相应的队列。  

  2、fanout 当发送一条消息到fanout交换器上时,它会把消息投放到所有附加在此交换器上的队列。

  3、topic 设置模糊的绑定方式,“*”操作符将“.”视为分隔符,匹配单个字符;“#”操作符没有分块的概念,它将任意“.”均视为关键字的匹配部分,能够匹配多个字符。

​       4、header headers 交换器允许匹配 AMQP 消息的 header 而非路由键,除此之外,header 交换器和 direct 交换器完全一致,但是性能却差很多,因此基本上不会用到该交换器

解耦:

用户点击【下单】按钮之后的业务逻辑可能包括:扣减库存、生成相应单据、发红包、发短信通知。在业务发展初期这些逻辑可能放在一起同步执行,随着业务的发展订单量增长,需要提升系统服务的性能,这时可以将一些不需要立即生效的操作拆分出来异步执行,比如发放红包、发短信通知等。这种场景下就可以用 MQ ,在下单的主流程(比如扣减库存、生成相应单据)完成之后发送一条消息到 MQ 让主流程快速完结,而由另外的单独线程拉取MQ的消息(或者由 MQ 推送消息),当发现 MQ 中有发红包或发短信之类的消息时,执行相应的业务逻辑。
 
削峰:
秒杀场景-------要对流量进行削峰,最容易想到的解决方案就是用消息队列来缓冲瞬时流量,把同步的直接调用转换成异步的间接推送,中间通过一个队列在一端承接瞬时的流量洪峰,在另一端平滑地将消息推送出去。
原文地址:https://www.cnblogs.com/chdchd/p/13066265.html