2011-08-09 23 views
3

私はアクションを収集し、リモートサーバーに送信するアプリケーションを持っています。これらのアクションはタイムクリティカルではないので(ログラインと考える)、それらをキューに入れてバッチで送信したいと思います。埋め込み可能なキュー?

このように、私はまた、(ハードドライブがクラッシュしない限り)メッセージが失われないようにしたいと考えています。

MSMQはむしろヘビー級で、秘密で奇妙なようです。また、システムコンポーネントとしてインストールする必要があります。

私のメッセージをJSONにシリアル化してSQLiteに保存するのは簡単で簡単ですが、それを行う前に、標準化された(できればAMQP compatible)キューがあり、インストールが不要で埋め込むことができますかアプリ?

+2

AMQPを見ると、膨大な量のアーキテクチャが本当に必要ですか?それは高性能で信頼性の高いものでなくてはなりませんか? –

+0

@Kierenそれは本当にAMQPを避けるという考えでした。パフォーマンスは常に重要ですが、それは信頼性の側面です。サーバがそれを受け入れることができず、それがローカルに残っていなければ、メッセージは失われません。それは本当に些細なことですが、もう一度、それを行うための標準的な方法があるのだろうかと思います。 –

+0

私は公正な点を挙げて、単純なシリアライザと例外処理である 'List 'や 'Queue 'を提案しようと思っていました; –

答えて

1

私は実際にMSMQを再考すべきだと思います。

  1. これは、Windowsのサーバーバージョンに既定でインストールされます。
  2. Windows以外のバージョンのWindowsにインストールするのは簡単です。
  3. キューを観察するためのUIが組み込まれています
  4. あなたの標準が「重くて不可解な」ものなのか分かりませんが、プロジェクトで初めて使っただけで簡単でしたアプリケーションの一部。私は確かに自分自身のデータベースにキューを格納するよりもはるかに重いとは思わない。あなたはJSONを使用する場合は
  5. 、あなたは
  6. あなたが回復するキューを設定することができ、メッセージを自分でシリアル化し、文字列として保存することができます - そうしないメモリにディスク上のキューを格納

のみ私が見ることができる深刻な異議は、MSMQをインストールすることです。異なるバージョンのWindowsでこのアプリケーションを広範囲に展開しなければならない場合は、それを大きな問題として見ることができます。

0

Graylog2は、AMQPメッセージからのログエントリを受け入れる中央ロギングソリューションです。おそらく、それをユースケースに適応させることができます。

いずれの場合でも、Graylog2は、ログメッセージを失うことなくログメッセージを収集するようなジョブでAMQPが機能することを示しています。

AMQPはプロトコルなので、インストールする必要はありません。 .NET用のクライアントライブラリが必要です。ただし、メッセージフローを管理するには、LAN上のどこかのサーバーにMQブローカーをインストールする必要があります。 RabbitMQはインストールが簡単なので広く使用されています。

また、メッセージの送信を開始した後、ネットワーク上のどこかにプロセスを持ち、そのプロセスを受信し、dbに書き込むなどの処理を行う必要があります。

0

自作ソリューションが必要な場合は、ロギングサーバーにRabbitMQをインストールし、アプリケーションにRabbitMQの.NETクライアントを埋め込み、キューから読み込んでイベントをディスクに書き込むための小さなプログラムを作成できます。

RabbitMQはかなり軽量です。デフォルトインストールはわずか数MBで、通常は約11Mbのメモリを使用して動作します。また、AMQPの拡張機能であるPublisher Confirmsも提供されています。これは、一度サーバーがログメッセージを受け入れると、ハードディスクが消失しない限り失われないようにするためです。拡張機能は標準ではありませんが、他のブローカーではサポートされていない可能性があります。

関連する問題