본문 바로가기

SQL Server/Service Broker

[Service Broker] 기본 개념 익히기

Service Broker는 SQL Server와 SQL Server 사이에 메시지를 주고 받는 기능입니다.

이때 메시지를 전송하는 쪽을 INITIATOR, 수신하는 쪽을 TARGET이라고 부릅니다.

1. INITIATOR와 TARGET이 모두 하나의 데이터베이스일 수도 있고
2. INITIATOR와 TARGET이 하나의 인스턴스에 존재하는 서로 분리된 데이터베이스 일수도 있고
3. INITIATOR와 TARGET이 서로 분리된 인스턴스일 수도 있습니다.


아마 대부분의 실무 레벨에서는 3항의 구성이 적용되리라 생각합니다.


그럼에도 1, 2항의 구성이 가능하다는 것에 감사할 수 있는데요.
처음 Service Broker를 접하는 단계에서 개념을 잡을 때, 1항과 2항의 단순한 구성이 도움이 되기 때문입니다.

일단 가장 기본 적인 내용부터 살펴 봅시다.


서비스 브로커를 구성하는 기본적인 개체들

MESSAGE TYPE
- 전달할 메세지 본문의 유효성 검사에 대한 정의입니다.
- 동일한 MESSAGE TYPE이  INITIATOR와 TARGET 모두에 존재해야합니다.

CONTRACT
- 각각의 MESSAGE TYPE을 누가 (INITIATOR 또는 TARGET 또는 양자) 전송할 수 있는지를 정의합니다.

QUEUE
- 말 그대로 우리가 흔히 접하는 큐입니다. 메시지가 이곳에 저장되고 처리됩니다.

SERVICE
- Service Broker를 사용해 어떤 작업을 수행할 때.. 그 작업을 대표하는 이름이라고 볼 수 있습니다.
- 한개의 Queue에 종속되도록 정의합니다.


서비스 브로커로 대화하는 방법

1. 메시지 전송

BEGIN DIALOG 문SEND ON CONVERSATION 문을 사용하여 메시지를 전송합니다.

- [A] SERVICE 로부터 [B] SERVICE에게 [C] CONTRACT의 계약대로 대화를 시작한다.
- @핸들은 반환되는 값


BEGIN
DIALOG @핸들
FROM SERVICE [A]
TO SERVICE 'B'
ON CONTRACT [C];

- 반환된 대화 핸들 값 (@핸들) 을 사용하여 [D] MESSAGE TYPE에 메시지 내용을 담아 전송한다.

SEND
ON CONVERSATION @핸들
MESSAGE TYPE [D] ('메시지');

 

2. 메시지 수신

- [Q] QUEUE 에서 메시지를 꺼낸다.


WAITFOR (

RECEIVE TOP(1) @메시지내용= message_body

FROM [Q]

), TIMEOUT 1000;


SELECT
@메시지내용;


BOL의 자습서 따라하기

다음 단계로 실제 코드를 작성하고 실행해보는 것이 좋은데, 이때 BOL의 자습서를 이용하면 큰 도움이 됩니다.

SQL Server 2008 Books Online
> Service Broker > 시작 > 개요 > Service Broker 자습서


- 단일 데이터베이스의 대화 완료
- 데이터베이스 간의 대화 완료
- 인스턴스 간의 대화 완료
- 내부 활성화 구현


다음 포스팅할 내용으로 넘어가기 전에, 위 내용을 꼭 마스터하시기 바랍니다. ^^