• 记c# rabbitmq的使用


      本来项目中使用的是msmq,后来看到一篇文章,有人比较了一下几种消息队列的性能,rabbitmq的性能要高于msmq,并且相对成熟。于是准备把项目中的消息队列换一下。这里写篇文章只为记录rabbitmq的安装、配置以及使用。方便以后自己查看,也算是留个记录。

      安装

      在windows下面安装rabbitmq很简单,先到rabbitmq的官方网站http://www.rabbitmq.com/去下载最新版即可。安装过程中可能会提醒你安装Erlang,按照提示会跳转到对应的下载页面,下载进行安装就行了。这里基本上就是一路next就可以的,不过需要注意的是,在安装的时候需要使用管理员身份进行安装,否则rabbitmq的在线管理工具是无法启用的。

      配置

      装好之后还是有一个配置文件需要设置一下的,位置是在%HOMEPATH%AppDataRoamingRabbitMQ,你会看到下面已经有一个rabbitmq.config.example文件,不过还需要新建一个rabbitmq.config文件。配置内容可参考

    [
    {rabbit,
    [
    {loopback_users, [<<"guest">>]},
    {tcp_listeners, [{"127.0.0.1", 5672}]}

    ]}
    ].

    loopback_users:设置只能在与RabbitMq服务同一台机器上访问服务的用户。

    tcp_listeners:设置RabbitMQ监听的IP地址与端口。只监听局域网内网iP、修改默认端口,防止被入侵攻击。

    设置完后,别忘记了以下操作,否则配置不起作用。

    • 停止RabbitMQ服务;
    • 重新安装服务使配置生效:rabbitmq-service.bat install
    • 不过这样设置之后只能在本地访问消息队列,要想可以远程访问,还需要设置一下。设置方法为,

      新建立了一个系统用户rabbit(名称自己取),然后授予所有权限,使用下面的命令:

      rabbitmqctl add_user rabbit 123456
      rabbitmqctl set_user_tags rabbitadministrator
      rabbitmqctl set_permissions -p / rabbit ".*" ".*" ".*"

      以上命令要切换到rabbitmq的安装目录下的sbin路径,例如D:Program FilesRabbitMQ Server abbitmq_server-3.4.0sbin

    • 启动RabbitMQ服务;

      查看消息队列

      1、官方提供的一个web管理工具(rabbitmq_management)

           2、安装了Rabbitmq后,默认也安装了该管理工具,执行命令即可启动
                rabbitmq-plugins enable rabbitmq_management(先定位到rabbitmq安装目录)  
                
            3、启动后,直接在浏览器地址输入:http://localhost:15672/   账号密码都是:guest  
     
       代码示例
        
    var factory = new ConnectionFactory() { HostName = "192.168.5.199", UserName = "rabbit", Password = "123456" };
                using (var connection = factory.CreateConnection())
                {
                    //rabbitmq服务端
                    using (IModel channel = connection.CreateModel())
                    {
                        //在MQ上定义一个持久化队列,如果名称相同不会重复创建
                        channel.QueueDeclare("TestQueue", true, false, false, null);
    
                        //输入1,那如果接收一个消息,但是没有应答,则客户端不会收到下一个消息
                        channel.BasicQos(0, 1, false);
    
                        //在队列上定义一个消费者
                        var consumer = new QueueingBasicConsumer(channel);
                        //消费队列,并设置应答模式为程序主动应答
                        channel.BasicConsume("TestQueue", false, consumer);
    
                        while (true)
                        {
                            //阻塞函数,获取队列中的消息
                            var ea = (BasicDeliverEventArgs)consumer.Queue.Dequeue();
                            byte[] bytes = ea.Body;
                            string str = Encoding.UTF8.GetString(bytes);
                            var msg = JsonConvert.DeserializeObject<RequestMsg>(str);
                            Console.WriteLine("HandleMsg:" + msg.Name.ToString());
                            //回复确认
                            channel.BasicAck(ea.DeliveryTag, false);
                        }
                    }
    }
    var factory = new ConnectionFactory() { HostName = "192.168.5.199", UserName = "rabbit", Password = "123456" };
                    //rabbitmq客户端
                    using (var channel = connection.CreateModel())
                    {
                        channel.QueueDeclare("PosQueue", true, false, false, null);
                        while (true)
                        {
                            var requestMsg = new RequestMsg();
                            requestMsg.Name = string.Format("Name_{0}", "ccc");
                            requestMsg.Code = string.Format("Code_{0}", "eee");
                            string jsonStr = JsonConvert.SerializeObject(requestMsg);
                            byte[] bytes = Encoding.UTF8.GetBytes(jsonStr);
    
                            //设置消息持久化
                            IBasicProperties properties = channel.CreateBasicProperties();
                            properties.DeliveryMode = 2;
                            channel.BasicPublish("", "PosQueue", properties, bytes);
    
                            Console.WriteLine("消息已发送:" + requestMsg.ToString());
    
                        }
                    }
                }
  • 相关阅读:
    二维数组和最大字数组求取 2
    spring冲刺第七天
    spring冲刺第六天
    寻找水王
    spring冲刺第五天
    spring冲刺第四天
    spring冲刺第三天
    spring冲刺第二天
    大道至简读书笔记3
    spring冲刺第一天
  • 原文地址:https://www.cnblogs.com/aiwuziji/p/5313168.html
Copyright © 2020-2023  润新知