C#调用RabbitMQ实现消息队列 - 安装
前言
我在刚接触使用中间件的时候,发现,中间件的使用并不是最难的,反而是中间件的下载,安装,配置才是最难的。
所以,这篇文章我们从头开始学习RabbitMq,真正的从头开始。
关于消息队列
其实消息队列没有那么神秘,我们这样想一下,用户访问网站,最终是要将数据以HTTP的协议的方式,通过网络传输到主机的某个端口上的。
那么,接收数据的方式是什么呢?自然是端口监听啦。
那消息队列是什么就很好解释了?
它就是端口监听,接到数据后,将数据排列起来。
那这件事,我们不用中间件能做吗?
当然能做啦,写个TCP/UDP/Socket的软件就可以做啦。
举个简单的例子,如下图:
既然自己可以做消息队列,那为什么要用RabbitMQ?
因为,RabbitMQ成熟的开源中间件,可靠性有保证,bug少,性能也非常好。
而C#代码默认是使用托管内存的,所以,想写出媲美RabbitMQ性能的消息队列,就必须离开我们常用的托管内存,使用非托管内存,但这个代价就太大了;而且最终能否达到RabbitMQ的性能水平还是个未知数。
还有就是RabbitMQ除了基础的消息队列管理,还有很多很强大的额外功能,而自己开发消息队列,很难如此尽善尽美。
----------------------------------------------------------------------------------------------------
我们还会发现,在消息队列里有很多概念,什么消息总线啊,什么工作队列啊等等。
要怎么理解这些概念呢?
很简单,不要去理解。这些概念其实是人家代码架构的模式,不要去理解他们,【记】就完了,人家的中间件就是按照这个模式工作的。
比如,我写了一个接收消息的总控制器,然后我为他命名为总线,那这个控制器就是总线,没有理由,这就是定义。
安装
首先,我们访问官网【https://www.rabbitmq.com/】,点击Get Started。
然后,网站会自动跳转到当前首页Get Started的锚点位置,如下图:
Get Started锚点:
然后我们点击DownLoad+Installation,进入到下载界面。
在下载页面中,我们找到安装指南,然后在点击官网推荐的Windows系统的安装包,如下图:
现在,我们进入了Windows安装指南界面了。
首先,我们看一下预览信息,如下图:
在预览里,我们得知,安装RabbitMQ有两种方法,一种是使用Chocolatey安装,一种是使用官方安装包安装。
Chocolatey是什么呢?随手百度一下,原来他是一个软件包管理工具,也就是说,Chocolatey是类似于Nuget的一种工具。
由于Chocolatey的使用,我不是很熟悉,所以,这里选择使用官方安装包安装。
点击【Using the official installer】,我们进入了【Using the official installer】对应的锚点,如下图。
在【Using the official installer】段落里找到有推荐标志的安装包,然后下载。
下载完成后,我们可以得到这样一个安装包,如下图:
除了下载安装包,我们还会发现,在【Using the official installer】段落里,有提醒我们,RabbitMQ是有依赖的,依赖一个Erlang语言的框架(类似于C#语言的NetFramework)。
我们可以发现,在依赖的段落里,官网非常坑的给出了三个链接网址,如下:
supported version of Erlang:https://www.rabbitmq.com/which-erlang.html
Windows installer:https://www.erlang.org/downloads
Erlang Solutions:https://www.erlang-solutions.com/resources/download.html
因为,我们是无法通过文字描述来判断,哪一个是真的依赖框架的下载地址,所以只好每个都点击进去看看。。。
打开网址后发现,在后两个网址中都可以找到框架下载地址,但第二个地址明显更友好一点,所以我们在第二个网址内下载Erlang的框架。
下载完成得到如下图文件:
PS:这里下载的是OTP的22.1的版本,我的理解是Erlang等于C#语言,而OTP等于NetFramework。
安装Erlang\OTP
首先,我们运行otp_win64_22.1.exe,安装依赖框架Erlang\OTP。
安装完成后,设置环境变量如下:
然后运行CMD,输入erl,测试安装是否成功,如下图:
安装成功。
安装rabbitmq-server
安装完依赖后,我们接着安装rabbitmq-server-3.8.0.exe。
【rabbitmq-server-3.8.0.exe】?从这个文件名上,我们发现了一个问题,那就是,我们即将安装的RabbitMQ,是一个服务端啊。
什么?服务端?难道还有客户端???
其实这也很好理解,想一下最开始我举的那个例子,消息队列是需要一个监听端口的服务端的,然后客户端向这个服务端发送请求。
这样是不是就很好的理解RabbitMQ了呢:)
----------------------------------------------------------------------------------------------------
安装完RabbitMQ服务端后,我们还是启动CMD,用命令行来查看下安装状态。
首先输入下面的命令,将路径定位到RabbitMQ的路径下:
【CD /D C:\Program Files\RabbitMQ Server\rabbitmq_server-3.8.0\sbin】
然后输入rabbitmqctl status查看状态。
这个时候会出现unable to perform an operation no node 'rabbit@wangbobe'的报错
解决方式参考:https://blog.csdn.net/seven_coder/article/details/79091934
解决完问题后再次执行rabbitmqctl status,结果如下图
启动管理工具的命令行:rabbitmq-plugins enable rabbitmq_management。
启动成功后,在浏览器输入地址http://127.0.0.1:15672/,进入管理页面,账户密码都是guest。
RabbitMQ还有很多常用命令,大家可以自行百度。
----------------------------------------------------------------------------------------------------
到此,RabbitMQ服务端的环境配置好了,正常情况,这些配置应该在服务器进行,但是guest账号默认是不支持远程连接的,我们需要新建一个账户用于远程连接。
创建用户
在服务器端打开浏览器,输入http://127.0.0.1:15672/,进入管理页面。
点击菜单栏的Admin选项,进入用户管理界面创建用户kiba,密码123456,如下图:
创建完用户后,得到如下界面。
如上图所示,刚刚创建的用户还没有任何访问权限。
现在我们点击用户名,进入权限管理页面设置权限。
如上图所示,页面默认为我们设置了一个可读,可写,可管理配置的权限;所以,我们只要点击Set premission就可以了。
设置完权限,我们回到用户管理页面。
如上图所示,权限设置成功。