RabbitMQ的基本用法到高級特性的使用

簡介

繼上一篇 CentOS上安裝RabbitMQ講述RabbitMQ具體安裝后,這一篇講述RabbitMQ在C#的使用,這里將從基本用法到高級特性的使用講述。

前序條件

這里需要增加一個用戶,并且設置用戶為administrator,更多命令可以參考[RabbitMQ更多命令],這里開始我本來是想用guest用戶,端口是:15672,但是在創建連接的時候是連接不上的,查資料后發現是必須開放5672端口,并且不能使用guest默認用戶(http://www.rabbitmq.com/rabbitmqctl.8.html)

rabbitmqctl add_user allen pwd   //增加用戶
rabbitmqctl set_user_tags allen administrator  //設置用戶權限
rabbitmqctl change_password allen newpass  //修改密碼

開啟5672端口

firewall-cmd --zone=public --add-port=15672/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();
                }
            }            
        }

最后,附上源碼地址,包括RabbitMQ的基本用法,發布訂閱,高級特性DEMO

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 整體架構 部署步驟 基于 Docker 基本概念內存節點只保存狀態到內存,例外情況是:持久的 queue 的內容將...
    mvictor閱讀 12,779評論 5 30
  • http://liuxing.info/2017/06/30/Spring%20AMQP%E4%B8%AD%E6%...
    sherlock_6981閱讀 15,992評論 2 11
  • 關于消息隊列,從前年開始斷斷續續看了些資料,想寫很久了,但一直沒騰出空,近來分別碰到幾個朋友聊這塊的技術選型,是時...
    預流閱讀 585,407評論 51 786
  • RabbitMQ簡介http://www.searchsoa.com.cn/showcontent_43337.h...
    ReanCool閱讀 2,016評論 0 1
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,886評論 18 139