8

私はメッセージングが初めてで、現在、RabbitMQをシステム アーキテクチャの一部として使用して、異なるサービス間でメッセージングを提供することを調査しています。基本的な RabbitMQ の例が動作しており、基本的なテキスト メッセージをバス経由で送信できます。EasyNetQは、RabbitMQ を使用する際の複雑さの一部を簡単に解決できるように見えますが、私はそれを機能させるのに少し問題があります。

単なる文字列ではなく、次のクラスで表されるより高度なメッセージを送信したいと考えています。

public class Message
{
    public string Text { get; set; }
    public int RandomNumber { get; set; }
    public DateTime Date { get; set; }
}

これをキューに発行して送信し、サブスクライバーにキューから取得させようとしています。私のコードは次のとおりです。

出版社

using (var bus = RabbitHutch.CreateBus("host=localhost"))
{
    var message = new Message() { Text = "Hello World", RandomNumber = new Random().Next(1,100), Date = DateTime.Now };
    bus.Publish<Message>(message);
}

レシーバー

using (var bus = RabbitHutch.CreateBus("host=localhost"))
{
    bus.Subscribe<Message>("test", m => Console.WriteLine(string.Format("Text: {0}, RandomNumber: {1}, Date: {2}", m.Text, m.RandomNumber, m.Date)));
}

双方がつながっているようで、発行者はメッセージが発行されたと報告しています。

DEBUG: Trying to connect
INFO: Connected to RabbitMQ. Broker: 'localhost', VHost: '/'
DEBUG: Published UserQuery+Message:query_lzzfst, CorrelationId ec81fc89-4d60-4a8b-8ba2-7a6d0818d2ed

サブスクライバーは次のログを記録します。

DEBUG: Trying to connect
INFO: Connected to RabbitMQ. Broker: 'localhost', VHost: '/'

サブスクライバーがキュー (または正しいキュー) に接続していないように見えますか、実際にメッセージを受信するために他に何かする必要がありますか?

4

3 に答える 3

19

すみません、私は EasyNetQ の主な作成者です。これを見たばかりです。あなたの問題は、サブスクリプションを完了するとすぐにバスを処分しているため、サブスクリプションを行うとすぐに聞くのをやめることです。アプリの起動時にバスを作成し、シャットダウン時に破棄します。これを行う必要がある理由は、https ://github.com/mikehadlow/EasyNetQ/wiki/Connecting-to-RabbitMQ のドキュメントで説明されています。

サイモンの指摘に対処する。彼の言うとおり、EasyNetQ は、API を簡素化するために、RabbitMQ の機能のサブセットのみを提供するように意図的に設計されています。現在、pub/sub と request/response の 2 つのパターンを提供しています。トピックベースのルーティングがすぐに表示されることを期待してください。

于 2012-04-24T08:08:30.820 に答える
2

RabbitMQ には管理アドオン (http://www.rabbitmq.com/management.html) があり、rabbit を使用する場合に不可欠です。接続されているエクスチェンジとキュー、およびクライアントが表示されます。したがって、レシーバーがキューに接続されているかどうかを確認できるはずです。

Exchange は送信されたメッセージのコピーを保持しないため、順序に注意してください。バインドされたキュー (またはそれ以降のバージョンの他の交換) に渡すだけなので、メッセージを交換に送信してレシーバーを作成すると、一時キューが作成され、このキューが交換にバインドされる可能性があります。すでに処理済み - RabbitMQ は非常に高速です (大声で考えているだけです)

EasyNetQ は機能のように見えますが、ACK メッセージを処理しないことは、ある種のアプリでは問題になる可能性があります。RabbitMQ は、他のものとは異なり、pub/sub よりも多くのモデルをサポートしているため、EasyNetQ を使用すると制限があります。これは、アプリなどによっては問題になる可能性があります。

ありがとう

サイモン

于 2012-02-28T19:51:04.967 に答える
-4

また、rabbitMQ と easynetQ も使い始めました。これらは素晴らしい製品です。バスをシングルトンにすることについて、Mike Hedlow は正しいです。ここにこれを反映するサンプルプロジェクトを作成しました

私のコードの MXRabbitBus オブジェクトは、Web アプリケーションでも使用することを意図しています。

于 2014-02-28T06:40:07.903 に答える