IM-Notice Broker の設定方法

この CookBook では、分散環境での IM-Notice (デスクトップ版)の設定方法について紹介しています。

分散環境の構成として、以下のような 2 台構を考えます。

マシン IPアドレス
AP1 192.168.0.1
AP2 192.168.0.2

この時、以下のように設定してしまうと、

im-notice-mq-config.xml
<?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
<?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
<?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
<?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 の利用が必須です。
設定方法は本記事の例を参考にしてください。