プロジェクトにはデータをプッシュし受信する必要があるため、データ量は比較的大きく、1日に約300万件のデータが処理されます
最初はhttp postでデータを送信していましたが、遅すぎて送信速度も受信速度よりずっと遅いことが分かりました。
したがって、長いソケット接続でデータをプッシュ・受信し、ソケットサーバーとクライアントを自分で書く場合は時間の無駄ですが、うまくできていないかもしれません
最後に、activemqはデータのプッシュと受信に使用されます
まず、プロデューサーコードは以下の通りです。
消費者向けには、2つのモデルがあります。
1: 通常のサブスクリプションで、永続的な「サブスクリプション」は不要です。つまり、接続時にメッセージを受け取ることができ、接続前にメッセージを受け取れないという意味です。これは「CreateConsumer」を使って行われます。 2: 永続的サブスクリプション。接続後、「CreateDurableConsumer」を使って、これまでプッシュされていないデータを受け取ることができます。
CreateDurableConsumerの導入へのリンク:ハイパーリンクのログインが見えます。
指定されたトピックにまだ存在していなければ、共有されていない永続的サブスクリプションを作成し、その永続的サブスクリプションでコンシューマーを作成してください。 この方法はメッセージセレクタを使わずに永続的なサブスクリプションを作成し、noLocal値はfalseです。 アプリケーションは永続的なサブスクリプションを使用しており、アクティブな消費者がいない場合に公開されるメッセージも含め、トピックに関するすべてのメッセージを受信する必要があります。 JMSプロバイダーはこの永続的購読の記録を保持し、対象となる発行者からのすべてのメッセージは消費者に届けられ、その永続的購読によって期限切れまで保持されることを保証します。
永続的な購読はメッセージを蓄積し続け、解約方法で削除されるまで続きます。
この方法は、共有されていない永続的サブスクリプションでのみ使用可能です。 この方法で作成された永続的なサブスクリプションは共有解除されます。 つまり、サブスクリプションには同時に1人のアクティブ(つまりクローズされていない)消費者しか存在できません。 ここでの「consumer」という用語は、クライアント内のTopicSubscriber、MessageConsumer、またはJMSConsumerオブジェクトを指します。
共有されていない永続的サブスクリプションは、クライアント指定の名前と設定が必要なクライアント識別子で識別されます。 その後、非共有の永続的サブスクリプションで消費者を作成したいアプリケーションは、同じクライアント識別子を使用しなければなりません。
同じ名前とクライアント識別子を持つ共有されていない永続的サブスクリプションがすでに存在し、同じトピック、メッセージセレクター、noLocal値がすでに指定されていて、永続的サブスクリプションにアクティブな(つまり閉じられていない)消費者がいない場合、この方法はMessageConsumer上で既存の持続的サブスクリプションを作成します。
同じ名前とクライアント識別子を持つ非共有の永続的サブスクリプションがすでに存在し、その永続的サブスクリプションにすでにアクティブな(つまり閉じていない)コンシューマーがいる場合、JMSExceptionがスローされます。
同じ名前とクライアント識別子を持つ非共有の永続的サブスクリプションがすでに存在し、メッセージセレクターやnoLocal値が指定されていて、その永続的サブスクリプションにまだアクティブな(つまり閉じていない)消費者がいない場合、これは古いサブスクリプションを解約(削除)して新しいサブスクリプションを作成するのと同等です。
共有および非共有の永続的サブスクリプションは、名前やクライアントのアイデンティティが同じでない場合もあります。 同じ名前とクライアント識別子を持つ共有永続的サブスクリプションがすでに存在している場合、JMSExceptionがスローされます。
同じ名前とクライアントIDを持つ永続的サブスクリプションと共有された非永続サブスクリプションには制限はありません。 そのようなサブスクリプションは完全に別個になります。
このメソッドは対応するcreateDurableSubscriberメソッドと同じですが、消費者を表すためにTopicSubscriberではなくMessageConsumerを返します。
パラメーター: テーマ - 非一時的なトピック購読 名前 - このサブスクリプションを識別するために使われる名称 投げ: InvalidDestinationException - 無効なトピックが指定されている場合。 IllegalStateException - ゲスト識別子が設定されていない場合 JMSException - もしセッションが内部エラーにより非共有永続的サブスクリプションやMessageConsumerを作成できなかった場合 同じ名前とクライアント識別子を持つ非共有の永続的サブスクリプションがすでに存在し、消費者がすでにアクティブである場合 同じ名前とクライアント識別子を持つ共有の永続的サブスクリプションがすでに存在する場合 それ以来: JMS 2.0 IMessageConsumer CreateDurableConsumer(ITopic destination, string name, string selector, bool noLocal);
ここで、messageSelectorはメッセージセレクタです。 noLocalフラグはデフォルトでfalseであり、trueに設定すると、消費者が自分と同じ接続で公開されたメッセージのみを受け取ることを制限します。これはトピックにのみ適用され、キューには適用されません。 名前はサブスクリプショントピックの一意なアイデンティティであり、永続的サブスクリプションに加入する際にこのパラメータを設定する必要があります。
Activemq .netはパッケージダウンロードを参照する必要があります:ハイパーリンクのログインが見えます。
完全なソースコードダウンロード:
観光客の皆さん、この投稿の隠された内容を見たい方は、どうぞ 答える
|