17

私はActiveMQとCamelを学習している最中であり、次のような動作をする小さなプロトタイプシステムを作成することを目標としています。

代替テキスト
(出典:paulstovell.com

(大きい)

Ordersシステムで注文が行われると、すべてのサブスクライバー(pub / subシステム)にメッセージが送信され、サブスクライバーは注文の処理に関与できます。OrdersShipping、およびInvoicingアプリケーションには独自のActiveMQがインストールされているため、3つのシステムのいずれかがオフラインの場合でも、他のシステムは引き続き機能します。ActiveMQインストール間でのメッセージの移動は何かが処理します。

メッセージが同じActiveMQインスタンス上にある場合、ApacheCamelでメッセージをあるキューから別のキューにルート経由で移動するのは非常に簡単です。したがって、これはサブスクリプションキューを管理するために機能します。

次の課題は、あるActiveMQインスタンスから別のインスタンスにメッセージをプッシュすることです。これは、次に何を見るべきかわからない部分です。

  1. Camelは異なるActiveMQインストール間をルーティングできますか?(異なるマシン上にある場合、JMIエンドポイントURIがどうなるかわかりません)。
  2. ActiveMQにはストアアンドフォワード機能があることを理解しています。これは、注文と配送/請求の間でメッセージを移動するために使用するものですか?
  3. それとも、これはApache ServiceMixが解決することを意図しているものですか?
4

2 に答える 2

20

これは、ActiveMQとCamelに最適な、非常に単純な非同期のイベント駆動型アプリケーションです。

実際には、あるActiveMQインスタンスから別のインスタンスにメッセージを明示的に移動することはありません。それが機能する方法は、ブローカーのネットワークとして知られているものを使用することです。あなたの場合、ActiveMQ-紫、ActiveMQ-緑、ActiveMQ-青の3つのブローカーがあります。ActiveMQ-purpleは、ActiveMQ-greenとActiveMQ-blueを使用して単方向ブローカーネットワークを作成します。これにより、ActiveMQ-purpleは、消費者の需要に基づいてメッセージを保存してActiveMQ-greenおよびActiveMQ-blueに転送できます。

Ordersアプリは、ActiveMQ-purpleの注文キューで注文を受け入れます。Ordersアプリは、Camelを使用してメッセージを消費および処理し、それが請求メッセージなのか配送メッセージなのかを判断します。Camelは、メッセージをActiveMQ-purpleの請求キューまたは配送キューのいずれかにルーティングします。

消費者の需要は、請求アプリと配送アプリから発生します。Invoicingは、Camelを使用して、ActiveMQ-greenの請求キューからのメッセージを消費します。Shippingアプリは、Camelを使用してActiveMQ-blueの出荷キューからのメッセージを消費します。ブローカーネットワークと、ActiveMQ-green.invoicingキューおよびActiveMQ-blue.shippingキューに対するコンシューマーの要求により、メッセージはActiveMQ-purpleから適切なブローカーおよびキューに転送されます。メッセージを特定のブローカーに明示的にルーティングする必要はありません。

これがあなたの質問に答えることを願っています。もうお持ちの場合はお知らせください。

ブルース

于 2010-03-03T04:20:44.413 に答える
1

うーん、私はせいぜい手を出しているだけで、しばらくの間ではありませんが、何かを提供しようとします。

ActiveMQは異なるインストール間をルーティングでき、私の知る限り標準のURIを使用するだけなので、ここで何が問題なのかわかりません。TCPを使えば大丈夫だと思います。ServiceMixを使用すると(後で説明します)、connectionFactoryを指定して、その中にURIを指定するだけです。このリンクは、いくつかの例http://servicemix.apache.org/servicemix-jms-new-endpoints.htmlを示しています。

CamelはDurableSubscriberをサポートしていますが、それがあなたの目的である場合(http://camel.apache.org/durable-subscriber.html)?このパターンにより、メッセージの準備ができたときにサブスクライバーがオフラインの場合、サブスクライバーがオンラインに戻るまでメッセージが保持されます。これはServiceMixでもサポートされています(上記のリンクを参照して、「subscriptionDurable」を探してください。

于 2010-02-17T23:18:51.940 に答える