如何用.NETCore操作RabbitMQ
什么是rabbitmq?
rabbitmq是由erlang语言开发的一个基于amqp(advanced message queuing protocol)协议的企业级消息队列中间件。可实现队列,订阅/发布,路由,通配符等工作模式。
为什么要使用rabbitmq?
- 异步处理:比如发送邮件,发送短信等不需要等待处理结果的操作
- 应用解耦:比如下单成功后,通知仓库发货,不需要等待仓库回应,通过消息队列去通知仓库,降低应用间耦合程序,可并行开发两个功能模块
- 流量削锋:在抢购或者其他的活动页,服务处于爆发式请求状态,如果直连数据库,数据库容易被拖垮。抢购商品也容易出现库存超卖的情况。通过队列可有效解决该问题。
- 日志处理:在单机中,日志直接写入到文件目录中,但是在分布式应用中,日志需要有统一的处理机制,可通过消息队列统一由某个消费端做处理。
- 消息通信:如生产端和消费端可通过队列进行异步通信
如何安装rabbitmq?
windows端
1.安装erlang语言运行环境
https://erlang.org/download/otp_win64_23.2.exe
下载后直接下一步即可
2.安装rabbitmq
https://www.rabbitmq.com/install-windows.html
直接点击安装下一步即可按章
3.安装rabbitmq的web管理平台
rabbitmq的管理平台是通过插件的形式使用,需要手动启用管理平台
在windows下,rabbitmq默认被安装到c:\program files\rabbitmq server\rabbitmq_server-3.8.14 下。
打开sbin ,在cmd或者powershell中执行
安装完成后,浏览器打开 http://localhost:15672/ 即可看到rabbitmq的管理界面。输入默认账号密码 guest 成功登录。
linux环境安装
1.ubuntu:https://www.rabbitmq.com/install-debian.html
2.centos:https://www.rabbitmq.com/install-rpm.html
rabbitmq的基本概念
生产者
发送消息的端
消费者
获取消息并处理的端
connection
一个终端连接。每一个connection都可以在rabbitmq后台看到
channel
channel是建立在connection上的一个虚拟通信管道。一般情况下,往消息队列中写入多条消息,为了不每条消息都建立一个tcp连接,所以rabbitmq的做法是多条消息可以公用一个connection,大大提高mq的负载能力。
exchange
exchange是一个虚拟交换机。每一条消息都必须要通过交换机才能能进入对应的队列,可以理解为网络设备中的交换机,是一个意思。
queue
queue是一个存储消息的内部对象,所有的rabbit mq消息都存储在queue中。生产者所生产的消息会存储在queue中,消费者获取的消息也是从queue中获取。
如何在.net core中使用rabbitmq?
nuget安装
创建生产者
在循环中,输入一个值,按下enter,即可推送一条消息到队列。
也可以直接在rabbitmq的管理后台查看
可以看到我们发送的消息已经被rabbitmq存储在queue中了。只等某个幸运的消费者前来消费。
创建消费者
启动成功后,consumer的received方法,会收到一条来自mq的消息,
如果处理完成后,不调用chennel的basicack方法,那么这条消息依然会存在,下次有消费者出现,会再次推送给消费者。
简单的rabbitmq hello world到这里就算完成了。接下来就是稍微高级一点的应用
rabbitmq的工作模式
work queue 工作队列模式
工作队列模式的意思就是一个生产者对应多个消费者。rabbitmq会使用轮询去给每个消费者发送消息。
publish/subscribe
发布订阅模式是属于比较用多的一种。
发布订阅,是由交换机发布消息给多个队列。多个队列再对应多个消费者。
发布订阅模式对应的交换机类型的fanout。
消费者
a
b
生产者
在生产者运行成功后,rabbitmq后台会出现一个交换机,点击交换机会看到交换机下绑定了两个队列
从生产者发送消息到队列,两个消费者会同时收到消息
routing模式
routing模式对应的交换机类型是direct,和发布订阅模式的区别在于:routing模式下,可以指定一个routingkey,用于区分消息
生产者
消费者 a
消费者 b
绑定成功后,发送消息,消费者a可以收到消息,消费者b无法收到消息。
如果遇到指定routingkey生产一条消息,结果 ab消费者都收到的情况。建议在rabbitmq后台的交换机下看一下绑定的queue是否重复绑定了多个routingkey.
topic通配符模式
在通配符模式下,rabbitmq使用模糊匹配来决定把消息推送给哪个生产者。通配符有两个符号来匹配routingkey
1.*匹配一个字符 如:*.qq.com 可匹配 1.qq.com
2.#匹配一个或者多个字符。 如:*.qq.com 可匹配 1.qq.com或者1111.qq.com
其他的操作基本和routing模式一样。
header模式
header模式是把routingkey放到header中.取消掉了routingkey。并使用一个字典传递 k、v的方式来匹配。
比如同时要给用户发送邮件和短信,可直接通过header的键值对来匹配绑定的值,把消息传递给发短信和邮件的生产者.
以上就是如何用.netcore操作rabbitmq的详细内容,更多关于.netcore 操作rabbitmq的资料请关注其它相关文章!