美文网首页
C#-RabbitMQ(1)

C#-RabbitMQ(1)

作者: MoveAbouts | 来源:发表于2021-05-10 22:08 被阅读0次

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

什么是消息队列?

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

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)

    以前在项目中有使用过消息队列,但是对其知识不理解,仅仅知道往队列里生产数据,然后消费数据。对其原理无从所知。最近有...

  • 1▪1▪1▪1▪1

    今天是国际劳动节,出门看人头,上路遇堵车,处处挤破头,急哭也停不下车。 不如歇了吧 ...

  • 1+1+1…+1=1

    对“一”的理解: 赠人玫瑰,不仅仅是手留余香。 利益他人,实际上也疗愈了自己。 利他、利己,如此往复循环, 最终利...

  • (-1)×(-1)= 1

    数学家经过很长一段时间才认识到(-1)×(-1)= 1是不能被证明的(即使大数学家欧拉曾给出不能令人信服的...

  • 1-2-1-1-1

    【下马请罪】 子龙下马,向张飞跪地请罪道:“张将军,一时失手……”话未停,便被张飞一矛刺了个透心凉。子龙堵着胸口汩...

  • 1 1:1 1(原创小说)

    闪回:那天她…… 当时,我确实听到了那个声音,可如今却怎么也记不清了。 掉下来了。 我觉得,那一刻...

  • 《1+1=1-1》

    十一月十一日晚,致X小姐。 十月初九, 一个人购物的孤独, 你谈起, 月光下轧过的马路, 金钱带不来满足, 忙忙碌...

  • 1+1=-1

    结婚育子这几年,在磕磕碰碰中一路走来,才恍然大悟,自己真正的成长,始于育儿。 婚前是父母的公主,虽说家境贫困,却得...

  • 1+1<1

    也许有人看到我的标题就会来质疑我,说我怎么连最简单的数学都不会。1+1=2>1啊,这么简单的算数题,我怎会不知?但...

  • 1+1=-1

    看到他人发表文章,我也有点手痒痒了~这是接着上回文章的下半部分,有点长,没人看到就好了︿︿ 这个第二件小事的主题就...

网友评论

      本文标题:C#-RabbitMQ(1)

      本文链接:https://www.haomeiwen.com/subject/fxdwdltx.html