C#(テキストのソース端で)良い面と悪い面の両方を持つキューのRabbitMQ:Qと簡単なアプリケーションのメッセージキューMQ(II)

我々は、キュー(待ち行列)について話最後の章では、我々はメッセージキューメッセージキューの話をこの章では、MQと呼ばれます。

定義:

  MQは、メッセージキュー、ショート・メッセージ・キュー(メッセージキューは、Erlangの言語の開発を使用して、人気のあるオープンソースのシステムである)です。MQの通信方法は、アプリケーションのアプリケーションです。

アプリケーションを読み書きすることで、それらをリンクするための専用接続することなく、メッセージ通信をデキュー。

プログラムの間を通過するメッセージは、リモート・プロシージャ・コールのそれぞれ他の、一般的に使用される技術と通信するためのメッセージで通信データを介してではなく、直接呼び出しを介して送信されます。

 これは、通信するためにキューによってアプリケーションキューを指します。受信と同時にデータを送信するためのキューの応用。

特徴:

  MQの消費者 - モデルのプロデューサーに代わって。メッセージキューへの書き込みメッセージの一端は、もう一方の端を読み取るか、キュー内のメッセージをサブスクライブすることができます。

MQ続くプロトコルAMQP(アドバンスト・メッセージキュープロトコル:そのクライアントアプリケーションと可能なメッセージングミドルウェア・サーバーの相互運用性の仕様に完全に準拠)が具現化し、製品れます。

アプリケーション:

  MQを使用する場合、我々はリアルタイム情報のリターンを必要としません。情報へのアクセスと非同期処理のための情報を返します。

たとえば:プロジェクトでは、車のシステムからは車に関するリアルタイム情報を取得するためにCANバスを使用する必要がありますが、車の情報を返す必要はありません。

例えば、車のタイヤの空気圧を取得し、私たちは情報や車への復帰の結果を持っていません。

    下記RabbitMQ.Client.dll、:リアルタイムのデータを取得するためのRabbitMQ C#プロジェクトを使用するには、あなたはクライアントライブラリをインストールする必要があります。

代替ダウンロードパス:

リンクします。https://pan.baidu.com/s/1zcQmPnBF7WcD8sqV4W54pw 
抽出コード:6962 


EDITORIAL:

これはRabbitMQ.client.dll動的ライブラリを導入し、Erlangの環境をダウンロードしてインストール、RabbitMQのサービスをインストールする必要があります。ここでは、適切なコンテンツをダウンロードすることができます公式サイトです。

私はここで私はアーランI Baiduのネットワークディスクのダウンロードを開くことが公式サイトが非常に遅い、Baiduのネットワークディスクでインストールプログラムを終えています、このWindowsの64ビットを使用します

リンクします。https://pan.baidu.com/s/1zcQmPnBF7WcD8sqV4W54pw
抽出コード:6962 


 

インストール

私たちは、RabbitMQのサービスをインストールする必要があります。

:公式サイトアドレスダウンロードhttp://www.rabbitmq.com/download.htmlを

ダウンロードが完了したら持って[次へ]をクリックします。

そうでない場合はErlangの環境は、次のヒントをポップアップ表示されます:

 

ダウンロードして、Erlangの環境をインストールすると、インストールが次のステップを指すようになっています

住所:http://www.erlang.org/downloads

あなたはゆっくりか開いているページを開くと、私も注文ダウンロードして行くが、私は、Windows 64があります。

リンクします。https://pan.baidu.com/s/1zcQmPnBF7WcD8sqV4W54pw 
抽出コード:6962 

インストールが完了したら、次のように我々は、環境変数を設定する必要があります。

[コンピュータ]、[プロパティ、システムの詳細設定、高度な、環境変数を右クリックし、

システム変数を作成します。

エントリー

変数名:ERLANG_HOME、

変数値:C:\プログラムファイル\ erl9.3

変数値は、あなただけのErlangをインストールするパスです

 

 そして、パス内の環境変数を見つけ、最後に[編集]をクリックし、プラス変数の値;%ERLANG_HOME%\ binに;(セミコロン)セミコロンを覚えています

 

 

サービスのインストールが成功した後は、サービスに表示されます。

 

そして、RabbitMQのをインストールし、また次へをクリックしてきました、 

ここで行われる準備作業の後、我々はコードを書きます。

何人かの子供の靴はあなたがRabbitMQのサービスとErlangの環境をインストールする必要があり、なぜ、私はシンプルな細部の人気を見てここにいるかわからない、Baiduのを見てください。

RabbitMQのは、高度なメッセージキュープロトコル(AMQP)は、オープンソースのメッセージ・ブローカー・ソフトウェア(また、メッセージ指向ミドルウェアとして知られている)で達成することです。

RabbitMQ服务器是用Erlang语言编写的,而集群和故障转移是构建在开放电信平台框架上的。

所有主要的编程语言均有与代理接口通讯的客户端库。

.


 代码实例:

为了讲解效果更佳,我们新建两个控制台应用程序MessageQueueClient(生产者)和MessageQueueServer(消费者),

不要急着建立,看下面的代码依次建立。

生产者 :

新建控制台应用程序MessageQueueClient,引用动态文件库RabbitMQ.Client.dll,可以去百度下载一个,上面的网盘路径里面有。

入队代码编写:

using RabbitMQ.Client;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace MessageQueueClient
{
    class Program
    {
        static void Main(string[] args)
        {
            //生产者
            ConnectionFactory factory = new ConnectionFactory();
            factory.HostName = "127.0.0.1";
            //默认端口
            factory.Port = 5672;
            using (IConnection conn = factory.CreateConnection())
            {
                using (IModel channel = conn.CreateModel())
                {
                    //在MQ上定义一个持久化队列,如果名称相同不会重复创建
                    channel.QueueDeclare("MyRabbitMQ", true, false, false, null);
                    while (true)
                    {
                        string message = string.Format("{0}", Console.ReadLine());  //Console.ReadLine()为控制台输入的内容,我们可以用其他方式获取
                        byte[] buffer = Encoding.UTF8.GetBytes(message);
                        IBasicProperties properties = channel.CreateBasicProperties();  
                        properties.DeliveryMode = 2;
                        channel.BasicPublish("", "MyRabbitMQ", properties, buffer);  //入队
                        Console.WriteLine("入队成功:" + message);
                    }
                }
            }
        }
    }
}

控制台入队操作,控制台这一步可以结合实际代码需求进行入队。

这里就入队成功了,接下来我们出队,也就是读取数据,这里和readis有点像,我们之前安装的RabbitMQ服务就是在这里用到了。

 

生产者 :

新建控制台应用程序MessageQueueServer,引用动态文件库RabbitMQ.Client.dll,可以去百度下载一个,上面的网盘路径里面有。

出队代码编写:

using RabbitMQ.Client;
using RabbitMQ.Client.Events;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace MessageQueueServer
{
    class Program
    {
        static void Main(string[] args)
        {
            //消费者
            ConnectionFactory factory = new ConnectionFactory();
            factory.HostName = "127.0.0.1";
            //默认端口
            factory.Port = 5672;
            using (IConnection conn = factory.CreateConnection())
            {
                using (IModel channel = conn.CreateModel())
                {
                    //在MQ上定义一个持久化队列,如果名称相同不会重复创建
                    channel.QueueDeclare("MyRabbitMQ", true, false, false, null);

                    //输入1,那如果接收一个消息,但是没有应答,则客户端不会收到下一个消息
                    channel.BasicQos(0, 1, false);

                    Console.WriteLine("Listening...");

                    //在队列上定义一个消费者
                    QueueingBasicConsumer consumer = new QueueingBasicConsumer(channel);
                    //消费队列,并设置应答模式为程序主动应答
                    channel.BasicConsume("MyRabbitMQ", false, consumer);

                    while (true)
                    {
                        //阻塞函数,获取队列中的消息
                        BasicDeliverEventArgs ea = (BasicDeliverEventArgs)consumer.Queue.Dequeue();
                        byte[] bytes = ea.Body;
                        string str = Encoding.UTF8.GetString(bytes);

                        Console.WriteLine("读取队列消息:" + str.ToString());
                        //回复确认
                        channel.BasicAck(ea.DeliveryTag, false);
                    }
                }
            }
        }
    }
}

运行代码,读取队列里面的内容,遵循先入先出原则。

这样队列的数据就读取到了。

 

总结:

这是一个简单的消息队列的应用,写的比较粗浅,具体需要结合实际应用项目编写。

另外感谢大家的支持^_^

 

 

 

 

おすすめ

転載: www.cnblogs.com/xiongze520/p/10967874.html