センシングデバイスの分散ネットワークを設計しています。これらのデバイスはログを生成し、中央データベースに送信します。ログメッセージの転送にJMSを使用しています。メインデータベースサーバーは、着信メッセージを処理するためにMDB(Message Driven Bean)を実行します。クライアントはGPRSでデータを送信しています。問題は、クライアントにネットワークの問題を処理させたくないということです。クライアントマシン上でローカルに実行され、クライアントからメッセージをブロックせずにすぐに取得して、代わりに試行するリレーサービスが必要です(ネットワークがダウンしている場合は、しばらくしてからもう一度送信してみてください)。
メッセージは単純なJavaオブジェクトです。
public class Message {
public int x;
public int y;
public int z;
}
クライアント:
Message msg = new Message();
while (True) {
/* sense data */
msg = get_data_from_environment();
/* send data to local relay service
* This is non blocking call */
relay_service.send(msg);
}
ローカルリレーサービス:
while (True) {
/* get message from local client */
msg = get_message_from_local_client();
result = send_msg_to_JMS_server(msg);
/* if not successful, persist it on a local queue and try some other time */
if (result.is_sent() != True)
store_msg_on_disk(msg);
}
このようなメッセージサービスはありますか、それとも自分でリレーサービスを書くべきですか?
この場合、JMSを使用するのは良いですか?メッセージを送信するために独自のソケットレベルプロトコルを設計する必要がありますか?