RabbitMQ在windows上安装部署&C#代码实现RabbitMQ通讯

RabbitMQ简介

RabbitMQ是一个消息中转站,最大的特点是多平台知支持,多语言支持,支持集群。
多平台比较好理解,它可以部署到Linux、Windows、Windows Server、macOS等等平台系统,市面上几乎所有的操作系统都可以安装。
多语言也容易理解,它支持多种语言进行接口开发,比如Python、Java、Ruby、PHP、C#等。
支持集群,目前很多技术都支持集群,在保证系统稳定的情况下,可以拓展服务器数量以保证信息处理效率提升;
特点:

  • 消息中间件
  • 重启可以缓存数据
  • 正常情况下,消息一直被存储在队列中,直到消费者消费为止
  • 消息有存活时间,到期就会变成死信,由死信交换机接收。而绑定死信交换机的队列则称为死信队列。
  • 服务间解耦,消费者宕机或者重启不影响,业务保存。
  • 实现异步通信。
  • 流量削峰,并发可控。

RabbitMQ安装

下载

官网 https://rabbitmq.com/install-windows.html
RabbitMQ在windows上安装部署&C#代码实现RabbitMQ通讯_第1张图片
或者在github也可以下载
https://github.com/rabbitmq/rabbitmq-server/releases

RabbitMQ在windows上安装部署&C#代码实现RabbitMQ通讯_第2张图片
我们以官网下载为例,下载RabbitMQ安装包之后还要下载Erlang。RabbitMQ是用Erlang写的,所以安装的时候也要安装Erlang,这个是RabbitMQ的运行环境。
RabbitMQ在windows上安装部署&C#代码实现RabbitMQ通讯_第3张图片

RabbitMQ在windows上安装部署&C#代码实现RabbitMQ通讯_第4张图片
实际上RabbitMQ和Erlang还有版本兼容的问题,这边不用担心,两个直接下载最新的就没问题。
如果想了解一下详细情况,可以点击下面的链接进去看:

RabbitMQ在windows上安装部署&C#代码实现RabbitMQ通讯_第5张图片

安装

首先,先安装环境Erlang:
RabbitMQ在windows上安装部署&C#代码实现RabbitMQ通讯_第6张图片
大部分点都会要求安装VC++,我们默认安装即可
RabbitMQ在windows上安装部署&C#代码实现RabbitMQ通讯_第7张图片
安装完成之后会提示重新启动,点确定
RabbitMQ在windows上安装部署&C#代码实现RabbitMQ通讯_第8张图片
接下来等待安装完成

RabbitMQ在windows上安装部署&C#代码实现RabbitMQ通讯_第9张图片

RabbitMQ在windows上安装部署&C#代码实现RabbitMQ通讯_第10张图片
安装完成之后需要设置环境变量。右键此电脑 - 属性 - 高级系统设置 -高级- 环境变量
RabbitMQ在windows上安装部署&C#代码实现RabbitMQ通讯_第11张图片

RabbitMQ在windows上安装部署&C#代码实现RabbitMQ通讯_第12张图片

安装目录一般是 C:\Program Files\Erlang OTP\bin

RabbitMQ在windows上安装部署&C#代码实现RabbitMQ通讯_第13张图片
添加完之后Erlang安装完毕,开始安装RabbitMQ

RabbitMQ在windows上安装部署&C#代码实现RabbitMQ通讯_第14张图片
都是默认下一步
RabbitMQ在windows上安装部署&C#代码实现RabbitMQ通讯_第15张图片

RabbitMQ在windows上安装部署&C#代码实现RabbitMQ通讯_第16张图片
找到安装目录,一般是C:\Program Files\RabbitMQ Server\rabbitmq_server-3.11.9\sbin
RabbitMQ在windows上安装部署&C#代码实现RabbitMQ通讯_第17张图片
在路径上输入cmd,或者直接打开cmd,输入cd C:\Program Files\RabbitMQ Server\rabbitmq_server-3.11.9\sbin
总之就是将CMD定位到这个文件夹
输入abbitmq-plugins enable rabbitmq_management,启用插件
RabbitMQ在windows上安装部署&C#代码实现RabbitMQ通讯_第18张图片

RabbitMQ在windows上安装部署&C#代码实现RabbitMQ通讯_第19张图片
快捷键 Ctrl+Shift+Esc,找到rabbitmq服务右键重新启动。

RabbitMQ在windows上安装部署&C#代码实现RabbitMQ通讯_第20张图片
系统重启
不要用IE 用谷歌浏览器或者其他谷歌内核的浏览器 输入localhost:15672,访问RabbitMQ。出现以下界面就算安装成功:
RabbitMQ在windows上安装部署&C#代码实现RabbitMQ通讯_第21张图片
guest/guest登录

RabbitMQ在windows上安装部署&C#代码实现RabbitMQ通讯_第22张图片
接口信息地址:http://localhost/api/index.html
RabbitMQ在windows上安装部署&C#代码实现RabbitMQ通讯_第23张图片
显示所有用户:rabbitmqctl list_users

RabbitMQ在windows上安装部署&C#代码实现RabbitMQ通讯_第24张图片
查看状态:rabbitmqctl status。这里经常会有报错,看下面的方法

RabbitMQ在windows上安装部署&C#代码实现RabbitMQ通讯_第25张图片
出错的原因是cookie冲突,只要替换一下就OK:
RabbitMQ在windows上安装部署&C#代码实现RabbitMQ通讯_第26张图片
C:\Windows\System32\config\systemprofile.erlang.cookie
C:\Users\Administrator.erlang.cookie
把 RabbitMQ Service 的 Cookie 文件复制覆盖到用户的 Cookie 。或者停止 RabbitMQ Service,手动运行 rabbitmq-server.bat也能解决这个问题。
再次查看状态:
RabbitMQ在windows上安装部署&C#代码实现RabbitMQ通讯_第27张图片
添加用户,实际上添加用户也可以在网页上面操作,更加直观
RabbitMQ在windows上安装部署&C#代码实现RabbitMQ通讯_第28张图片
目前只有一个用户 guest,并且它的 tag 是 administrator.
可以用命令创建一个用户,创建用户的命令格式是:
rabbitmqctl add_user [username] [password]
现在创建一个 rabbit1/rabbit1 的用户, 命令如下:
rabbitmqctl add_user rabbit1 rabbit1
RabbitMQ在windows上安装部署&C#代码实现RabbitMQ通讯_第29张图片
RabbitMQ在windows上安装部署&C#代码实现RabbitMQ通讯_第30张图片
给用户设置tag,命令格式如下
rabbitmqctl set_user_tag [tag1] [tag2] …
一次可以给一个用户设置多个 tag,也可以设置一个
rabbitmgctl set user tags rabbit1 administrator none
RabbitMQ在windows上安装部署&C#代码实现RabbitMQ通讯_第31张图片实际上大部分的草走都可以在网页上完成,命令不是唯一方式。

C#代码实现

创建一个控制台项目server,右键-管理nuget程序包
RabbitMQ在windows上安装部署&C#代码实现RabbitMQ通讯_第32张图片

RabbitMQ在windows上安装部署&C#代码实现RabbitMQ通讯_第33张图片

RabbitMQ在windows上安装部署&C#代码实现RabbitMQ通讯_第34张图片
server的代码如下

/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 “." ".” “.*”

RabbitMQ在windows上安装部署&C#代码实现RabbitMQ通讯_第35张图片
运行server和client,如下图所示,实现rabbitMQ通讯

RabbitMQ在windows上安装部署&C#代码实现RabbitMQ通讯_第36张图片
git代码:https://github.com/chenheze90/Leaning06_RabbitMQ

你可能感兴趣的:(rabbitmq,c#)