一、环境搭建
1.1、由于RabbitMQ是使用Erlang语言开发的,因此要安装Erlang运行时环境,下载地址:Erlang官网下载 CSDN分享下载
1.2、去RabbitMQ官网下载RabbitMQ Server服务端程序,选择合适的平台版本下载并安装。
RabbitMQ安装时,会自动在Windows服务中创建RabbitMQ服务,并自动启动。
1.3、开始->所有程序->RabbitMQ Server->RabbitMQ Command Prompt (sbin dir):
运行RabbitMQ Command Prompt与cmd下cd C:\Program Files\RabbitMQ Server\rabbitmq_server-3.8.3\sbin的效果是一样的。
1.3.1、sbin目录下的rabbitmqctl.bat,是用来查看和控制服务端状态的。运行rabbitmqctl status检查RabbitMQ状态:
1.3.3、RabbitMQ Server上面也有用户概念,使用rabbitmqctl list_users命令,可以看到目前的用户:
可以看到,现在只有一个名为gues角色为administratort的用户,这个是RabbitMQ默认为我们创建的,它有RabbitMQ的所有权限。一般情况下,我们需要新建一个自己的用户,并设置密码及授予权限,同时设置为管理员。操作方法如下:
rabbitmqctl add_user hello world
rabbitmqctl set_permissions hello ".*" ".*" ".*"
rabbitmqctl set_user_tags hello administrator
上面的第一命令添加了一个名为hello的用户并设置了密码world;第二条命令为用户hello分别授予对所有消息队列的配置、读和写的权限;第三条命令将用户hello设置为管理员。
现在我们可以将默认的guest用户删掉,使用下面的命令即可:
rabbitmqctl delete_user guest
如果要修改密码,可以使用下面的命令:
rabbitmqctl change_password {username} {newpassowrd}
二、管理界面
RabbitMQ还有一个管理界面,是以插件形式提供的,通过该界面可以查看RabbitMQ Server当前的状态。启用命令如下:
rabbitmq-plugins enable rabbitmq_management
现在,在浏览器中输入 http://server-name:15672/ 即可。
注:server-name为计算机名或IP地址,如果是本地的,直接用localhost即可。登录界面,使用我们之前创建的hello用户登录。
三、开始使用
在.NET中使用RabbitMQ需要下载RabbitMQ客户端程序集,下载解压后在bin下找到RabbitMQ.Client.dll,并添加引用到项目中。
3.1、Hello World
为了展示RabbitMQ的基本使用,我们发送一个HelloWorld消息,然后接收并处理。
3.1.1、创建一个名为Send的客户端控制台程序,用来将消息发送到RabbitMQ消息队列中,代码如下:
class Program { static void Main(string[] args) { #region Hello World //1.实例化连接工厂 var factory = new ConnectionFactory { HostName = "localhost", UserName = "hello", Password = "world" }; //2.建立连接 using (var connection = factory.CreateConnection()) { //3.建立信道 using (var channel = connection.CreateModel()) { //4.声明队列 channel.QueueDeclare(queue: "hello", durable: false, exclusive: false, autoDelete: false, arguments: null); //5.构建byte消息数据包 string message = args.Length > 0 ? args[0] : "Hello World"; var body = Encoding.UTF8.GetBytes(message); //消息是以二进制数组的形式传输的 //6.发送数据包 channel.BasicPublish(exchange: "", routingKey: "hello", basicProperties: null, body: body); Console.WriteLine($"Send {message}"); Console.Read(); } } #endregion } }