返回顶部
首页 > 资讯 > 精选 >怎么使用.NETCore操作RabbitMQ
  • 154
分享到

怎么使用.NETCore操作RabbitMQ

2023-06-15 01:06:04 154人浏览 泡泡鱼
摘要

这篇文章将为大家详细讲解有关怎么使用.netcore操作RabbitMQ,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。什么是RabbitMQ?RabbitMQ是由erlang语言开发的一个基于AMQP(A

这篇文章将为大家详细讲解有关怎么使用.netcore操作RabbitMQ,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

什么是RabbitMQ

怎么使用.NETCore操作RabbitMQ

RabbitMQ是由erlang语言开发的一个基于AMQP(Advanced Message Queuing Protocol)协议的企业级消息队列中间件。可实现队列,订阅/发布,路由,通配符等工作模式。

为什么要使用RabbitMQ?

  • 异步处理:比如发送邮件,发送短信等不需要等待处理结果的操作

  • 应用解耦:比如下单成功后,通知仓库发货,不需要等待仓库回应,通过消息队列去通知仓库,降低应用间耦合程序,可并行开发两个功能模块

  • 流量削锋:在抢购或者其他的活动页,服务处于爆发式请求状态,如果直连数据库数据库容易被拖垮。抢购商品也容易出现库存超卖的情况。通过队列可有效解决该问题。

  • 日志处理:在单机中,日志直接写入到文件目录中,但是在分布式应用中,日志需要有统一的处理机制,可通过消息队列统一由某个消费端做处理。

  • 消息通信:如生产端和消费端可通过队列进行异步通信

如何安装RabbitMQ?

windows

安装erlang语言运行环境
https://erlang.org/download/otp_win64_23.2.exe
下载后直接下一步即可

安装RabbitMQ
Https://www.rabbitmq.com/install-windows.html
直接点击安装下一步即可按章

安装RabbitMQ的WEB管理平台

RabbitMQ的管理平台是通过插件的形式使用,需要手动启用管理平台
在Windows下,RabbitMQ默认被安装到C:\Program Files\RabbitMQ Server\rabbitmq_server-3.8.14 下。
打开sbin ,在cmd或者powershell中执行

rabbitmq-plugins.bat enable rabbitmq_management

安装完成后,浏览器打开 http://localhost:15672/ 即可看到RabbitMQ的管理界面。输入默认账号密码 guest 成功登录。

linux环境安装

ubuntu:https://www.rabbitmq.com/install-debian.html

Centos:https://www.rabbitmq.com/install-rpm.html

RabbitMQ的基本概念

生产者

发送消息的端

消费者

获取消息并处理的端

Connection

一个终端连接。每一个Connection都可以在RabbitMQ后台看到

怎么使用.NETCore操作RabbitMQ

Channel

Channel是建立在Connection上的一个虚拟通信管道。一般情况下,往消息队列中写入多条消息,为了不每条消息都建立一个tcp连接,所以RabbitMQ的做法是多条消息可以公用一个Connection,大大提高MQ的负载能力。

Exchange

Exchange是一个虚拟交换机。每一条消息都必须要通过交换机才能能进入对应的队列,可以理解为网络设备中的交换机,是一个意思。

Queue

Queue是一个存储消息的内部对象,所有的Rabbit MQ消息都存储在Queue中。生产者所生产的消息会存储在Queue中,消费者获取的消息也是从Queue中获取。

如何在.net core中使用RabbitMQ?

nuget安装

dotnet add package RabbitMQ.Client

创建生产者

const string QUEUENAME = "HELLO_MQ";//创建连接对象工厂var factory = new ConnectionFactory(){    UserName = "guest",    PassWord = "guest",    HostName = "localhost",    Port = 5672,  //RabbitMQ默认的端口};while (true){    using var conn = factory.CreateConnection();    var chanel = conn.CreateModel();    chanel.QueueDeclare(QUEUENAME, true, false, false);    Console.WriteLine("输入生产内容:");    var input = Console.ReadLine();    chanel.BasicPublish("", QUEUENAME, null, Encoding.Default.GetBytes("hello rabbitmq:" + input));}

在循环中,输入一个值,按下enter,即可推送一条消息到队列。

也可以直接在RabbitMQ的管理后台查看

怎么使用.NETCore操作RabbitMQ

怎么使用.NETCore操作RabbitMQ

怎么使用.NETCore操作RabbitMQ

可以看到我们发送的消息已经被RabbitMQ存储在Queue中了。只等某个幸运的消费者前来消费。

创建消费者

const string QUEUENAME = "HELLO_MQ";var factory = new ConnectionFactory(){    UserName = "guest",    Password = "guest",    HostName = "localhost",    Port = 5672,};var conn = factory.CreateConnection();var chanel = conn.CreateModel();chanel.QueueDeclare(QUEUENAME, true, false, false);EventingBasicConsumer consumer = new EventingBasicConsumer(chanel);consumer.Received += (a, e) =>{    Console.WriteLine($"{DateTime.Now.ToString()}接收到消息:" + Encoding.Default.GetString(e.Body.ToArray()));    chanel.BasicAck(e.DeliveryTag, true); //收到回复后,RabbitMQ会直接在队列中删除这条消息};chanel.BasicConsume(QUEUENAME, false, consumer);Console.WriteLine("启动成功");Console.ReadLine();

启动成功后,consumer的Received方法,会收到一条来自MQ的消息,

怎么使用.NETCore操作RabbitMQ

如果处理完成后,不调用chennel的BasicAck方法,那么这条消息依然会存在,下次有消费者出现,会再次推送给消费者。

简单的RabbitMQ Hello World到这里就算完成了。接下来就是稍微高级一点的应用

RabbitMQ的工作模式

Work Queue 工作队列模式

怎么使用.NETCore操作RabbitMQ

工作队列模式的意思就是一个生产者对应多个消费者。RabbitMQ会使用轮询去给每个消费者发送消息。

publish/subscribe

发布订阅模式是属于比较用多的一种。

怎么使用.NETCore操作RabbitMQ

发布订阅,是由交换机发布消息给多个队列。多个队列再对应多个消费者。

发布订阅模式对应的交换机类型的fanout。

消费者

A

const string QUEUENAME = "HELLO_MQ_B";const string TESTEXCHANGE = "TESTEXCHANGE";var factory = new ConnectionFactory(){    UserName = "guest",    Password = "guest",    HostName = "localhost",    Port = 5672,};var conn = factory.CreateConnection();var channel = conn.CreateModel();//定义队列channel.QueueDeclare(QUEUENAME, true, false, false);//定义交换机channel.ExchangeDeclare(TESTEXCHANGE, ExchangeType.Fanout, true, false);//绑定队列到交换机channel.QueueBind(QUEUENAME, TESTEXCHANGE, "");var consumer = new EventingBasicConsumer(channel);consumer.Received += (a, e) =>{    Console.WriteLine($"{DateTime.Now.ToString()}接收到消息:" + Encoding.Default.GetString(e.Body.ToArray()));    channel.BasicAck(e.DeliveryTag, true); //收到回复后,RabbitMQ会直接在队列中删除这条消息};channel.BasicConsume(QUEUENAME, false, consumer);Console.WriteLine("启动成功");Console.ReadLine();

B

const string QUEUENAME = "HELLO_MQ";const string TESTEXCHANGE = "TESTEXCHANGE";var factory = new ConnectionFactory(){    UserName = "guest",    Password = "guest",    HostName = "localhost",    Port = 5672,};var conn = factory.CreateConnection();var channel = conn.CreateModel();//定义队列channel.QueueDeclare(QUEUENAME, true, false, false);//定义交换机channel.ExchangeDeclare(TESTEXCHANGE, ExchangeType.Fanout, true, false);//绑定队列到交换机channel.QueueBind(QUEUENAME, TESTEXCHANGE, "");var consumer = new EventingBasicConsumer(channel);consumer.Received += (a, e) =>{    Console.WriteLine($"{DateTime.Now.ToString()}接收到消息:" + Encoding.Default.GetString(e.Body.ToArray()));    channel.BasicAck(e.DeliveryTag, true); //收到回复后,RabbitMQ会直接在队列中删除这条消息};channel.BasicConsume(QUEUENAME, false, consumer);Console.WriteLine("启动成功");Console.ReadLine();

生产者

const string QUEUENAME = "HELLO_MQ";const string QUEUENAME_B = "HELLO_MQ_B";const string TESTEXCHANGE = "TESTEXCHANGE";//创建连接对象工厂var factory = new ConnectionFactory(){    UserName = "guest",    Password = "guest",    HostName = "localhost",    Port = 5672,  //RabbitMQ默认的端口};using var conn = factory.CreateConnection();while (true){    var channel = conn.CreateModel();    //定义交换机    channel.ExchangeDeclare(TESTEXCHANGE, ExchangeType.Fanout, true, false);    Console.WriteLine("输入生产内容:");    var input = Console.ReadLine();    channel.BasicPublish(TESTEXCHANGE,"", null, Encoding.Default.GetBytes("hello rabbitmq:" + input));}

在生产者运行成功后,RabbitMQ后台会出现一个交换机,点击交换机会看到交换机下绑定了两个队列

怎么使用.NETCore操作RabbitMQ

怎么使用.NETCore操作RabbitMQ

从生产者发送消息到队列,两个消费者会同时收到消息

怎么使用.NETCore操作RabbitMQ

routing模式

怎么使用.NETCore操作RabbitMQ

routing模式对应的交换机类型是direct,和发布订阅模式的区别在于:routing模式下,可以指定一个routingkey,用于区分消息

生产者

var channel = conn.CreateModel();//定义交换机channel.ExchangeDeclare(TESTEXCHANGE, ExchangeType.Direct, true, false);//绑定队列到交换机Console.WriteLine("输入生产内容:");var input = Console.ReadLine();channel.BasicPublish(TESTEXCHANGE, "INFO", null, Encoding.Default.GetBytes("hello rabbitmq:" + input));

消费者 A

//定义队列channel.QueueDeclare(QUEUENAME, true, false, false);//定义交换机channel.ExchangeDeclare(TESTEXCHANGE, ExchangeType.Direct, true, false);//绑定队列到交换机channel.QueueBind(QUEUENAME, TESTEXCHANGE, "INFO");

消费者 B

//定义队列channel.QueueDeclare(QUEUENAME, true, false, false);//定义交换机channel.ExchangeDeclare(TESTEXCHANGE, ExchangeType.Direct, true, false);//绑定队列到交换机channel.QueueBind(QUEUENAME, TESTEXCHANGE, "ERROR");

绑定成功后,发送消息,消费者A可以收到消息,消费者B无法收到消息。

如果遇到指定routingKey生产一条消息,结果 AB消费者都收到的情况。建议在RabbitMQ后台的交换机下看一下绑定的Queue是否重复绑定了多个routingKey.

怎么使用.NETCore操作RabbitMQ

topic通配符模式

怎么使用.NETCore操作RabbitMQ

在通配符模式下,RabbitMQ使用模糊匹配来决定把消息推送给哪个生产者。通配符有两个符号来匹配routingKey

*匹配一个字符 如:*.qq.com 可匹配 1.qq.com

#匹配一个或者多个字符。 如:*.qq.com 可匹配 1.qq.com或者1111.qq.com

其他的操作基本和routing模式一样。

header模式

header模式是把routingkey放到header中.取消掉了routingKey。并使用一个字典传递 K、V的方式来匹配。
比如同时要给用户发送邮件和短信,可直接通过header的键值对来匹配绑定的值,把消息传递给发短信和邮件的生产者.

关于“怎么使用.netcore操作RabbitMQ”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

--结束END--

本文标题: 怎么使用.NETCore操作RabbitMQ

本文链接: https://lsjlt.com/news/276258.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 怎么使用.NETCore操作RabbitMQ
    这篇文章将为大家详细讲解有关怎么使用.NETCore操作RabbitMQ,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。什么是RabbitMQ?RabbitMQ是由erlang语言开发的一个基于AMQP(A...
    99+
    2023-06-15
  • 如何用.NETCore操作RabbitMQ
    目录什么是RabbitMQ?为什么要使用RabbitMQ?如何安装RabbitMQ?Windows端Linux环境安装RabbitMQ的基本概念生产者消费者Conne...
    99+
    2024-04-02
  • python使用pika操作rabbitmq
    python 连接操作rabbitMQ 主要是使用pika库pip3 install pika==1.1.0 官方对于pika有如下介绍Since threads aren’t a...
    99+
    2023-01-31
    操作 python pika
  • .NETCore中RabbitMQ使用死信队列的实现
    在.NET Core中,可以使用RabbitMQ.Client库来实现与RabbitMQ的交互。 RabbitMQ死信队列(Dead Letter Queue)是一种用于存储和处理无...
    99+
    2023-05-14
    .NET Core RabbitMQ死信队列 .NET Core 死信队列
  • python操作RabbitMq的三种工作模式是什么
    这篇“python操作RabbitMq的三种工作模式是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“python操作Ra...
    99+
    2023-06-30
  • 怎么优雅的使用RabbitMQ
    本篇内容主要讲解“怎么优雅的使用RabbitMQ”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么优雅的使用RabbitMQ”吧! RabbitMQ无疑是目前...
    99+
    2024-04-02
  • rabbitmq怎么在springboot中使用
    rabbitmq怎么在springboot中使用?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。概述RabbitMQ是一个开源的消息代理和队列服务器,用来通过普通协议在完全不同的...
    99+
    2023-05-30
    springboot rabbitmq
  • 怎么使用Java操作Zookeeper
    这篇文章给大家分享的是有关怎么使用Java操作Zookeeper的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Java的优点是什么1. 简单,只需理解基本的概念,就可以编写适合于各种情况的应用程序;2. 面向对象...
    99+
    2023-06-14
  • 使用python3怎么操作excel
    使用python3怎么操作excel?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。python是什么意思Python是一种跨平台的、具有解释性、编译性、互动性和面向对象的脚本语...
    99+
    2023-06-14
  • 使用postman怎么操作ElasticSearch
    本篇内容主要讲解“使用postman怎么操作ElasticSearch”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“使用postman怎么操作ElasticSearch”吧!Postman背景介...
    99+
    2023-06-07
  • 怎么使用PHP操作Redis
    本篇内容主要讲解“怎么使用PHP操作Redis”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用PHP操作Redis”吧!redis 的基本操作方法1 redis 的连接 ://实例化red...
    99+
    2023-06-20
  • phpstorm怎么使用和操作
    使用和操作 PhpStorm 的步骤如下:1. 下载和安装 PhpStorm:前往 PhpStorm 官方网站下载 PhpStorm...
    99+
    2023-09-09
    phpstorm
  • 怎么使用Jquery操作Cookies
    本篇内容介绍了“怎么使用Jquery操作Cookies”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Cookies亦称Cookie,Cook...
    99+
    2023-06-30
  • Redis怎么与RabbitMQ结合使用
    Redis和RabbitMQ是两种不同的消息中间件,它们在功能和使用场景上有所不同。通常情况下,Redis用于缓存和数据存储,而Ra...
    99+
    2024-05-07
    Redis RabbitMQ
  • React怎么使用refs操作DOM
    本文小编为大家详细介绍“React怎么使用refs操作DOM”,内容详细,步骤清晰,细节处理妥当,希望这篇“React怎么使用refs操作DOM”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。在react框架 甚至...
    99+
    2023-07-04
  • 使用Kotlin怎么实现操作符与操作符重载
    这篇文章将为大家详细讲解有关使用Kotlin怎么实现操作符与操作符重载,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Kotlin基础教程之操作符与操作符重载Kotlin操作符的使用方法与其他...
    99+
    2023-05-31
    kotlin 操作符重载 操作符
  • JavaScript的typeof操作符怎么使用
    本篇内容介绍了“JavaScript的typeof操作符怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所...
    99+
    2024-04-02
  • 怎么使用JS中new操作符
    这篇文章主要讲解了“怎么使用JS中new操作符”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用JS中new操作符”吧!首先我们来看一下实例化一个对象做...
    99+
    2024-04-02
  • 使用Golang怎么操作数据库
    使用Golang怎么操作数据库?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。golang适合做什么golang可以做服务器端开发,但golang很适合做日志处理、数据打包、...
    99+
    2023-06-14
  • C#和ADO.NET的操作怎么使用
    本篇内容主要讲解“C#和ADO.NET的操作怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C#和ADO.NET的操作怎么使用”吧!C#和ADO.NET访问数据库是大多数应用程序的一部分,...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作