以前在项目中有使用过消息队列,但是对其知识不理解,仅仅知道往队列里生产数据,然后消费数据。对其原理无从所知。
最近有个地方需要用到消息队列,需要自己配置使用。发现自己没有什么技术积累,每次都是去百度复制粘贴。写这个文章做个学习和积累。
什么是消息队列?
我对原理什么的了解的不太清楚,给大家举个例子吧。
现在有个工厂的桌面程序,我需要针对这个桌面程序进行远程更新操作。而这个远程更新是没有办法用启动来检测更新的(采集程序一直运行)。我要通过配置软件进行对这个程序进行远程更新。想过办法,每天定时检测?感觉不怎么好。
现在我需要点击配置程序进行通知采集程序需要更新了,我通过什么通知采集软件呢?就使用消息队列。
大概流程就是这样(新手请多多见谅)。
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
网友评论