멀티바인딩 라우터

본 절에서는 멀티바인딩 라우터에서 서비스 분기방법과 룰에 대해서 설명한다.

1. 개요

AnyLink의 서비스들을 여러 가지 조건에 따라 선택적으로 분기하거나 멀티캐스트할 수 있는 기능을 제공하는 컴포넌트가 멀티바인딩 라우터이다.

멀티바인딩 라우터가 분기 혹은 멀티캐스트할 수 있는 서비스들은 AnyLink 내부 서비스들 즉, 서비스 플로우의 Receive 메시지 이벤트들, 어댑터의 아웃바운드 룰들, 그리고 또다른 멀티바인딩 라우터 룰 등을 모두 포함한다.

멀티바인딩 라우터 룰은 그 자체로서 하나의 AnyLink의 서비스로 간주된다. 즉, 어댑터의 파싱 룰을 통해서 멀티바인딩 룰을 호출할 수 있으며, 서비스 플로우의 서비스 액티비티들 중 멀티바인딩 액티비티, 또다른 멀티바인딩 룰을 통해서도 호출할 수 있다.

figure multibinding router routing
멀티바인딩 라우터 룰에 따른 서비스 분기

2. 멀티바인딩 룰

멀티바인딩 라우터의 룰은 다음과 같은 요소를 기본으로 구성된다.

  • 멀티바인딩 룰을 서비스로 노출하는 요청 메시지, 응답 메시지, 비정상 응답 메시지

  • 라우팅 규칙에 따라 호출할 대상 서비스 정보들

  • 라우팅 메소드와 서비스별 파라미터들

com.tmax.anylink.api.multibinding.DefaultRoutingHandler 클래스는 다음과 같은 메소드를 선언하고 있다.

String route(MessageContext ctx) throws AnyLinkException;

멀티바인딩 라우터에서 사용되는 라우팅 메소드와 파라미터의 의미는 다음과 같다.

라우팅 메소드 설명

Value

사용자가 변수를 정의하고 해당 변수의 값에 따라 라우팅한다.

RoundRobin

라운드로빈(round-robin) 방식으로 각 서비스들을 순차적으로 라우팅한다.

WeightBased

가중치를 고려한 라운드 로빈 라우팅이다.

Multicast

one-way 방식의 서비스일 때에만 사용 가능하며, 등록된 모든 엔트리로 전송한다.

TimeRange

지정된 시간대에 해당하는 서비스를 호출한다.

FlowCorrelation

서비스 플로우의 코릴레이션 방식이다.

값 매칭을 사용하여 가장 먼저 일치하는 서비스 항목으로 라우팅한다. 이때는 대상 서비스가 코릴레이션을 지원하는 서비스 플로우 메시지 이벤트여야 한다.

Handler

사용자 핸들러 클래스이다.

메소드에 대한 상세설명은 해당 절을 참고한다.

2.1. Value

사용자가 변수를 정의하고 해당 변수의 값에 따라 라우팅을 하는 메소드로 표현식을 계산한 값과 일치하는 서비스 항목으로 라우팅을 한다. 요청 메시지를 표현식에서 input이라는 변수로 사용할 수 있다.

  • 형식

    $input.field1 (변수명)
  • 1, 2, svc1

2.2. WeightBased

가중치를 고려한 라운드 로빈 라우팅이다.

  • 형식

    가중치. 정수값

2.3. TimeRange

지정된 시간대에 해당하는 서비스를 호출. 맞는 시간대의 서비스 항목이 없으면 default로 정의된 서비스 항목으로 라우팅한다.

  • 형식

    HH:MM - HH:MM

    뒤의 시간이 앞의 시간보다 클 경우에는 현재 시간이 그 가운데에 해당하면 라우팅하며, 앞의 시간이 뒤의 시간보다 클 경우에는 현재 시간이 뒤의 시간보다 작거나 앞의 시간보다 클 경우에 라우팅한다.

  • 09:30-15:10 혹은 default

2.4. Handler

사용자 핸들러 클래스이다. 핸들러는 DefaultRoutingHandler 클래스를 상속하여 구현한 사용자 핸들러 클래스를 호출한 결과값과 각 서비스 항목의 값을 비교하여 일치하는 서비스 항목으로 라우팅한다.

  • 형식

    telco.binding.TaxRRBinding (클래스명)
  • a, b