首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >RabbitMQ的基本使用到高级特性

RabbitMQ的基本使用到高级特性

作者头像
牛嗷嗷
发布2018-03-30 10:38:48
7200
发布2018-03-30 10:38:48
举报
文章被收录于专栏:微服务微服务

简介

继上一篇 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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简介
  • 前序条件
  • 基本用法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档