zoukankan      html  css  js  c++  java
  • 记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());
    
                        }
                    }
                }
  • 相关阅读:
    A Node Influence Based Label Propagation Algorithm for Community detection in networks 文章算法实现的疑问
    Fast Newman-FN算法以及模块度定义介绍
    Label Propagation Algorithm LPA 标签传播算法解析及matlab代码实现
    设计一个smartnic
    Intel GEN11 GPU
    Intel GEN9 GPU
    Shared Virtual Memory (SVM) Functions
    connect via ssh to virtualbox guest vm without knowing ip address
    smartnic
    技术精品翻译
  • 原文地址:https://www.cnblogs.com/aiwuziji/p/5313168.html
Copyright © 2011-2022 走看看