この章では、Coherence*Extendを構成する手順について説明します。この手順は、基本設定を行うためのものであり、完全な構成方法を示すものではありません。また、追加の構成手順については、このガイドのプラットフォーム固有の項を参照してください。構成および設定も含むJavaの完全な例については、第4章「最初のExtendクライアントの構築」を参照してください。
この章は次の項で構成されています。
Coherence*Extendでは、クライアント側とクラスタ側の両方の構成が必要です。クラスタ側では、クライアント・リクエストを受け入れるために拡張プロキシ・サービスが設定されます。プロキシ・サービスを使用することにより、クラスタ上で実行されているキャッシュ・サービス・インスタンスおよび起動サービス・インスタンスにアクセスできます。クライアント側では、リモート・キャッシュ・サービスおよびリモート起動サービスを構成し、それを使用して拡張プロキシ・サービス経由でクラスタにアクセスします。Extendクライアントと拡張プロキシ・サービスの間の通信にはTCP/IPが使用されます。
拡張プロキシ・サービスは、キャッシュ構成デプロイメント・ディスクリプタで構成されます。このデプロイメント・ディスクリプタは、多くの場合、クラスタ側のキャッシュ構成ファイルと呼ばれます。これは、クラスタでキャッシュを設定する際に使用するキャッシュ構成ファイルと同じです。Extendクライアントも、キャッシュ構成デプロイメント・ディスクリプタを使用して構成されます。このデプロイメント・ディスクリプタは、クライアントでデプロイされ、多くの場合、クライアント側のキャッシュ構成ファイルと呼ばれます。キャッシュ構成デプロイメント・ディスクリプタの詳細は、『Oracle Coherence開発者ガイド』のキャッシュ構成ファイルの指定に関する項を参照してください。
Coherenceクラスタには、Extendクライアントの接続を受け入れるための拡張プロキシ・サービスと、クライアントでデータを取得して格納する際に使用するキャッシュが組み込まれている必要があります。拡張プロキシ・サービスもキャッシュも、クラスタのキャッシュ構成デプロイメント・ディスクリプタで構成されます。拡張プロキシ・サービスおよびキャッシュは、キャッシュ・サーバー(DefaultCacheServer
)のプロセスの一環として開始されます。
この項は、次のトピックで構成されています。
拡張プロキシ・サービス(ProxyService
)は、ExtendクライアントからTCP/IPを使用してCoherenceクラスタにアクセスできるクラスタ・サービスです。プロキシ・サービスには、CacheService
クラスタ・サービス(クライアントからキャッシュへのアクセスに使用)、およびInvocationService
クラスタ・サービス(クライアントがクラスタ上でInvocable
オブジェクトを実行する際に使用)の2種類のクラスタ・サービス用のプロキシが組み込まれています。
この項は、次のトピックで構成されています。
拡張プロキシ・サービスは、<caching-schemes>
ノード内で、<proxy-scheme>
要素を使用して構成します。<proxy-scheme>
要素には、子要素の<tcp-acceptor>
があり、この子要素には、TCP/IPクライアント通信のために拡張プロキシ・サービスがリスニングするアドレス(IPまたはDNS名)およびポートが含まれます。<proxy-scheme>
のすべてのサブ要素の一覧と説明は、『Oracle Coherence開発者ガイド』のproxy-scheme要素参照を参照してください。
例3-1では、198.168.1.5
およびポート9099
にバインドされているTCP/IP ServerSocket
でクライアント・リクエストをリスニングするように設定されている、ExtendTcpProxyService
という名前のプロキシ・サービスを定義します。キャッシュと起動の両方のクラスタ・サービス・プロキシが、クライアント・リクエストに対して有効になっています。さらに、クラスタ・ノードでサービスが自動的に開始されるように、<autostart>
要素がtrue
に設定されています。
例3-1 拡張プロキシ・サービスの構成
... <caching-schemes> ... <proxy-scheme> <service-name>ExtendTcpProxyService</service-name> <acceptor-config> <tcp-acceptor> <local-address> <address>192.168.1.5</address> <port>9099</port> </local-address> </tcp-acceptor> </acceptor-config> <proxy-config> <cache-service-proxy> <enabled>true</enabled> </cache-service-proxy> <invocation-service-proxy> <enabled>true</enabled> </invocation-service-proxy> </proxy-config> <autostart>true</autostart> </proxy-scheme> </caching-schemes> ...
注意: わかりやすいように、前述の例では、キャッシュおよび起動のクラスタ・サービス・プロキシを明示的に有効にしています。ただし、いずれのプロキシもデフォルトで有効なため、<cache-service-proxy> 要素と<invocation-service-proxy> 要素をプロキシ・スキーム定義に含める必要はありません。 |
予想されるクライアント接続数をサポートするため、およびフォルト・トレランスをサポートするために、拡張プロキシ・サービスはいくつでも設定できます。フォルト・トレランスの詳細は、「リモート・アドレス用のフォルト・トレランスの構成」を参照してください。
次の例では、2つの拡張プロキシ・サービスを定義します。ExtendTcpProxyService1
は、198.168.1.5
およびポート9099
にバインドされているTCP/IP ServerSocket
でクライアント・リクエストをリスニングするように設定します。ExtendTcpProxyService2
は、198.168.1.6
およびポート9099
にバインドされているTCP/IP ServerSocket
でクライアント・リクエストをリスニングするように設定します。
... <caching-schemes> ... <proxy-scheme> <service-name>ExtendTcpProxyService1</service-name> <acceptor-config> <tcp-acceptor> <local-address> <address>192.168.1.5</address> <port>9099</port> </local-address> </tcp-acceptor> </acceptor-config> <autostart>true</autostart> </proxy-scheme> <proxy-scheme> <service-name>ExtendTcpProxyService2</service-name> <acceptor-config> <tcp-acceptor> <local-address> <address>192.168.1.6</address> <port>9099</port> </local-address> </tcp-acceptor> </acceptor-config> <autostart>true</autostart> </proxy-scheme> </caching-schemes> ...
キャッシュ・サービス・プロキシと起動サービス・プロキシは、拡張プロキシ・サービス定義内で無効化できます。これらのプロキシはいずれもデフォルトで有効になっており、クライアントにサービスが不要な場合は明示的に無効化できます。
クラスタ・サービス・プロキシは、それぞれ<cache-service-proxy>
内および<invocation-service-proxy>
内で<enabled>
要素をfalse
に設定することによって無効にします。
次の例では、Extendクライアントがクラスタ内でInvocable
オブジェクトを実行できないように、起動サービス・プロキシを無効にします。
<proxy-scheme> ... <proxy-config> <invocation-service-proxy> <enabled>false</enabled> </invocation-service-proxy> </proxy-config> ... </proxy-scheme>
同様に、次の例では、Extendクライアントがクラスタ内のキャッシュへアクセスしないようにキャッシュ・サービス・プロキシを無効にします。
<proxy-scheme> ... <proxy-config> <cache-service-proxy> <enabled>false</enabled> </cache-service-proxy> </proxy-config> ... </proxy-scheme>
デフォルトでは、Extendクライアントは、プロキシ設定されたNamedCache
インスタンスに対するデータの読取りおよび書込みがいずれも許可されています。<cache-service-proxy>
要素内で<read-only>
要素を指定すると、Extendクライアントでは、クラスタ上でキャッシュされているコンテンツを変更できなくなります。例:
<proxy-scheme> ... <proxy-config> <cache-service-proxy> <read-only>true</read-only> </cache-service-proxy> </proxy-config> ... </proxy-scheme>
デフォルトでは、ExtendクライアントはNamedCache
ロックを取得できません。<cache-service-proxy>
要素内で<lock-enabled>
要素を指定すると、Extendクライアントでロックを実行できます。例:
<proxy-scheme> ... <proxy-config> <cache-service-proxy> <lock-enabled>true</lock-enabled> </cache-service-proxy> </proxy-config> ... </proxy-scheme>
クライアント側のロックを有効にして、クライアント・アプリケーションでNamedCache.lock()
メソッドおよびunlock()
メソッドを使用する場合は、パーティション化またはレプリケートされたキャッシュを使用するときに、(スレッドベースではなく)メンバーベースのロック方針を構成することが重要です。ロック方針は、クラスタ側のキャッシュを定義するときに、<lease-granularity>
要素を使用して構成します。粒度の値がthread
(デフォルト設定)の場合、ロックはそのロックを取得したスレッドによって保持され、そのスレッドによってのみ解放されます。粒度の値がmember
の場合、ロックはクラスタ・ノードによって保持され、ロックを取得したクラスタ・ノード上で実行される任意のスレッドによって解放できます。拡張プロキシ・クラスタ・サービスではクライアント・リクエストを同時実行するスレッド・プールが使用されるため、同じExtendクライアントからの後続のリクエストが同じスレッドで実行される保証はありません。
次の例では、パーティション化されたキャッシュに関してリース粒度をmember
に設定する場合を示します。
... <distributed-scheme> <scheme-name>dist-default</scheme-name> <lease-granularity>member</lease-granularity> <backing-map-scheme> <local-scheme/> </backing-map-scheme> <autostart>true</autostart> </distributed-scheme> ...
Extendクライアントは、クラスタ上のキャッシュに対してデータの読取りおよび書込みを行います。クライアント・データの格納には、どんなキャッシュ・タイプでも使用できます。Extendクライアントの場合、クラスタ上のキャッシュは、クライアント側で使用されているキャッシュと同じ名前である必要があります。「リモート・キャッシュの定義」を参照してください。キャッシュの定義の詳細は、『Oracle Coherence開発者ガイド』のキャッシュの使用方法に関する項を参照してください。
次の例では、dist-extend
という名前のパーティション化されたキャッシュを定義します。
<?xml version="1.0"?> <!DOCTYPE cache-config SYSTEM "cache-config.dtd"> <cache-config> <caching-scheme-mapping> <cache-mapping> <cache-name>dist-extend</cache-name> <scheme-name>dist-default</scheme-name> </cache-mapping> </caching-scheme-mapping> <caching-schemes> <distributed-scheme> <scheme-name>dist-default</scheme-name> <backing-map-scheme> <local-scheme/> </backing-map-scheme> <autostart>true</autostart> </distributed-scheme> </caching-schemes> </cache-config>
Extendクライアントは、リモート・キャッシュ・サービスおよびリモート起動サービスを使用して、Coherenceクラスタと相互作用します。これらのサービスは、クラスタ上で実行されている拡張プロキシ・サービスに接続するように構成する必要があります。リモート・キャッシュ・サービスとリモート起動サービスはいずれも、拡張ベースのクライアント・アプリケーションが起動するときにクラスパス上で検出されるキャッシュ構成・デプロイメント・ディスクリプタで構成されます。
この項は、次のトピックで構成されています。
リモート・キャッシュとは、キャッシュ操作をクラスタ上のキャッシュにルーティングする、専用のキャッシュ・サービスです。リモート・キャッシュとクラスタ上のキャッシュは、同じ名前である必要があります。Extendクライアントでは、NamedCache
インタフェースを通常どおりに使用して、キャッシュのインスタンスを取得します。実行時、キャッシュ操作は、ローカルでは実行されず、TCP/IPを使用してクラスタ上の拡張プロキシ・サービスに送信されます。キャッシュ操作をクラスタ上のキャッシュに委任する処理は、Extendクライアントに対して透過的に行われます。
リモート・キャッシュは、<caching-schemes>
ノード内で、<remote-cache-scheme>
要素を使用して定義されます。クライアントの接続先のクラスタ上にある拡張プロキシ・サービスのアドレス(IPまたはDNS名)およびポートを定義するには、<tcp-initiator>
要素を使用します。<remote-cache-scheme>
のすべてのサブ要素の一覧と説明は、『Oracle Coherence開発者ガイド』のremote-cache-scheme要素参照を参照してください。
表3-0では、アドレス198.168.1.5
、ポート9099
でリスニングしている拡張プロキシ・サービスに接続する、dist-extend
という名前のリモート・キャッシュを定義します。このリモート・キャッシュを使用するには、同じくdist-extend
という名前の、クラスタ上で定義されたキャッシュが存在する必要があります。クラスタ上でのキャッシュ定義の詳細は、「Extendクライアントで使用するキャッシュの定義」を参照してください。
例3-2 リモート・キャッシュの定義
<?xml version="1.0"?> <!DOCTYPE cache-config SYSTEM "cache-config.dtd"> <cache-config> <caching-scheme-mapping> <cache-mapping> <cache-name>dist-extend</cache-name> <scheme-name>extend-dist</scheme-name> </cache-mapping> </caching-scheme-mapping> <caching-schemes> <remote-cache-scheme> <scheme-name>extend-dist</scheme-name> <service-name>ExtendTcpCacheService</service-name> <initiator-config> <tcp-initiator> <remote-addresses> <socket-address> <address>198.168.1.5</address> <port>9099</port> </socket-address> </remote-addresses> <connect-timeout>10s</connect-timeout> </tcp-initiator> <outgoing-message-handler> <request-timeout>5s</request-timeout> </outgoing-message-handler> </initiator-config> </remote-cache-scheme> </caching-schemes> </cache-config>
Extendクライアントでは通常、リモート・キャッシュをニア・キャッシュの一部として使用します。この場合、ローカル・キャッシュをフロント・キャッシュとして使用し、リモート・キャッシュをバック・キャッシュとして使用します。詳細は、「C++クライアント用ニア・キャッシュの定義」および「.NETクライアント用ニア・キャッシュの定義」をそれぞれ参照してください。
次の例では、ローカル・キャッシュとリモート・キャッシュを同時に使用するニア・キャッシュを作成します。
<?xml version="1.0"?> <!DOCTYPE cache-config SYSTEM "cache-config.dtd"> <cache-config> <cache-scheme-mapping> <cache-mapping> <cache-name>dist-extend-near</cache-name> <scheme-name>extend-near</scheme-name> </cache-mapping> </caching-scheme-mapping> <caching-schemes> <near-scheme> <scheme-name>extend-near</scheme-name> <front-scheme> <local-scheme> <high-units>1000</high-units> </local-scheme> </front-scheme> <back-scheme> <remote-cache-scheme> <scheme-ref>extend-dist</scheme-ref> </remote-cache-scheme> </back-scheme> <invalidation-strategy>all</invalidation-strategy> </near-scheme> <remote-cache-scheme> <scheme-name>extend-dist</scheme-name> <service-name>ExtendTcpCacheService</service-name> <initiator-config> <tcp-initiator> <remote-addresses> <socket-address> <address>localhost</address> <port>9099</port> </socket-address> </remote-addresses> <connect-timeout>10s</connect-timeout> </tcp-initiator> <outgoing-message-handler> <request-timeout>5s</request-timeout> </outgoing-message-handler> </initiator-config> </remote-cache-scheme> </caching-schemes> </cache-config>
リモート起動スキームでは、クライアントがリモートのCoherenceクラスタでタスクを実行する際に使用する起動サービスを定義します。Extendクライアントでは、InvocationService
インタフェースを通常どおりに使用します。実行時に、拡張プロキシ・サービスに対してTCP/IP接続が行われ、InvocationService
の実装が返されます。これによって、クライアントの接続先のリモート・クラスタJVM内で同期Invocable
タスクが実行されます。
リモート起動スキームは、<caching-schemes>
ノード内で、<remote-invocation-scheme>
要素を使用して定義されます。クライアントの接続先のクラスタ上にある拡張プロキシ・サービスのアドレス(IPまたはDNS名)およびポートを定義するには、<tcp-initiator>
要素を使用します。<remote-invocation-scheme>
のすべてのサブ要素の一覧と説明は、『Oracle Coherence開発者ガイド』のremote-invocation-scheme要素参照を参照してください。
例3-3では、アドレス198.168.1.5
、ポート9099
でリスニングしている拡張プロキシ・サービスに接続する、ExtendTcpInvocationService
という名前のリモート起動スキームを定義します。
例3-3 リモート起動スキームの定義
<?xml version="1.0"?> <!DOCTYPE cache-config SYSTEM "cache-config.dtd"> <cache-config> ... <caching-schemes> ... <remote-invocation-scheme> <scheme-name>extend-invocation</scheme-name> <service-name>ExtendTcpInvocationService</service-name> <initiator-config> <tcp-initiator> <remote-addresses> <socket-address> <address>198.168.1.5</address> <port>9099</port> </socket-address> </remote-addresses> <connect-timeout>10s</connect-timeout> </tcp-initiator> <outgoing-message-handler> <request-timeout>5s</request-timeout> </outgoing-message-handler> </initiator-config> </remote-invocation-scheme> </caching-schemes> </cache-config>
リモート・キャッシュ・スキームとリモート起動スキームには、クライアントがいつでも必ずクラスタに接続できるように、拡張プロキシ・サービスのアドレスを複数含めることができます。すべてのアドレスを試すか、またはTCP/IP接続が確立されるまで、各アドレスがランダムな順序で試行されます。複数のアドレスを構成するには、必要に応じて、<remote-cache-scheme>
ノードおよび<remote-invocation-scheme>
ノードの<tcp-initiator>
要素内に、子要素<socket-address>
を追加します。次の例では、リモート・キャッシュ・スキームの拡張プロキシ・アドレスを2つ定義します。
... <remote-cache-scheme> <scheme-name>extend-dist</scheme-name> <service-name>ExtendTcpCacheService</service-name> <initiator-config> <tcp-initiator> <remote-addresses> <socket-address> <address>192.168.1.5</address> <port>9099</port> </socket-address> <socket-address> <address>192.168.1.6</address> <port>9099</port> </socket-address> </remote-addresses> </tcp-initiator> </initiator-config> </remote-cache-scheme> ...
Coherence*Extendサービスで(ネットワーク、ソフトウェアまたはハードウェア障害などに起因する)クライアントとクラスタ間の接続の切断が検出されると、Coherence*Extendクライアント・サービスの実装(CacheService
またはInvocationService
)により、登録されているすべてのMemberListeners
にMemberEvent.MEMBER_LEFT
イベントがディスパッチされ、サービスが停止します。アプリケーションがCacheFactory.shutdown()
をコールする場合は、サービスの実装により、MemberEvent.MEMBER_LEAVING
イベントと、続いてMemberEvent.MEMBER_LEFT
イベントがディスパッチされます。いずれの場合も、その後クライアント・アプリケーションでサービスを使用しようとすると、サービスが自動的に再起動され、クラスタとの再接続が試行されます。接続が確立されると、サービスはMemberEvent.MEMBER_JOINED
イベントをディスパッチします。接続に失敗した場合は、致命的な例外がクライアント・アプリケーションにスローされます。
Coherence*Extendサービスには、接続の切断を検出するためのメカニズムがいくつか用意されています。その中には、基礎となるTCP/IPプロトコルを継承するものや、サービス自体によって実装されるものがあります。後者のメカニズムは、<outgoing-message-handler>
要素内で構成します。
<request-timeout>
要素は、接続の切断を検出する主要メカニズムです。サービスがリモート・クラスタにリクエストを送信したものの、リクエストのタイムアウト時間内にレスポンスを受信しなかった場合、サービスでは接続が切断されたと想定されます。
警告:
|
次の例は、例3-2から抜粋したもので、リクエスト・タイムアウトを5
秒に設定する場合を示しています。
... <initiator-config> <tcp-initiator> <remote-addresses> <socket-address> <address>198.168.1.5</address> <port>9099</port> </socket-address> </remote-addresses> <connect-timeout>10s</connect-timeout> </tcp-initiator> <outgoing-message-handler> <request-timeout>5s</request-timeout> </outgoing-message-handler> </initiator-config> ...
<heartbeat-interval>
および<heartbeat-timeout>
も、接続の切断を検出するために使用できます。構成されたハートビートのタイムアウト時間内にサービスがレスポンスを受信しなかった場合、サービスでは接続が切断されたと想定されます。
次の例では、ハートビート間隔を500
ミリ秒に、ハートビート・タイムアウトを5
秒に設定します。
... <initiator-config> <tcp-initiator> <remote-addresses> <socket-address> <address>198.168.1.5</address> <port>9099</port> </socket-address> </remote-addresses> <connect-timeout>10s</connect-timeout> </tcp-initiator> <outgoing-message-handler> <heartbeat-interval>500ms</heartbeat-interval> <heartbeat-timeout>5s</heartbeat-timeout> </outgoing-message-handler> </initiator-config> ...
サーバー・ソケットにバインドするとき、アドレス・プロバイダを使用して、TCPアドレスおよびポートの設定を動的に割り当てることができます。このアドレス・プロバイダは、com.tangosol.net.AddressProvider
インタフェースの実装である必要があります。アドレスの動的割当ては通常、カスタムのロード・バランシング・アルゴリズムを実装するために使用します。
アドレス・プロバイダは、拡張プロキシ・スキームの場合は<tcp-acceptor>
要素内、リモート・キャッシュ・スキームおよびリモート起動スキームの場合は<tcp-initiator>
要素内で使用できる、<address-provider>
要素を使用して定義します。
注意: <address-provider> 要素では、ファクトリを使用したオブジェクトのインスタンス化もサポートされています。『Oracle Coherence開発者ガイド』の<address-provider> 要素参照を参照してください。 |
次の例は、拡張プロキシ・スキームを構成するときに、MyAddressProvider
という名前のAddressProvider
の実装をTCPアクセプタ用に構成する方法を示しています。
<proxy-scheme> <service-name>ExtendTcpProxyService</service-name> <thread-count>5</thread-count> <acceptor-config> <tcp-acceptor> <address-provider> <class-name>com.MyAddressProvider</class-name> </address-provider> </tcp-acceptor> </acceptor-config> <autostart>true</autostart> </proxy-scheme> </caching-schemes> </cache-config>
次の例は、リモート・キャッシュ・スキームを構成するときに、MyClientAddressProvider
という名前のAddressProvider
の実装をTCPイニシエータ用に構成する方法を示しています。
<remote-cache-scheme> <scheme-name>extend-dist</scheme-name> <service-name>ExtendTcpCacheService</service-name> <initiator-config> <tcp-initiator> <remote-addresses> <address-provider> <class-name>com.MyClientAddressProvider</class-name> </address-provider> </remote-addresses> <connect-timeout>10s</connect-timeout> </tcp-initiator> <outgoing-message-handler> <request-timeout>5s</request-timeout> </outgoing-message-handler> </initiator-config> </remote-cache-scheme>
Coherenceクラスタ・サービス同様、Coherence*Extendサービスはプラッガブルなネットワーク・フィルタをサポートします。フィルタを使用すると、送信前のネットワーク・トラフィックのコンテンツを変更できます。圧縮および対称暗号化フィルタを含む、ほとんどの標準的なCoherenceネットワーク・フィルタがサポートされます。フィルタの構成の詳細は、『Oracle Coherence開発者ガイド』の「ネットワーク・フィルタの使用方法」を参照してください。
Coherence*Extendでネットワーク・フィルタを使用するには、<use-filters>
要素を、クライアント側のキャッシュ構成ディスクリプタの<initiator-config>
要素とクラスタ側のキャッシュ構成ディスクリプタの<acceptor-config>
要素に追加する必要があります。
注意: <use-filters> 要素の内容は、クライアント側およびクラスタ側のキャッシュ構成ディスクリプタで同じにする必要があります。 |
たとえば、Extendクライアントとその接続先のクラスタ・サービスとの間で交換されるネットワーク・トラフィックを暗号化するには、次に示すように、クライアント側の<remote-cache-scheme>
要素および<remote-invocation-scheme>
要素を構成します(対称暗号化フィルタの名前がsymmetric-encryption
である場合)。
<remote-cache-scheme> <scheme-name>extend-dist</scheme-name> <service-name>ExtendTcpCacheService</service-name> <initiator-config> <tcp-initiator> <remote-addresses> <socket-address> <address>localhost</address> <port>9099</port> </socket-address> </remote-addresses> <connect-timeout>10s</connect-timeout> </tcp-initiator> <outgoing-message-handler> <request-timeout>5s</request-timeout> </outgoing-message-handler> <use-filters> <filter-name>symmetric-encryption</filter-name> </use-filters> </initiator-config> </remote-cache-scheme> <remote-invocation-scheme> <scheme-name>extend-invocation</scheme-name> <service-name>ExtendTcpInvocationService</service-name> <initiator-config> <tcp-initiator> <remote-addresses> <socket-address> <address>localhost</address> <port>9099</port> </socket-address> </remote-addresses> <connect-timeout>10s</connect-timeout> </tcp-initiator> <outgoing-message-handler> <request-timeout>5s</request-timeout> </outgoing-message-handler> <use-filters> <filter-name>symmetric-encryption</filter-name> </use-filters> </initiator-config> </remote-invocation-scheme>
クラスタ側では、クライアント側の構成と同じ名前(この例の場合はsymmetric-encryption
)のフィルタを指定する<use-filters>
要素を<proxy-scheme>
要素内に追加します。
<proxy-scheme> <service-name>ExtendTcpProxyService</service-name> <thread-count>5</thread-count> <acceptor-config> <tcp-acceptor> <local-address> <address>localhost</address> <port>9099</port> </local-address> </tcp-acceptor> <use-filters> <filter-name>symmetric-encryption</filter-name> </use-filters> </acceptor-config> <autostart>true</autostart> </proxy-scheme>