Message Routing 샘플에서는 데이터베이스 테이블을 사용하여 메시지 플로우가 WebSphere MQ 큐로 메시지를 라우트하는 데 사용할 수 있는 라우팅 정보를 저장하는 방법을 보여줍니다. 이는 메시지 플로우 Compute 노드에서 하드 코드된 라우팅 정보를 작성하기 위한 대체 접근 방법입니다.
다음과 같은 이유로 WebSphere Message Broker에서 모든 형식의 라우팅이나 변화 데이터를 저장할 때 데이터베이스 테이블은 사용하는 것이 좋습니다.
데이터베이스를 사용하여 이 정보를 저장할 때의 한 가지 문제점은 메시지 플로우를 통해 메시지를 전달할 때마다 데이터베이스에 액세스해야 하는 성능상의 오버헤드입니다.
WebSphere Message Broker 버전 6.0 이전에는 ESQL에서 하드 코드된 라우팅이나 맵핑 정보를 사용할 것인지 또는 데이터베이스 테이블을 사용하여 정보를 저장할 것인지에 대한 설계를 결정했습니다. 결정은 종종 데이터베이스 사용에 대한 성능 비용이 수용 가능한지 여부를 기초로 합니다. 높은 메시지 처리 비율을 위해, 데이터베이스 테이블에서 유지보수하기 쉬운 하드 코드된 정보를 작성하도록 결정했습니다.
버전 6.0에서 공유 변수 개념이 도입되었습니다. 공유 변수에서는 플로우를 사용하는 모든 메시지에서 사용 가능한 메시지 플로우에 상태를 저장할 수 있습니다. 공유 변수 사용법에 대한 정확한 세부사항은 DECLARE 변수에 있습니다. 공유 변수를 사용하면 데이터베이스 테이블을 메시지 플로우의 메모리 내에 저장할 수 있습니다. 이렇게 하면 데이터베이스 테이블에 연속적으로 액세스하지 않아도 되므로, 성능상의 오버헤드 없이 데이터베이스 테이블 사용의 모든 장점을 이용할 수 있습니다. 한 가지 장점이 제외됩니다. 캐시는 데이터베이스 테이블이 변경되어도 변경사항을 선택하지 않습니다. 변경사항을 선택하려면 메시지 플로우를 재시작하거나, 메시지 플로우에 새로 고침 메커니즘을 추가해야 합니다.
Message Routing 샘플에서는 데이터베이스 테이블을 사용하여 메시지 플로우에서 메시지를 라우트하는 방법과 메시지 플로우가 공유 변수를 사용하여 데이터베이스 테이블을 저장하는 방법을 보여줍니다. 또한 메시지 플로우를 재시작하거나 새로 고침 메시지를 메시지 플로우로 송신하여 캐시된 데이터베이스 테이블을 새로 고치는 방법도 보여줍니다.
Message Routing 샘플에는 두 개의 메시지 플로우가 포함됩니다.
데이터베이스 테이블을 사용하여 메시지를 라우트하는 방법에 관한 샘플. 이 간단한 메시지 플로우는 WebSphere MQSeries 큐에서 메시지를 읽고, 데이터베이스 테이블에 있는 데이터를 기초로 목적지 목록을 작성한 후 목적지 목록에 있는 항목으로 메시지를 라우트합니다.
공유 변수에 저장된 캐시 버전의 데이터베이스 테이블을 사용하여 메시지를 라우트하는 방법에 관한 샘플. 메시지 플로우에는 두 개의 기본 서브플로우가 있습니다. 첫 번째 서브플로우는 공유 변수를 사용하는 것을 제외하면 Routing_using_database_table 메시지 플로우와 기능이 동일합니다. 두 번째 서브플로우는 공유 메모리 변수를 새로 고치는 데 사용됩니다.
Message Routing 샘플을 구동시키는 데 사용된 테스트 메시지는 고객에 대한 송장(invoice) 세부사항이 들어 있는 간단한 XML 메시지입니다.
<SaleEnvelope> <Header> <SaleListCount>1</SaleListCount> </Header> <SaleList> <Invoice> <Initial>T</Initial> <Initial>D</Initial> <Surname>Montana</Surname> <Item><Code>00</Code> <Code>01</Code><Code>02</Code> <Description>Twister</Description> <Category>Games</Category> <Price>00.30</Price> <Quantity>01</Quantity> </Item> <Item> <Code>02</Code><Code>03</Code><Code>01</Code> <Description>The Times Newspaper</Description> <Category>Books and Media</Category> <Price>00.20</Price> <Quantity>01</Quantity> </Item> <Balance>00.50</Balance> <Currency>Sterling</Currency> </Invoice> </SaleList> <Trailer> <CompletionTime>12.00.00</CompletionTime> </Trailer> </SaleEnvelope>
<Initial> 및 <Surname> 필드는 각 고객의 목적지 큐를 찾기 위해 데이터베이스 찾아보기를 수행할 때 사용됩니다.
샘플 메시지 플로우에서는 동일한 데이터베이스 테이블을 사용하여 라우팅 정보를 가져옵니다. 데이터베이스 테이블에는 다섯개의 열이 있으며, 처음 세 개에는 수신되는 메시지에서 도출한 찾아보기 정보가 들어 있고, 나머지 두 열에는 메시지를 라우트할 큐 및 큐 관리자의 세부사항이 들어 있습니다. 열은 다음과 같습니다.
열 | 설명 |
Variable1 | 목적지 큐 찾아보기에 사용된 첫 번째 변수(샘플에서 하드 코딩된 것으로 XML 메시지에서 도출되지 않음) |
Variable2 | 목적지 큐 찾아보기에서 사용된 두 번째 변수(<Initial> 필드를 사용하여 XML 메시지에서 도출됨) |
Variable3 | 목적지 큐 찾아보기에서 사용된 세 번째 변수(<Surname> 필드를 사용하여 XML 메시지에서 도출됨) |
Queue_manager | 목적지 큐 관리자 이름 |
Queue_name | 목적지 큐 이름 |
데이터베이스 테이블 정의는 데이터베이스 디렉토리에 있는 샘플 메시지 플로우 프로젝트에서 제공됩니다. 데이터베이스 테이블은 수신되는 XML 메시지로 직접 링크되지 않으므로 다른 많은 라우팅 메시지에서 이 테이블을 다시 사용할 수 있습니다. 이런 경우, 첫 번째 변수는 동일한 테이블을 사용하는 여러 노드와 차별화하는 데 사용될 수 있습니다.
메시지 플로우의 메시지 플로우 Compute 노드 각각에는 필요한 작동을 위해 수행한 조치에 대해 정확히 설명하는 자세한 ESQL 주석이 들어 있습니다.
샘플의 데이터베이스 컨텐츠를 보는 방법은 설치된 데이터베이스 제품에 따라 다릅니다. DB2 데이터베이스의 경우에는 DB2가 제공하는 도구를 사용하십시오(예: DB2 제어 센터). 데이터베이스 제품을 설치하지 않으면 샘플이 Apache Derby 데이터베이스를 사용합니다. Derby 데이터베이스에서 데이터를 보는 방법에 관한 지시사항은 Derby 데이터베이스의 컨텐츠 보기를 참조하십시오.