• RabbitMQ的基本使用到高级特性


    简介

    继上一篇 CentOS上安装RabbitMQ讲述RabbitMQ具体安装后,这一篇讲述RabbitMQ在C#的使用,这里将从基本用法到高级特性的使用讲述。

    前序条件

    这里需要增加一个用户,并且设置用户为administrator,更多命令可以参考RabbitMQ更多命令,这里开始我本来是想用guest用户,端口是:15672,但是在创建连接的时候是连接不上的,查资料后发现是必须开放5672端口,并且不能使用guest默认用户

    rabbitmqctl add_user allen pwd   //增加用户
    rabbitmqctl set_user_tags allen administrator  //设置用户权限
    rabbitmqctl change_password allen newpass  //修改密码
    

    开启5672端口

    firewall-cmd --zone=public --add-port=5672/tcp --permanent
    firewall-cmd --reload
    

    基本用法

    连接之前可以看到,rabbitmq的UI界面是没有连接的
    send发布者的代码

        /// <summary>
        /// 发送消息
        /// </summary>
        public class Send
        {
            private static readonly string appID = ConfigurationManager.AppSettings["AppID"];
    
            static void Main(string[] args)
            {
                var factory = new ConnectionFactory { Uri = ConfigurationManager.AppSettings["RabbitMQUri"] };
                using (var connection = factory.CreateConnection())
                {
                    using (var channel = connection.CreateModel())
                    {
                        string queue = string.Format("MQ{0}.BaseStudy", appID);
    
                        channel.QueueDeclare(queue, false, false, false, null);   //定义一个队列
    
                        while (true)
                        {
                            Console.Write("请输入要发送的消息:");
                            var message = Console.ReadLine();
                            var body = Encoding.UTF8.GetBytes(message);
    
                            channel.BasicPublish("", queue, null, body); //发送消息
    
                            Console.WriteLine("已发送的消息: {0}", message);
                        }
                    }
                }            
            }
        }
    

    RabbitMQUri,和AppID

    <add key="AppID" value="150107"/>    <!--队列ID-->  
    <add key="RabbitMQUri" value="amqp://test_user:123456@111.231.204.119:5672/" /> <!--连接字符串-->
    

    RabbitMQUri的Value相当于:

     <add key="RabbitMQ_HostName" value="111.231.204.119"/>
      <add key="RabbitMQ_UserName" value="test_user"/>
      <add key="RabbitMQ_Password" value="123456"/>
      <add key="RabbitMQ_Port" value="5672"/>
      <add key="RabbitMQ_VirtualHost" value="/"/>
    

    未建立连接时:

    建立连接后:

    发送消息

    可以看到RabbitMQ的UI管理界面的消息有:

    receive消费者收到的消息:

    receive的代码:

    /// <summary>
        /// 接收消息
        /// </summary>
        public class Receive
        {
            private static readonly string appID = ConfigurationManager.AppSettings["AppID"];
    
            static void Main(string[] args)
            {
                var factory = new ConnectionFactory { Uri = ConfigurationManager.AppSettings["RabbitMQUri"] };
                using (var connection = factory.CreateConnection())
                {
                    using (var channel = connection.CreateModel())
                    {
                        string queue = string.Format("MQ{0}.BaseStudy", appID);
    
                        channel.QueueDeclare(queue, false, false, false, null);   //定义一个队列
    
                        Console.WriteLine("准备接收消息:");                    
    
                        var consumer = new EventingBasicConsumer(channel);
                        consumer.Received += (s, e) =>
                        {
                            var body = e.Body;
                            var message = Encoding.UTF8.GetString(body);
                            Console.WriteLine("接收到的消息: {0}", message);
                        };
                        channel.BasicConsume(queue, true, consumer);  //开启消费者与通道、队列关联
    
                        Console.ReadLine();
                    }
                }            
            }
    

    如果遇到这种情况:

    OperationInterruptedException: The AMQP operation was interrupted: AMQP close-reason, initiated by Peer, code=530, text="NOT_ALLOWED - access to vhost 'test' refused for user 'allen'", classId=10, methodId=40, cause=
    

    这是权限问题,尽管我们已经设置了allen用户为administrator管理员,也就是:用户‘allen’没有权限访问‘/’
    解决方案:

    #sudo rabbitmqctl list_users
    列出用户权限
    Listing users ...
    allen [administrator]
    guest [administrator]
    #sudo rabbitmqctl  set_permissions -p / allen '.*' '.*' '.*'
    

    该命令使用户allen具有‘/’这个virtual host中所有资源的配置、写、读权限以便管理其中的资源
    最后,附上源码地址,包括RabbitMQ的基本用法,发布订阅,高级特性DEMO

  • 相关阅读:
    select&pselect/poll&ppoll/epoll
    软件常见基础问题总结
    FIFO、LRU、OPT这三种置换算法的缺页次数
    Django配置静态文件(CSSjs)及Django调用JS、CSS、图片等静态文件
    Django基础
    Django开发网站(四)
    Django开发网站(二)
    ubuntu1304下安装boa服务器
    Django开发网站(一)
    C语言中的七种排序算法
  • 原文地址:https://www.cnblogs.com/moyhui/p/8315788.html
Copyright © 2020-2023  润新知