RabbitMQ是一个消息中转站,最大的特点是多平台知支持,多语言支持,支持集群。
多平台比较好理解,它可以部署到Linux、Windows、Windows Server、macOS等等平台系统,市面上几乎所有的操作系统都可以安装。
多语言也容易理解,它支持多种语言进行接口开发,比如Python、Java、Ruby、PHP、C#等。
支持集群,目前很多技术都支持集群,在保证系统稳定的情况下,可以拓展服务器数量以保证信息处理效率提升;
特点:
官网 https://rabbitmq.com/install-windows.html
或者在github也可以下载
https://github.com/rabbitmq/rabbitmq-server/releases
我们以官网下载为例,下载RabbitMQ安装包之后还要下载Erlang。RabbitMQ是用Erlang写的,所以安装的时候也要安装Erlang,这个是RabbitMQ的运行环境。
实际上RabbitMQ和Erlang还有版本兼容的问题,这边不用担心,两个直接下载最新的就没问题。
如果想了解一下详细情况,可以点击下面的链接进去看:
首先,先安装环境Erlang:
大部分点都会要求安装VC++,我们默认安装即可
安装完成之后会提示重新启动,点确定
接下来等待安装完成
安装完成之后需要设置环境变量。右键此电脑 - 属性 - 高级系统设置 -高级- 环境变量
安装目录一般是 C:\Program Files\Erlang OTP\bin
找到安装目录,一般是C:\Program Files\RabbitMQ Server\rabbitmq_server-3.11.9\sbin
在路径上输入cmd,或者直接打开cmd,输入cd C:\Program Files\RabbitMQ Server\rabbitmq_server-3.11.9\sbin
总之就是将CMD定位到这个文件夹
输入abbitmq-plugins enable rabbitmq_management,启用插件
快捷键 Ctrl+Shift+Esc,找到rabbitmq服务右键重新启动。
系统重启
不要用IE 用谷歌浏览器或者其他谷歌内核的浏览器 输入localhost:15672,访问RabbitMQ。出现以下界面就算安装成功:
guest/guest登录
接口信息地址:http://localhost/api/index.html
显示所有用户:rabbitmqctl list_users
查看状态:rabbitmqctl status。这里经常会有报错,看下面的方法
出错的原因是cookie冲突,只要替换一下就OK:
C:\Windows\System32\config\systemprofile.erlang.cookie
C:\Users\Administrator.erlang.cookie
把 RabbitMQ Service 的 Cookie 文件复制覆盖到用户的 Cookie 。或者停止 RabbitMQ Service,手动运行 rabbitmq-server.bat也能解决这个问题。
再次查看状态:
添加用户,实际上添加用户也可以在网页上面操作,更加直观
目前只有一个用户 guest,并且它的 tag 是 administrator.
可以用命令创建一个用户,创建用户的命令格式是:
rabbitmqctl add_user [username] [password]
现在创建一个 rabbit1/rabbit1 的用户, 命令如下:
rabbitmqctl add_user rabbit1 rabbit1
给用户设置tag,命令格式如下
rabbitmqctl set_user_tag [tag1] [tag2] …
一次可以给一个用户设置多个 tag,也可以设置一个
rabbitmgctl set user tags rabbit1 administrator none
实际上大部分的草走都可以在网页上完成,命令不是唯一方式。
/static void Main(string[] args)
{
var factory = new ConnectionFactory()
{
HostName = "xxx.xxx.xxx.xxx",//这里写实际地址 本地的写localhost
UserName = "rabbit1",
Password = "rabbit1",
//Port = AmqpTcpEndpoint.UseDefaultPort,
//VirtualHost = "/",
};
using (var connection = factory.CreateConnection())
using (var channel = connection.CreateModel())
{
channel.QueueDeclare(queue: "hello",
durable: false,
exclusive: false,
autoDelete: false,
arguments: null);
var consumer = new EventingBasicConsumer(channel);
consumer.Received += (model, ea) =>
{
var body = ea.Body;
var message = Encoding.UTF8.GetString(body.ToArray());
Console.WriteLine(" [x] Received {0}", message);
};
channel.BasicConsume(queue: "hello",
autoAck: true,
consumer: consumer);
Console.WriteLine(" Press [enter] to exit.");
Console.ReadLine();
}
}
同理,也建立一个client控制台项目,代码如下:
static void Main(string[] args)
{
var factory = new ConnectionFactory()
{
HostName = "10.0.12.180",
UserName = "rabbit1",
Password = "rabbit1",
//Port = AmqpTcpEndpoint.UseDefaultPort,
//VirtualHost = "/",
};
using (var connection = factory.CreateConnection())
using (var channel = connection.CreateModel())
{
channel.QueueDeclare(queue: "hello",
durable: false,
exclusive: false,
autoDelete: false,
arguments: null);
while (true)
{
var input = Console.ReadLine();
string message = input;
var body = Encoding.UTF8.GetBytes(message);
channel.BasicPublish(exchange: "",
routingKey: "hello",
basicProperties: null,
body: body);
Console.WriteLine(" [x] Sent {0}", message);
}
}
Console.WriteLine(" Press [enter] to exit.");
Console.ReadLine();
}
这里要对rabbit1做一个调整,允许其可以访问虚拟host,命令如下
rabbitmqctl set_permissions -p / rabbit1 “." ".” “.*”