首页 > 其他分享 >它把RabbitMQ的复杂全屏蔽了,我朋友用它后被老板一夜提拔为.NET架构师

它把RabbitMQ的复杂全屏蔽了,我朋友用它后被老板一夜提拔为.NET架构师

时间:2023-04-04 11:59:36浏览次数:50  
标签:aa string RabbitMQ SendMessage 消息 架构师 NET

它把RabbitMQ的复杂全屏蔽了,我朋友用它后被老板一夜提拔为.NET架构师

 

本文技术源自外企,并已在多个世界500强大型项目开发中运用。

本文适合有初/中级.NET知识的同学阅读。(支持.NET/.NET Framework/.NET Core)

 

RabbitMQ作为一款主流的消息队列工具早已广受欢迎。相比于其它的MQ工具,RabbitMQ支持的语言更多、功能更完善。

 

本文提供一种市面上最/极简单的使用RabbitMQ的方式,只需要会调用以下三个方法,你就几乎可以掌握整个RabbitMQ的使用:

(1)     SendMessage,发送一个消息

(2)     GetMessage,获取一个消息

(3)     UseMessage,使用一个消息(连续使用)

 

为了调用以上三个方法,首先需要从nuget引用DeveloperSharp.RabbitMQ,并在App.config/Web.config里面添加如下配置(.NET6 / VS2022中已有App.config这个添加单项):

  <appSettings>
    <add key="RabbitMQConnectionString" value="hostName=135.208.12.236,port=5672,userName=sa,password=aevin.gang" />
  </appSettings>

说明:上述配置中分别设置了RabbitMQ应用所在的服务器IP地址hostName、端口port、用户名userName、密码password(请把这四项的对应值修改成你自己那边的RabbitMQ的对应值)

 

下面,我们给出一个使用了上述SendMessage、GetMessage、UseMessage三个方法的示例。该示例的功能说明如下:

  • 先向RabbitMQ服务器上名为“aa”的队列发送了5个消息,
  • 然后从RabbitMQ服务器上的“aa”队列中获取,并打印出第1个消息,
  • 最后再连续从RabbitMQ服务器上的“aa”队列中获取剩余4个消息,并把它们写入名为fj.txt的文件。

代码如下:

复制代码
using DeveloperSharp.RabbitMQ;
--------------------------

        static void Main(string[] args)
        {
            //发送5个消息(使用SendMessage)
            RabbitMQHelper.SendMessage("aa", "世界1,你好!");
            RabbitMQHelper.SendMessage("aa", "世界2,你好!");
            RabbitMQHelper.SendMessage("aa", "世界3,你好!");
            RabbitMQHelper.SendMessage("aa", "世界4,你好!");
            RabbitMQHelper.SendMessage("aa", "世界5,你好!");

            //获取1个消息(使用GetMessage)
            string OneMessage = RabbitMQHelper.GetMessage("aa").Message;
            Console.WriteLine(OneMessage);

            //向fj.txt这个文本文件中写入4个消息(使用UseMessage)
            RabbitMQHelper.UseMessage("aa", t => 
            {
                System.IO.File.AppendAllText("D:/fj.txt", t.Message);
                return true;
            });
        }
复制代码

运行结果如下:

【控制台显示出】:世界1,你好!

【fj.txt文件中显示出】:世界2,你好!世界3,你好!世界4,你好!世界5,你好!

 

三个方法的详细功能说明(辅助参考):

复制代码
(1)发送一个消息
void SendMessage(string QueueName, string Message, Dictionary<string, object> Header = null)

(2)获取一个消息
RabbitMQMessage GetMessage(string QueueName)

(3)使用一个消息(连续使用)
void UseMessage(string QueueName, Func<RabbitMQMessage, bool?> Use)
附加说明:
    (I)Use返回值为true时,代表当前消息已被有效处理并会被服务器删除。然后程序自动进入下一条消息的使用。
         若Use返回值为false时,代表当前消息未被有效处理但仍会被服务器删除。然后程序自动进入下一条消息的使用。
         若Use返回值为null时,代表当前消息会被服务器重新队列分配到其它可用的实例上再处理。然后程序自动进入下一条消息的使用。
         若Use内部发生未被处理的异常,程序会停止。
    (II)RabbitMQMessage对象定义如下:
          public class RabbitMQMessage
          {
             public string Message;
             public IDictionary<string, object> Header;
             public string Id; //此处系统自动生成的Id具有UUID的特性。
          }
    (III)RabbitMQMessage.Header字典中,实际值为string类型的object值,需要通过字节转换才能变为字符串。
           例如:Encoding.UTF8.GetString((byte[])p.Header["Content"])
复制代码

最后说明一点:一旦调用三个方法,会与RabbitMQ服务器建立“长链接”。若要结束“长链接”,可在“任务管理器”中杀死进程。

 

使用消息服务对解耦分布式系统、实现发布/订阅、提高系统性能、等方面都有巨大用处,相信本文会扩展你的思维认知,让你在相关技术解决方案上有更多灵活思路+联想空间!

标签:aa,string,RabbitMQ,SendMessage,消息,架构师,NET
From: https://www.cnblogs.com/sexintercourse/p/17285918.html

相关文章

  • 一个非常简单用.NET操作RabbitMQ的方法
    一个非常简单用.NET操作RabbitMQ的方法 RabbitMQ作为一款主流的消息队列工具早已广受欢迎。相比于其它的MQ工具,RabbitMQ支持的语言更多、功能更完善。 本文提供一种市面上最/极简单的使用RabbitMQ的方式(支持.NET/.NETFramework/.NETCore),只需要会调用以下三个方法,你就几......
  • 高效简单的.Net数据库“访问+操作”技术
    高效简单的.Net数据库“访问+操作”技术 本文技术源自外企,并已在多个世界500强大型项目开发中运用。本文适合有初步C#、Linq、Sql知识的同学阅读。 相关技术在IDataAccess接口中提供。IDataAccess所在的命名空间是:DeveloperSharp.Framework.QueryEngine。(需事先从nuget......
  • 【云计算】云计算架构师ACE成长路线
    1、缘由之前寒假突然喜欢上服务器,一堆各种折腾,到处看资料。然后某次无意间看到了这篇文章,了解之下发现了行情。https://zhuanlan.zhihu.com/p/65661951自此生起了一种想要系统学习的冲动,这是继ACM(NOIP,PAT),CTF,之后的第三个大坑吧。至于传说中的AI,虽然一直嚷嚷着要学,也写过一些代码......
  • 计网学习笔记六 Network Layer Overview
    这节课开始进入了网络层的学习,讲述了网络层提供的功能,还有路由器内部是什么样子的,以及virtualcircuit网络和datagram网络的一点比较。网络层有什么作用呢?用一句话来说,就是需要负责将传输层的报文段从发送端传输到接收端。再详细一点点就是:在发送方将传输层传下来的数据报文......
  • .NET周报 【4月第1期 2023-04-02】
    国内文章探索SK示例--GitHub存储库中的机器人https://www.cnblogs.com/shanyou/p/17280627.html微软3月22日一篇文章“Semantic-kernel嵌入和记忆:使用聊天UI探索GitHubRepos”[1],文章中进行了展示了嵌入,该文章解释了他们如何帮助开发人员提出有关GitHub存储库的问题......
  • 3、kubernetes各种port
    K8s中nodePort、port、targetPort、hostPort介绍1、nodeport外部流量访问k8s集群中service入口的一个方式(还有一种是loadbalancer)nodeIP:nodePort提供给外部流量访问k8s集群中service一个入口比如外部用户要访问k8s集群中的一个Web应用,那么我们可以配置对应service的type=Nod......
  • [重读经典论文]ResNet
    1.前言ResNet由微软亚洲研究院在论文《DeepResidualLearningforImageRecognition》中提出,获得2015年ImageNet图像分类、定位、检测,MSCOCO竞赛检测、分割五条赛道的冠军,通过引入残差连接,有效解决深层网络训练时的退化问题,可以通过加深网络大大提升性能。ResNet在ILSVRC-20......
  • 2、kubernetes资源管理
    四、资源管理介绍k8s本质上是一个集群系统,用户可以在集群中部署各种服务,部署服务(其实就是在k8s集群中运行一个个容器,并将指定的程序跑在容器中)k8s的最小管理单元是pod不是容器,所以只能将容器放在pod中,而k8s一般不会直接管理pod,而是通过pod控制器来管理的pod的pod可以提供服务之......
  • RabbitMQ 08 路由模式
    路由模式路由模式结构图:定义配置类。importorg.springframework.amqp.core.Binding;importorg.springframework.amqp.core.BindingBuilder;importorg.springframework.amqp.core.Exchange;importorg.springframework.amqp.core.ExchangeBuilder;importorg.springfr......
  • 1h玩转kubernetes
    学习k8s就跟学习office三件套上,95%的人只会5%,而5%的知识可以干95%的事情,所以不要觉的k8s难1kubernetes1什么是kubernetesKubernetes是一个可移植、可扩展的开源平台,一个分布式资源调度进行容器编排云原生的操作系统,用于管理容器化的工作负载和服务,可促进声明式配置和自动化......