1

Camel で SMPP 経由で SMS を送信するための最良の戦略は何ですか? ProducerTemplate を使用する必要がありますか?

私はラクダに慣れていないので、自分の戦略が最適かどうか自信がありません。

私のアプリケーションでは、SMS の受信時に、計算​​されたコンテンツを含む別の SMS を送り返す必要があります。

このようなルート smsInを作成しました

from "uri=smpp ..."
unmarshal ref="bindyDataFormat"
to "uri=bean:myBean

およびルート smsOut

from "uri=direct:smsOut"
to "uri=smpp ..."

smsIn ルートは、sms を受信し、その内容 (csv データ) を pojo に変換して、その pojo を myBean に送信します。

myBean では、いくつかの処理を行ってから、計算されたメッセージをエンドポイント「direct:smsOut」に送信する ProducerTemplate を呼び出します。

私が ProducerTemplate を使用する理由は、Exchange のヘッダー (CamelSmppDestAddr) と本文に pojo からの情報を設定する必要があるためです。

logica SMSC シミュレーターでテストしましたが、問題なく動作しているように見えますが、このソリューションについてご意見をお聞かせください。

信頼性、トランザクションはどうですか?メッセージを SMSC に送信する前に保存する必要がありますか? データベースに保存し、キューに投稿する必要がありますか?

4

1 に答える 1

2

プロデューサー テンプレートを使用する理由がわかりません。代わりにルートを作成することもできます (Bean から何かを返すか、Exchange をパラメーターとして受け取る場合)。

<from uri="smpp: ..."/>
  <bean ref="bean:myBean"/>
  <to uri="jms:queue:myQueue"/>

その場合、直接使用するのではなく、トランザクション対応で永続的な JMS キューを使用します。あなたの smpp 呼び出しが失敗したとしましょう。メッセージはなくなっていたでしょう。このようなキューを使用してトランザクションを確認すると、ルートのこの段階でデータが失われないようにすることができます。

 <from uri="jms:queue:myQueue"/>
   <transactional/>
   <to uri="smpp.."/>

JMS ミドルウェアとして Apache ActiveMQ を使用することをお勧めします。実際、ActiveMQ をダウンロードするとキャメルがバンドルされるので、実際に ActiveMQ から Camel ルートを実行できます。

やりたいことに応じて、再試行とエラー処理の方法を微調整したい場合があります (1 秒ごとに永久に再試行する、5 回再試行してからエラー キューに入れる、など)。このページを読む: Camel でのトランザクション エラー処理

より詳細な情報と微調整については、こちらもお読みください: Transactional Client

于 2012-06-08T04:58:21.627 に答える