Message Routing 샘플 확장

Message Routing 샘플 ESQL은 아주 조금만 변경하면 다른 메시지 플로우에서 사용하도록 수정할 수 있는 방식으로 설계되었습니다.

Routing_using_memory_cache 메시지 플로우 재사용

ESQL 파일 Routing_using_memory_cache에는 캐시된 샘플 버전에 사용된 모든 ESQL이 포함됩니다. 이 파일을 열고 다음 절을 찾으십시오(ESQL에서 Section 1로 표시됨).

Routing_using_memory_cache.esql

ESQL이 라우트하려는 메시지를 기초로 강조표시된 세 부분(절 1, 2 및 3)을 변경해야 합니다.

  1. 세 개의 ESQL 변수(Variable1, Variable2, Variable3)는 Compute 노드가 데이터베이스 테이블에 있는 목적지 큐 관리자와 큐를 찾아보는 데 사용합니다. 이러한 변수는 수신되는 메시지에서 도출하거나 하드 코드될 수 있습니다. 샘플에서 첫 번째 값은 하드 코드된 것이고 나머지 두 값은 수신되는 XML 메시지에서 도출한 것입니다. 라우트할 수 있는 메시지의 각 유형별로 다른 값을 사용할 수 있도록 첫 번째 값이 하드 코드되었음을 알 수 있습니다. 이를 수행하면 서로 다른 많은 라우팅 데이터 세트에 하나의 데이터베이스 테이블만을 사용할 수 있습니다. 하드 코드된 값을 작성하려면 DECLARE문에서 값을 설정하십시오. 샘플에서 Variable1은 SAMPLE_QUEUES 값으로 설정됩니다.
  2. ESQL에 있는 이 절에서는 다른 두 변수를 설정하기 위해 메시지 정보를 사용하는 방법을 보여줍니다. 다른 메시지 유형이나 형식의 경우 라우팅에 사용되어야 하는 수신되는 메시지 필드를 참조하도록 이 부분을 완전히 다시 작성해야 합니다.
  3. 변수 설정에 문제가 있으면 디폴트 값이 설정됩니다. 샘플에서 변수는 디폴트 값으로 설정됩니다.

재사용할 때 ESQL 나머지를 변경하지 않은 채로 남겨 두어 다른 메시지 플로우에 라우팅 용량을 제공할 수 있습니다. 데이터베이스 테이블은 새 플로우에 필요한 새 항목으로 갱신해야 합니다. 메시지 플로우 프로젝트에서 샘플과 함께 제공되는 setupRoutingDatabase 데이터베이스 스크립트를 참조하십시오.

ESQL을 사용할 때 수행해야 하는 한 가지 중요한 사항은 Compute 노드 등록 정보의 모드가 다음 값 중 하나로 설정되었는지 확인하는 것입니다. 그렇지 않으면 라우팅 정보가 손실됩니다.

데이터베이스 ODBC 소스 이름도 Compute 노드 등록 정보에 추가되어야 합니다.

BEGIN ATOMIC ... END; 블록 범위 변경

BEGIN ATOMIC ... END;문은 Routing_using_memory_cache 메시지 플로우에서 한번에 하나의 스레드만이 메모리 캐시를 사용하는지를 확인하는 데 사용됩니다. ESQL에서 이 부분에 대한 단일 스레드 제한은 캐시를 동적으로 새로 고치려는 경우에만 중요합니다. 메시지 플로우 주기 동안 캐시를 새로 고치지 않아도 되는 경우, 최소 블록 범위는 캐시 초기화를 담당할 정도로만 축소될 수 있습니다. 다음 그림은 현재 ESQL을 보여줍니다(ESQL에서 Section 4로 표시됨).

시작 블록 이동
  1. BEGIN ATOMIC은 다음 ESQL이 해당 "END;"문에 도달할 때까지 단일 스레드로 진행될 것임을 알립니다.
  2. 숫자 4로 표시된 ESQL 주석은 캐시를 동적으로 새로 고치지 않으려는 경우 "END;"문이 이동할 수 있는 위치를 표시합니다.
  3. 현재 "END;"문은 새 "END;"가 위에서 설명한 마커 4로 표시된 경우 제거되어야 합니다.

이 수정이 완료되면, 캐시에서 큐 이름 찾아보기가 더 이상 단일 스레드로 진행되지 않습니다. 여러 다른 메시지는 캐시에서 동시에 읽을 수 있습니다.

외부 변수를 사용하여 다른 시스템에 전개하기 쉽도록 메시지 플로우 작성

외부 변수에서는 메시지 플로우에 있는 하드 코드된 값이 메시지 플로우 레벨로 확장되어 전개 시 수정할 수 있습니다. 메시지 플로우는 메시지 플로우 ESQL을 수정하지 않고 전개되는 환경으로 전개 시 사용자 정의될 수 있습니다.

Routing_using_memory_cache 메시지 플로우에는 데이터베이스 찾아보기를 수행하는 데 사용되는 Variable1 변수가 있습니다. 이는 SAMPLE_QUEUES 값으로 하드 코드되었습니다. 전개하는 시스템에 따라 값을 수정할 수 있도록 전개 시 이 변수를 구체화할 수 있습니다. 그러면 각 시스템에서 다른 큐와 큐 관리자 세트를 사용할 수 있지만 여전히 동일한 데이터베이스 테이블이 사용됩니다.

Variable1을 외부 변수로 변경하려면 다음을 수행하십시오.

  1. ESQL을 수정하여 외부 변수로 Variable1을 선언하십시오. DECLARE Variable1 CHAR 'SAMPLE_QUEUES'DECLARE Variable1 EXTERNAL CHAR 'SAMPLE_QUEUES'로 변경하십시오. ESQL은 다음과 같습니다.
    -- Section 1
    DECLARE Variable1 EXTERNAL CHAR 'SAMPLES_QUEUES';
    DECLARE Variable2 CHAR;
    DECLARE Variable3 CHAR;
  2. 외부 변수는 메시지 플로우 레벨에서 정의되어야 합니다. Routing_using_memory_cache 메시지 플로우를 열고 메시지 플로우 편집기 아래에 있는 사용자 정의 등록 정보 탭을 누르십시오. 새 등록 정보인 Variable1을 작성하고 디폴트 값을 SAMPLE_QUEUES로 설정하십시오.

    사용자 정의 등록 정보

  3. Variable1 변수는 이제 외부 변수입니다. 메시지 플로우를 BAR 파일에 추가하고 구성 탭을 누르십시오. 플로우에서 Compute 노드를 선택하면 변수 값을 변경할 수 있어야 합니다.

    BAR 파일 편집기

이 외부 변수를 사용하려면 ROUTING 데이터베이스 ROUTING_TABLE 테이블에서 다른 Variable1 매개변수가 있는 새 항목을 작성해야 합니다. Variable1 값을 변경하지 않고 플로우를 전개하는 경우, 위에서처럼 작동해야 합니다. (Variable1은 디폴트 SAMPLE_QUEUES로 설정되어야 합니다.)

캐시 새로 고침 기준 변경

데이터베이스 테이블의 Message Routing 샘플 캐시에 대한 현재 새로 고침 기준은 다음과 같습니다.

캐시를 새로 고칠 시기를 결정하기 위해 다른 기준을 사용할 수 있는 경우에 이 기준이 유용합니다. 가능한 기준은 다음과 같을 수 있습니다.

  1. 주어진 시간 이후에 캐시 새로 고침
  2. 주어진 메시지 수 이후에 캐시 새로 고침

샘플은 위의 기준을 사용하도록 쉽게 변경할 수 있습니다. ESQL에서 캐시를 새로 고치기 위한 중요한 위치는 다음과 같습니다.

기준의 ESQL

60초 시간 간격을 사용하여 새로 고침 기준을 변경하려면 다음을 수행하십시오.

  1. ESQL에서 빨간색으로 표시된 기준을 다음과 같이 변경하십시오.

    IF CacheQueueTable.LastUpDate is null or (CURRENT_TIMESTAMP - CacheQueueTable.LastUpDate) second > INTERVAL '60' SECOND THEN

  2. SET CacheQueueTable.valid = true;를 다음과 같이 변경하십시오.

    SET CacheQueueTable.LastUpDate = CURRENT_TIMESTAMP;

100개의 메시지 이후에 새로 고침 기준이 적용되도록 변경하려면 다음을 수행하십시오.

  1. ESQL에서 빨간색으로 표시된 기준을 다음과 같이 변경하십시오.

    IF CacheQueueTable.MessageCount is null or CacheQueueTable.MessageCount > 100 SECOND THEN

  2. SET CacheQueueTable.valid = true;를 다음과 같이 변경하십시오.

    SET CacheQueueTable.MessageCount = 0;

  3. ESQL 모듈 끝에 명령문을 추가하여 계수를 증가시키십시오.

    SET CacheQueueTable.MessageCount = CacheQueueTable.MessageCount +1;

기본 페이지 아이콘   샘플 홈으로 돌아가기