池偏一 | 博客 DEDICATED OPERATION AND MAINTENANCE DEVELOPMENT.
登录
X
X
  • RabbitMQ 简介及原理

  • rabbitmq 是一款由erlang 语言开发的基于AMQP协议的高级消息队列,AMQP协议是一个应用层协议,解决消息中间件与客户端传递消息,不受其他任何东西干扰。


    rabbitmq 的常见应用场景有:


    异步处理:只需要放入队列即完成,其他相关处理均可异步完成


    解耦合:  当消费端出现异常时,消息不会丢失。如下单系统,可以保障使用者正常下单。


    高并发:  淘宝双十一秒杀活动,在短时间内突然爆增的请求可能导致程序处理不过来,出现崩溃现象,此时崩溃后的所有请求全部失败。


      采用消息队列,前端可以把所有请求发送到队列中,后端按照自己的处理能力依次处理。



    rabbitmq 系统架构:


    product ——send(message+routingkey)——> exchange(binding指定queue) ——routingkey——> queue <———consumer


    image.png




    exchange 4种类型详解:


    direct: 发送消息时带有的“routingkey”全等于 exchange 绑定queue时所用的"routingkey",则发送。


    image.png


    fanout:发送消息时,exchange 直接转发到所有绑定成功的queue 上,不论routingkey是什么。


    image.png


    topic:exchange 绑定queue 使用的routingkey 切分成以.分割的形式,#号表示0个或多个单词,空格表示一个单词。消息会被发送至routingkey 匹配bandingkey的queue上。


    如:。发送消息时使用的routingkey="cpy.device.test" 那么消息将被发送至所有exchange绑定queue使用的routingkey="cpy.#.test"的队列上。


    image.png


    headers:此类exchange类型与direct 发送方式一致,但性能很差,它忽略routingkey发送,而是匹配消息中的header,转发到指定队列,该方法几乎不用


  • posted @ 2019-01-29 by 池偏一 阅读(59) 评论(0)
© 2017 池偏一 | 赣ICP备 17014207号