Service Broker 메시지 전달

Service Broker 메시지 전달을 사용하면 SQL Server 인스턴스가 인스턴스 외부에서 전달된 메시지를 받아서 다른 인스턴스로 보낼 수 있습니다.

관리자는 메시지 전달을 사용하여 다음을 수행할 수 있습니다.

  • 여러 트러스트 도메인의 서버 간 연결 제공

  • 도메인에 대한 라우팅 정보가 저장되는 중앙 집중화된 단일 인스턴스를 만들어 관리 단순화

  • 여러 인스턴스에 작업 분산

전달이 설정되어 있으면 msdb.sys.routes의 라우팅 테이블에 따라 다른 인스턴스에서 도착하는 메시지를 전달할지 여부가 결정됩니다. 일치하는 경로에 대한 주소가 LOCAL이 아니면 SQL Server는 메시지를 지정된 주소로 전달합니다. 그렇지 않으면 메시지가 로컬로 배달됩니다.

각 Service Broker 메시지에는 메시지가 전달된 횟수와 최대 수명이 포함됩니다. 인스턴스가 메시지를 전달하면 인스턴스는 메시지의 해당 횟수를 늘립니다. 메시지가 최대 수명을 초과하면 전달 인스턴스가 메시지를 삭제합니다. 이 방법은 라우팅 루프가 있을 수 있는 경우의 문제를 방지하는 데 도움이 됩니다.

전달 및 안정적인 배달

메시지를 전달하는 인스턴스는 보낸 사람에게 메시지를 확인하지 않습니다. 최종 대상만이 메시지를 확인합니다. 보낸 사람이 일정 기간 후 대상으로부터 확인을 받지 못하면 보낸 사람은 메시지를 다시 시도합니다.

메시지 전달을 수행하는 인스턴스는 전달된 메시지를 저장할 필요는 없습니다. 대신 SQL Server가 전달할 메시지를 메모리에 저장합니다. 메시지 전달에 사용할 수 있는 메모리 크기는 Service Broker 끝점 구성의 일부로 지정됩니다. 이 방법을 통해 효율적인 상태 비저장 메시지 전달이 가능합니다. 메시지 전달을 수행하는 인스턴스에 오류가 발생하더라도 메시지가 손실되지 않습니다. Service Broker 통신 프로토콜의 설명대로 최종 대상이 메시지를 확인할 때까지는 항상 보낸 사람이 각 메시지를 유지 관리해야 합니다.

sys.dm_broker_forwarded_messages 관리 뷰에는 인스턴스가 현재 전달하고 있는 메시지에 대한 정보가 들어 있습니다. 전달되는 도중에는 인스턴스가 메시지를 유지하지 않으며 이때 메시지는 메모리에서만 존재합니다. 메시지를 보내는 인스턴스와 메시지를 받는 인스턴스는 메시지를 유지합니다. 보내는 인스턴스는 받는 인스턴스가 메시지를 받았음을 확인할 때까지 메시지를 제거하지 않습니다.

보안 및 전달

Service Broker 메시지 전달의 경우 전달 인스턴스가 전달된 메시지 암호를 해독할 필요가 없습니다. 따라서 대화에 참여하는 데이터베이스만 대화 보안을 구성해야 합니다.

그러나 전송 보안은 SQL Server 인스턴스 간 연결에 적용되므로 각 SQL Server 인스턴스는 직접 통신하는 인스턴스에 대해 전송 보안을 올바르게 구성해야 합니다. 예를 들어 인스턴스 A와 인스턴스 B가 전달 인스턴스를 통해 통신하는 경우 인스턴스 A와 인스턴스 B 모두 전달 인스턴스에 대해 전송 보안을 올바르게 구성해야 합니다. 인스턴스는 메시지를 직접 주고받지 않으므로 서로 통신하도록 전송 보안을 구성해서는 안 됩니다.