JBoss MessagingでJMSメッセージをbridgeする | たかゆき+

JBoss MessagingでJMSメッセージをbridgeする

JBoss MessagingでJMSメッセージのブリッジを行おうとした際に、ファイアフォール越しでのブリッジに手間どってしまいました。そこで、今日はそのときのメモとしてブリッジに必要なポートについてのお話しです。

なお、今回の環境は以下の通りです。

私は、SMTPサーバの受信サーバと送信サーバをインターネット越しに分離した構成で使っています。これまでそのサーバ間をSMTPで接続していた部分を、JMSメッセージのブリッジに置き換えようと考えたのが使用目的です。

ISPのメンテナンスや通信機器の障害などによって数時間のネットワーク障害が発生することがあります。その結果、ネットワークが回復しても、メールが大きく遅延する、タイムアウトしてエラーメールとして戻ってくるといったことがありました。

もちろん、SMTPサーバにはメールを再送する機能があります。そのおかけで一時的にネットワーク障害が発生してもメールを送信できる仕組みになっています。しかし、一般的なSMTPサーバの実装では、再送を試みる期間が(私にとって)短かったり、次に再送を試みるまでの間隔が(私にとって)長かったりするのです。

JMSメッセージのブリッジでは、十分に短い間隔でネットワークの状況をチェックしていますので、サーバ間のネットワークが回復すると即座にメッセージを送信することができます。この点が魅力です。


JBoss AS 4.2でJBoss Messagingを使ったJMSメッセージのブリッジを利用するためには、JBoss Messagingをインストールし、JMSメッセージのブリッジサービスの設定が必要です。

しかし、ここではその手順を示していません。

以下のドキュメントに沿ってJBoss Messagingのインストール、JMSメッセージのブリッジサービスの設定を行ってください。

さて、上記のドキュメントに沿ってJMSメッセージのブリッジを設定するなかで、ファイアフォール関連で戸惑うかもしれません。

その場合には、以下のドキュメントが参考になります。
今回、ブリッジを行うサーバ間で必要になる通信要件は以下の通りです。
    ファイアフォール越しでブリッジを行う場合には、クライアント側(ブリッジ元)からサーバ側(ブリッジ先)に対して以下の通信が行える必要があります。

    1. TCPの1098番ポートへの通信(ネーミングサービス)
    2. TCPの1099番ポートへの通信(ネーミングサービス)
    3. TCPの4457番ポートへの通信(メッセージングサービス)
    4. TCPの4458番ポートへの通信(メッセージングサービス)

    ※ポート番号は、デフォルト設定の場合です。
    ※サーバ側からクライアント側への要件はありません。
ポート番号の設定については、それぞれ以下の設定ファイルに記述されています。
    ネーミングサービス
    conf/jboss-service.xml

    メッセージングサービス
    deploy/jboss-messaging.sar/remoting-bisocket-service.xml

そして、一番の肝となる「4. TCPの4458番ポートへの通信」については、明示的な設定が必要になります。

○クライアント側(ブリッジ元)の設定

サーバの4458番ポートに接続するために、「secondaryConnectPort」に「4458」を設定します。
    クライアント側:
    deploy/jboss-messaging.sar/remoting-bisocket-service.xml

    (編集前)
    <!-- Use these parameters to specify values
         for binding and connecting control connections
         to work with your firewall/NAT configuration
    <attribute name="secondaryBindPort">xyz</attribute>
    <attribute name="secondaryConnectPort">abc</attribute>
    -->

    (編集後)
    <!-- Use these parameters to specify values
         for binding and connecting control connections
         to work with your firewall/NAT configuration
    <attribute name="secondaryBindPort">xyz</attribute>
    -->
    <attribute name="secondaryConnectPort">4458</attribute>


○サーバ側(ブリッジ先)の設定

4458番ポートで待ち受けるように、「secondaryBindPort」に「4458」を設定します。
    サーバ側:
    deploy/jboss-messaging.sar/remoting-bisocket-service.xml

    (編集前)
    <!-- Use these parameters to specify values
         for binding and connecting control connections
         to work with your firewall/NAT configuration
    <attribute name="secondaryBindPort">xyz</attribute>
    <attribute name="secondaryConnectPort">abc</attribute>
    -->

    (編集後)
    <!-- Use these parameters to specify values
         for binding and connecting control connections
         to work with your firewall/NAT configuration
    <attribute name="secondaryConnectPort">abc</attribute>
    -->
    <attribute name="secondaryBindPort">4458</attribute>

以上です。