본 장에서는 JEUS MQ의 Message Bridge 기능과 메시지 정렬 기능에 대해 설명한다.
Message Bridge는 2가지의 서로 다른 MQ를 연결해주는 기능이다.
Message Bridge 기능은 JEUS MQ와는 별도로 동작할 수 있다. 즉, JMS Engine을 기동하지 않은 상태에서 다른 2개의 MQ를 연결하는 것이 가능하다.
연결하는 서로 다른 MQ는 다음의 경우를 포함한다.
동일한 MQ 서비스의 다른 버전
서로 호환이 되지 않는 다른 버전의 JEUS MQ 간의 연결
각기 다른 MQ 서비스
Weblogic 등 타 벤더의 MQ와 JEUS MQ와의 연결
[주의사항]
연결할 수 있는 MQ 서비스에는 제한이 없기 때문에 JEUS MQ 서비스의 동일한 버전 간에도 Message Bridge를 설정할 수 있지만 그러한 설정을 하는 것은 추천하지 않는다.
JEUS MQ 서비스의 버전이 동일할 경우에는 클라이언트를 직접 원격 Destination에 붙여서 사용하는 것이 더 안전하고, 효율적이다. 굳이 동일한 버전의 JEUS MQ 서비스 간의 Bridge를 설정해야 한다면 Bridge가 설정된 서버의 실행 스크립트에 다음의 옵션을 추가해야 한다.
-Djeus.jms.client.use-single-server-entry=false
Message Bridge 기능을 사용하기 위해 다음과 같이 설정한다. Message Bridge는 JEUS의 MQ와는 별도로 동작하기 때문에 JEUSMain.xml의 <resource>/<message-bridge> 태그 아래에 설정한다.
다음은 JEUS 6의 MQ로부터 Weblogic 10.3의 MQ로의 Bridge를 설정한 예제이다.
[예 6.1] Message Bridge 설정 : <<JEUSMain.xml>>
. . . . . . <resource> <message-bridge> <bridge-connections> <connection> <name>jeus6</name> <classpath> file:///home/seunghoon/workspace/jeus6/lib/client/clientcontainer.jar </classpath> <jndi-provider-url>127.0.0.1:19736</jndi-provider-url> <jndi-initial-context-factory>jeus.jndi.JNSContextFactory </jndi-initial-context-factory> <connection-factory>XAQueueConnectionFactory</connection-factory> <xa-support>false</xa-support> </connection> <connection> <name>weblogic103</name> <classpath> file:///home/seunghoon/bea/wlserver_10.3/server/lib/wljmsclient.jar </classpath> <jndi-provider-url>t3://localhost:7001 </jndi-provider-url> <jndi-initial-context-factory> weblogic.jndi.WLInitialContextFactory </jndi-initial-context-factory> <connection-factory>QueueConnectionFactory</connection-factory> <xa-support>false</xa-support> </connection> </bridge-connections> <bridges> <bridge> <name>bridge1</name> <source> <connection-name>jeus6</connection-name> <destination>ExamplesQueue</destination> <type>queue</type> </source> <target> <connection-name>weblogic103</connection-name> <destination>ExamplesQueue</destination> <type>queue</type> </target> </bridge> </bridges> </message-bridge> </resource>
다음은 <message-bridge>의 하위 태그에 대한 설명이다.
연결할 특정 MQ를 나타내는 설정이다.
<bridge-connection>에서 설정한 MQ들간의 연결(Bridge) 자체를 나타내는 설정이다.
하나의 Bridge를 나타낸다.
<bridge>의 하위 항목들은 다음과 같다.
<name> : 해당 Bridge의 이름을 나타낸다.
<source> : 해당 Bridge가 메시지를 받아올 MQ와 그 MQ의 특정 Destination을 나타낸다.
태그 | 설명 |
---|---|
<connection-name> | <bridge-connection>에 설정한 이름들 중 하나를 설정한다. |
<destination> | 해당 MQ의 특정 Destination을 설정한다. |
<type> | 해당 Destination의 타입을 설정한다. queue와 topic 중 하나를 지정할 수 있다. |
<target> : 해당 Bridge가 받아온 메시지를 전달할 MQ와 그 MQ의 특정 Destination을 나타낸다. 설정 방법은 <source>와 동일하다.
어떤 큐에 메시지 송신자만 있고 수신자가 없거나, 혹은 수신자가 있지만 수신하는 속도가 상대적으로 느릴 때, 해당 큐에는 메시지가 쌓일 수 있다. 이런 경우에 쌓이는 메시지를 사용자가 지정한 키값의 순서대로 정렬해주는 것이 메시지 정렬 기능이다.
큐와 마찬가지로 Durable Subscriber의 경우에도 메시지가 쌓일 수 있는데 이 경우에도 메시지 정렬 기능을 이용할 수 있다. 지정한 키값에는 JMS의 기본적인 프로퍼티값 또는 사용자가 지정한 프로퍼티(User Property)값들이 포함된다.
본 절에서는 메시지 정렬 기능을 사용하기 위해 필요한 서버와 클라이언트의 설정에 대해 설명한다.
메시지 정렬 기능을 사용하기 위해서는 서버에 다음과 같이 설정해야 한다.
[예 6.2] 메시지 정렬을 위한 서버 설정 : <<JMSMain.xml>>
<?xml version="1.0" encoding="UTF-8"?> <jms-server xmlns="http://www.tmaxsoft.com/xml/ns/jeus"> <broker-name>example-broker1</broker-name> . . . . . . <message-sort> <name>example</name> <key>TEST</key> <type>Integer</type> <direction>ascending</direction> </message-sort> <destination> <type>queue</type> <name>ExamplesQueue</name> <message-sort>example</message-sort> </destination> </jms-server>
다음은 설정 태그에 대한 설명이다.
<message-sort>
정렬의 키값이 될 프로퍼티 및 프로퍼티의 타입, 정렬의 방향등을 설정하고 Destination이나 Durable Subscriber에 이 <message-sort>의 이름을 추가하면 해당 설정이 적용된다.
지정한 키값에 해당하지 않는 메시지들은 정렬의 대상이 되지 않는다. 이 경우에는 최대한 원래의 순서가 보장된다. 즉, 키값에 해당하는 메시지와 그렇지 않은 메시지들이 혼합되어서 큐에 쌓일 경우 키값에 해당하는 메시지들은 설정에 따라 정렬이 되고 그렇지 않은 메시지들은 메시지들 간의 원래의 순서가 보장된다.
클라이언트에서는 정렬의 대상이 될 메시지에, 정렬의 기준이 될 키값을 프로퍼티로 설정한다.
다음의 예시와 같이 설정하면, 프로퍼티의 키로 "TEST_KEY"를 설정한 메시지들끼리 정렬된다.
Message msg = session.createTextMessage("Test"); msg.setIntProperty("TEST_KEY", 1);