この CookBook では、分散環境での IM-Notice (デスクトップ版)の設定方法について紹介しています。
分散環境の構成として、以下のような 2 台構を考えます。
マシン | IPアドレス |
---|---|
AP1 | 192.168.0.1 |
AP2 | 192.168.0.2 |
この時、以下のように設定してしまうと、
im-notice-mq-config.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<?xml version="1.0" encoding="UTF-8"?> <im-notice-mq-config xmlns="http://www.intra-mart.jp/notice/mq/config/im-notice-mq-config" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.intra-mart.jp/notice/mq/config/im-notice-mq-config ../schema/im-notice-mq-config.xsd"> <address bind="true">tcp://*:40608</address> <ping enable="true" interval-seconds="60" time-to-live-seconds="70" /> <endpoints> <endpoint>tcp://192.168.0.1:40608</endpoint> </endpoints> <zmq-io-threads>1</zmq-io-threads> <zmq-max-sockets>1024</zmq-max-sockets> <zmq-linger>1000</zmq-linger> </im-notice-mq-config> |
上図のように、IM-Notice(デスクトップ版)が 192.168.0.1:40608 にのみ接続するようになってしまい、192.168.0.2:40608 には接続していないため、192.168.0.2(AP2) で発生したメッセージ送信処理がデスクトップ通知されない、という状態が発生します。
次に、以下のような 2 台 AP サーバ + Load Balancer 構成の分散環境を考えます。
マシン | IPアドレス |
---|---|
AP1 | 192.168.0.1 |
AP2 | 192.168.0.2 |
LB | 192.168.0.3 |
この時、以下のように設定したとします。
im-notice-mq-config.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<?xml version="1.0" encoding="UTF-8"?> <im-notice-mq-config xmlns="http://www.intra-mart.jp/notice/mq/config/im-notice-mq-config" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.intra-mart.jp/notice/mq/config/im-notice-mq-config ../schema/im-notice-mq-config.xsd"> <address bind="true">tcp://*:40608</address> <ping enable="true" interval-seconds="60" time-to-live-seconds="70" /> <endpoints> <endpoint>tcp://192.168.0.3:40608</endpoint> </endpoints> <zmq-io-threads>1</zmq-io-threads> <zmq-max-sockets>1024</zmq-max-sockets> <zmq-linger>1000</zmq-linger> </im-notice-mq-config> |
上図のように、LB によって 192.168.0.1 にのみ接続する、もしくは、192.168.0.2 にのみ接続する、という状況にしかなりません。
以上をまとめると、AP サーバを複数台で運用している場合、デスクトップ通知の通知機能(通知履歴ではなく、ポップアップ表示される通知機能)を利用するには、IM-Notice Broker の導入が必須です。
IM-Notice Broker は、下図のように、複数台の AP サーバのコネクションを一つにまとめる機能を提供します。
これにより、分散環境でも通知機能を利用できるようになります。
Broker を利用した場合の設定を以下で紹介します。
次のような分散環境を考えます。
マシン | IPアドレス |
---|---|
AP1 | 192.168.0.1 |
AP2 | 192.168.0.2 |
Broker | 192.168.0.3 |
AP1/AP2 共に、以下のように設定します。
im-notice-mq-config.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<?xml version="1.0" encoding="UTF-8"?> <im-notice-mq-config xmlns="http://www.intra-mart.jp/notice/mq/config/im-notice-mq-config" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.intra-mart.jp/notice/mq/config/im-notice-mq-config ../schema/im-notice-mq-config.xsd"> <address bind="false">tcp://192.168.0.3:40609</address> <ping enable="true" interval-seconds="60" time-to-live-seconds="70" /> <endpoints> <endpoint>tcp://192.168.0.3:40608</endpoint> </endpoints> <zmq-io-threads>1</zmq-io-threads> <zmq-max-sockets>1024</zmq-max-sockets> <zmq-linger>1000</zmq-linger> </im-notice-mq-config> |
bind="false" に変更しているのがポイントで、これにより、AP サーバはポートを Open しなくなります。
代わりに、tcp://192.168.0.3:40609 (Broker のバックエンド)に対してデータを送信します。
endpoint に tcp://192.168.0.3:40608 (Broker のフロントエンド)を指定することで、IM-Notice(デスクトップ版)は tcp://192.168.0.3:40608 に接続し、通知データの受信を待機します。
ブローカーの im-notice-mq-broker-config.xml はデフォルトで問題ありません。
im-notice-mq-broker-config.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<?xml version="1.0" encoding="UTF-8"?> <im-notice-mq-broker-config xmlns="http://www.intra-mart.jp/notice/mq/broker/config/im-notice-mq-broker-config" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.intra-mart.jp/notice/mq/broker/config/im-notice-mq-broker-config ../schema/im-notice-mq-broker-config.xsd"> <frontend>tcp://*:40608</frontend> <backend>tcp://*:40609</backend> <ping enable="false" interval-seconds="0" /> <zmq-io-threads>1</zmq-io-threads> <zmq-max-sockets>1024</zmq-max-sockets> <zmq-backend-linger>1000</zmq-backend-linger> <zmq-frontend-linger>1000</zmq-frontend-linger> </im-notice-mq-broker-config> |
このように、AP サーバを複数台で運用している場合、IM-Notice(デスクトップ版)の通知機能(ダイアログやバルーンで表示される通知機能)を利用するためには、IM-Notice Broker の利用が必須です。
設定方法は本記事の例を参考にしてください。