消息队列的一般作用
异步调用,延迟处理
应用解耦
流量消峰,处理高并发,秒杀等
说白了,消息队列就是一方生产消息,一方消费消息而已。然后把生产方与消费方耦合度就会非常低,
可以使用不同的平台不同的语言来处理,不同的模块可以放到不同的项目去处理。
简直是逼格高、分布式系统、微服务架构中的必备
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);
欢迎加群讨论技术,群:677373950(满了,可以加,但通过不了),2群:656732739