zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Flask学习笔记(3)-数据库迁移
    windows脚本批处理传输文件到linux脚本
    @TableLogic表逻辑处理注解(逻辑删除)
    使用thumbnailator给图片加水印
    Spring Cloud Stream 使用延迟消息实现定时任务(RabbitMQ)
    centos修改时区,同步时间
    定时清理缓存
    redis基本命令
    运行jar包shell脚本
    硬盘扩容后,建立新分区,将已有的目录挂载到新分区下
  • 原文地址:https://www.cnblogs.com/moyhui/p/8315788.html
Copyright © 2011-2022 走看看