剑轩

消息队列rabbitmq介绍

电脑版发表于:2019/3/20 15:03


消息队列的一般作用

   异步调用,延迟处理

   应用解耦

   流量消峰,处理高并发,秒杀等


   说白了,消息队列就是一方生产消息,一方消费消息而已。然后把生产方与消费方耦合度就会非常低,

   可以使用不同的平台不同的语言来处理,不同的模块可以放到不同的项目去处理。

   简直是逼格高、分布式系统、微服务架构中的必备


RabbitMq中的几个重要概念


   Channels:通道

   Exchanges:交换机

   Queues:队列


Exchanges:交换机


   交换机的类型主要分为:Direct, topic, fanout,headers



  fanout

  广播模式不验证routing key

  给交换机发送信息,会直接发送给关联到该交换机的队列

  这里的字符串不能设置null,要设置为空字符串不然要报错

  Fanout这种模式即使传了routing key交换机也不会理


  Direct  

   要求该消息与一个特定的路由键完全匹配,即使关联的时候使用星号也不能模糊匹配


  Topic类似模糊匹配

    可以让routekey模糊匹配,消息也能发送成功!!!

    这个其实还是挺有用的啊,比如日志的消息要分为很多种类型

    Info:普通信息

    Warning:警告

    Error:错误

    注意:和交换机关联的时候要加星号(*)!模糊匹配才能起作用


查看交换机与队列的关联信息


 点击你想看的交换机进去,然后点击Bindings



 就能看到和交换机关联的队列与关联的key等信息,还可以直接进去解绑操作




查看队列信息信息


直接在菜单上面的Queues点击即可查看



然后可以点击一个队列查看里边的具体信息


能看到消息的条数,还有随着时间显示的图表等

以及和交换机绑定信息

还能直接获取消息,查看消息



RabbitMq消息消费模式


  1:主动模式

      主动从队列中去拉取消息。

      优点:消费灵活,可以随时消费

 

  2:被动模式

      一旦有消息进来,马上触发消费

      优点:即时性好



RabbitMQ应答模式模式


 自动确认:

      获取消息后自动删除,更方便

 

 手动确认:

     获取消息后用户自动调用是否确认收到消息,然后在删除消息,可控性更强

     

     net core/net framework参考代码如下:

     

   首先自定应答设置成false:     noAck:fasle

//开始接收消息(自动应答为false,获取消息后不会自动删除,自己控制消息是否删除)
channel.BasicConsume("RRedis", noAck: false, consumer: custom);

   然后手动调用方法BasicAck完成应答

//处理完成,告诉Broker可以服务端可以删除消息,分配新的消息过来
channel.BasicAck(deliveryTag: ea.DeliveryTag, multiple: false);







关于TNBLOG
TNBLOG,技术分享。技术交流:群号677373950
ICP备案 :渝ICP备18016597号-1
App store Android
精彩评论
{{item.replyName}}
{{item.content}}
{{item.time}}
{{subpj.replyName}}
@{{subpj.beReplyName}}{{subpj.content}}
{{subpj.time}}
猜你喜欢