C#-RabbitMQ(1)

以前在项目中有使用过消息队列,但是对其知识不理解,仅仅知道往队列里生产数据,然后消费数据。对其原理无从所知。
最近有个地方需要用到消息队列,需要自己配置使用。发现自己没有什么技术积累,每次都是去百度复制粘贴。写这个文章做个学习和积累。

什么是消息队列?

我对原理什么的了解的不太清楚,给大家举个例子吧。
现在有个工厂的桌面程序,我需要针对这个桌面程序进行远程更新操作。而这个远程更新是没有办法用启动来检测更新的(采集程序一直运行)。我要通过配置软件进行对这个程序进行远程更新。想过办法,每天定时检测?感觉不怎么好。
现在我需要点击配置程序进行通知采集程序需要更新了,我通过什么通知采集软件呢?就使用消息队列。
大概流程就是这样(新手请多多见谅)。

RabbitMQ 的安装

安装我就不在一个一个截图了,首先需要安装Erlang,官网地址 [https://www.erlang.org/downloads](https://www.erlang.org/downloads
然后针对Erlang的版本下载对应的RabbitMQ的版本,RabbitMQ的下载地址https://www.rabbitmq.com/download.html
开启管理界面:运行下图Windows命令行:


输入:rabbitmq-plugins enable rabbitmq_management
回车运行; 打开浏览器输入网址:http://localhost:15672默认用户名密码:guset
RabbitMQ 的连接
首先配置连接,配置如下:(记着引用NuGet包:RabbitMQ.Client)

ConnectionFactory factory = new ConnectionFactory() 
            {
                HostName="localhost",//主机名,就是自己安装电脑的IP地址,我这里是自己的电脑
                Port=5672,//不设置的话,默认为5672
                UserName ="guest",//用户名,这个是默认的,可以修改
                Password="guest",//默认密码
            };

ConnectionFactory 中配置还有很多,这里就不一一解释。(我也不是很懂)

RabbitMQ 的简单使用


如上图所示:简单使用就是这么简单。
生产者生产数据到队列中,消费者监听队列,有数据就接收消费。
新建队列:自定义队列名称,点击Add queue


这里我添加了两个队列,server.gateway gateway.server 一个服务发,网关接收队列;一个网关发服务器接收队列。

接下来开始编码吧!

1.生产数据到队列中,这里我使用server.gateway队列。

 using (var connection = factory.CreateConnection())
            {
                using (var channel = connection.CreateModel())
                {
                    var message = "hello";//发送的消息
                    var body = Encoding.UTF8.GetBytes(message);//转换byte数组
                    channel.BasicPublish(exchange:"", routingKey: "server.gateway", null, body: body);
                    //没有交换机(exchange)可为空,没有设置routingKey的时候可使用系统默认的,就是队列名称。
                    Console.WriteLine("发送成功!");
                }
            }

如下图所示可以看到队列中新增一条数据:


2.消费者进行数据消息。

using (var connection = factory.CreateConnection())
            {
                using (var channel = connection.CreateModel())
                {
                    //定义消费者
                    var consumer = new EventingBasicConsumer(channel);
                    consumer.Received += Consumer_Received;
                    channel.BasicConsume("server.gateway",true, consumer);
                }
            }

这里我用了一个事件(Consumer_Received)来接收消息如下。

private static void Consumer_Received(object sender, BasicDeliverEventArgs e)
        {
            string str = Encoding.Unicode.GetString(e.Body.ToArray());
            Console.WriteLine("Consumer1:" + str);
        }

简单的消息队列就完成啦!
本文可以不太详细,基本的连接的就是这样。
下一篇介绍另一个队列,等我学习一下。
本人小白,如有不足请多多见谅,欢迎指点。
使用框架:.Net Core 3.1

你可能感兴趣的:(C#-RabbitMQ(1))