ホームページ  >  記事  >  バックエンド開発  >  C#でのRabbitMQアプリケーションのグラフィックコードの詳細な説明

C#でのRabbitMQアプリケーションのグラフィックコードの詳細な説明

黄舟
黄舟オリジナル
2017-07-27 16:10:302761ブラウズ

M Rabbitmq とは何か、そしてそのインストール方法については、Baidu ではすぐにわかりますが、設定に関しては注意してください。直接言うことはあまりありません。まず、簡単なコード例に直接進みます。

送信終了:

R
            ConnectionFactory factory = new ConnectionFactory { HostName = "hostname", UserName = "root", Password = "root001", VirtualHost = "hostserver" }; 
                       using (IConnection conn = factory.CreateConnection())
            {                using (IModel im = conn.CreateModel())
                {
                    im.ExchangeDeclare("rabbitmq_route", ExchangeType.Direct);
                    im.QueueDeclare("rabbitmq_query", false, false, false, null);
                    im.QueueBind("rabbitmq_query", "rabbitmq_route", ExchangeType.Direct, null);                    
                    for (int i = 0; i < 1000; i++)
                    {                        byte[] message = Encoding.UTF8.GetBytes("Hello Lv");
                        im.BasicPublish("rabbitmq_route", ExchangeType.Direct, null, message);
                        Console.WriteLine("send:" + i);
                    }
                }
            }
E

受信者:

            ConnectionFactory factory = new ConnectionFactory { HostName = "hostname", UserName = "root", Password = "root001", VirtualHost = "hostserver" }; 
                       using (IConnection conn = factory.CreateConnection())
            {                using (IModel im = conn.CreateModel())
                {                    while (true)
                    {
                        BasicGetResult res = im.BasicGet("rabbitmq_query", true);                        
                        if (res != null)
                        {
                            Console.WriteLine("receiver:"+UTF8Encoding.UTF8.GetString(res.Body));
                        }
                    }
                }
            }

1 回から 1,000 件送信します。受信時の送信プロセスは高速です。受信時、受信時は比較的遅くなります。 D 説明

上記のデモは 1 つの受信に限定されています。同数の送信者が複数の受信者にどうなるか、新しい受信者を追加し、DEMO で受信側を直接コピーします。 wry両方のレシーバーが同時に実行されている場合、RabbitMQが各メッセージを順番に配布することがわかります。各確認が受信されると、メッセージは削除され、主に RabbitMQ の

ループ配布

メカニズムにより、次のメッセージが次の受信者に配布されます。一下 簡単に言うと、受信機が複数の場合、サイクル配信の都合上、ニュースはほぼ2台の受信端末になります。

では、同じメッセージを複数の受信者に配信する方法。送信端末コードを変更します:

            ConnectionFactory factory = new ConnectionFactory { HostName = "hostname", UserName = "root", Password = "root001", VirtualHost = "host" }; 
                       using (IConnection conn = factory.CreateConnection())
            {                using (IModel im = conn.CreateModel())
                {
                    im.ExchangeDeclare("rabbitmq_route_Fanout", ExchangeType.Fanout);// 路由                    
                    int i = 0;                    
                    while (true)
                    {
                        Thread.Sleep(1000);
                        ++i;                        
                        byte[] message = Encoding.UTF8.GetBytes(i.ToString());
                        im.BasicPublish("rabbitmq_route_Fanout", "", null, message);
                        Console.WriteLine("send:" + i.ToString());
                    }
                }
            }
type のタイプと比較すると、コード アノテーションの後にコードのセクションが 2 つあることがわかります。FANOUT メソッドを設定した後は、キュー名を指定する必要はありません。 。 1 秒間一時停止する目的は、結果を表示しやすくし、あまりにも早く更新しすぎないようにすることです。もう一度受信側のコードを見てみましょう:

            ConnectionFactory factory = new ConnectionFactory { HostName = "hostname", UserName = "root", Password = "root001", VirtualHost = "host" };  
                      using (IConnection conn = factory.CreateConnection())
            {                using (IModel im = conn.CreateModel())
                {
                    im.ExchangeDeclare("rabbitmq_route_Fanout", ExchangeType.Fanout);                    
                    var queueOk = im.QueueDeclare();//1
                    im.QueueBind(queueOk.QueueName, "rabbitmq_route_Fanout", "");//2                    
                    var consumer = new QueueingBasicConsumer(im);//3
                    im.BasicConsume(queueOk.QueueName, true, consumer);//4                    
                    while (true)
                    {var _result = (BasicDeliverEventArgs)consumer.Queue.Dequeue();//5                        
                    var body = _result.Body;                        
                    var message = Encoding.UTF8.GetString(body);
                        Console.WriteLine("received:{0}", message);
                    }
                }
新しい受信側接続(コンシューマー)の場合、新しいキューを宣言する必要があります。アノテーション1のコード、宣言キューが指定されていない場合は、Rabbitmq指定されていません。名前は自動的に生成されます。これは便利です。 2 つの受信側の操作結果は期待どおりです。

ブロードキャスト方式の欠点については、実際に実行してみるとわかります

_

以上がC#でのRabbitMQアプリケーションのグラフィックコードの詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。