Service Broker

적용 대상:SQL ServerAzure SQL Managed Instance

SQL Server Service Broker는 SQL Server 데이터베이스 엔진 및 Azure SQL Managed Instance의 메시징 및 큐에 대한 기본 지원을 제공합니다. 개발자는 데이터베이스 엔진 구성 요소를 사용하여 서로 다른 데이터베이스 간에 통신하고 분산되고 신뢰할 수 있는 애플리케이션을 빌드하는 정교한 애플리케이션을 쉽게 만들 수 있습니다.

Service Broker를 사용하는 경우

Service Broker 구성 요소를 사용하여 네이티브 데이터베이스 내 비동기 메시지 처리 기능을 구현합니다. Service Broker를 사용하는 애플리케이션 개발자는 복잡한 통신 및 메시징 내부를 프로그래밍하지 않고도 여러 데이터베이스에 데이터 워크로드를 분산할 수 있습니다. Service Broker는 대화 컨텍스트에서 통신 경로를 처리하므로 개발 및 테스트 작업을 줄입니다. 또한 성능을 향상시킵니다. 예를 들어 웹 사이트를 지원하는 프런트 엔드 데이터베이스는 정보를 기록하고 프로세스 집약적인 작업을 백 엔드 데이터베이스의 큐에 보낼 수 있습니다. Service Broker는 모든 태스크가 트랜잭션 컨텍스트에서 관리되도록 하여 안정성과 기술 일관성을 유지합니다.

개요

Service Broker는 기본 데이터베이스 내 서비스 지향 애플리케이션을 만들 수 있는 메시지 배달 프레임워크입니다. 테이블에서 지속적으로 데이터를 읽고 쿼리 수명 주기 중에 처리하는 클래식 쿼리 처리 기능과 달리, 서비스 지향 애플리케이션에는 메시지를 교환하는 데이터베이스 서비스가 있습니다. 모든 서비스에는 메시지가 처리될 때까지 배치되는 큐가 있습니다.

Service broker

큐의 메시지는 Transact-SQL RECEIVE 명령을 사용하거나 메시지가 큐에 도착할 때마다 호출되는 활성화 프로시저를 사용하여 가져올 수 있습니다.

서비스 만들기

데이터베이스 서비스는 CREATE SERVICE Transact SQL 문으로 만듭니다. 서비스는 CREATE QUEUE 문을 사용하여 메시지 큐 만들기와 연결할 수 있습니다.

CREATE QUEUE dbo.ExpenseQueue;
GO
CREATE SERVICE ExpensesService
    ON QUEUE dbo.ExpenseQueue; 

메시지 보내기

메시지는 SEND Transact SQL 문을 사용한 서비스 간의 대화를 통해 보내집니다. 대화는 BEGIN DIALOG Transact-SQL 문을 사용하여 서비스 간에 설정된 통신 채널입니다.

DECLARE @dialog_handle UNIQUEIDENTIFIER;

BEGIN DIALOG @dialog_handle  
FROM SERVICE ExpensesClient  
TO SERVICE 'ExpensesService';  
  
SEND ON CONVERSATION @dialog_handle (@Message) ;  

메시지가 ExpenssesService에 전송되고 dbo.ExpenseQueue에 배치됩니다. 이 큐에 연결된 활성화 프로시저가 없으므로 메시지는 누군가 읽을 때까지 큐에 남아 있습니다.

메시지 처리

큐에 배치된 메시지는 표준 SELECT 쿼리를 사용하여 선택할 수 있습니다. SELECT 문은 큐를 수정하고 메시지를 제거하지 않습니다. 큐에서 메시지를 읽고 끌어오려면 RECEIVE Transact-SQL 문을 사용합니다.

RECEIVE conversation_handle, message_type_name, message_body  
FROM ExpenseQueue; 

큐에서 모든 메시지를 처리한 후에는 END CONVERSATION Transact-SQL 문을 사용하여 대화를 닫아야 합니다.

Service Broker에 대한 설명서는 어디에 있나요?

Service Broker에 대한 참조 설명서는 SQL Server 설명서에 포함되어 있습니다. 이 참조 설명서는 다음과 같은 섹션으로 구성됩니다.

Service Broker 개념 및 개발 및 관리 작업에 대해 이전에 게시된 설명서를 참조하세요. 이 설명서는 최근 버전의 SQL Server에서 Service Broker의 변경 내용 수가 적기 때문에 SQL Server 설명서에서 재현되지 않습니다.

Service Broker의 새로운 기능

Service Broker 및 Azure SQL Managed Instance

Azure SQL Managed Instance 인스턴스 간 인스턴스 간 서비스 브로커 메시지 교환 및 SQL Server와 Azure SQL Manage Instance 간의 메시지 교환은 현재 공개 미리 보기로 제공됩니다.

  • CREATE ROUTE: 지정된 포트는 4022여야 합니다. CREATE ROUTE를 참조하세요.
  • ALTER ROUTE: 지정된 포트는 4022여야 합니다. ALTER ROUTE를 참조하세요.

전송 보안이 지원되며, 대화 보안은 지원되지 않습니다.

  • CREATE REMOTE SERVICE BINDING은 지원되지 않습니다.

Service Broker는 기본적으로 사용하도록 설정되어 있으며, 비활성화할 수 없습니다. 다음 ALTER DATABASE 옵션은 지원되지 않습니다.

  • ENABLE_BROKER
  • DISABLE_BROKER

SQL Server 2019(15.x)에는 중요한 변경 사항이 도입되지 않았습니다. SQL Server 2012(11.x)에는 다음과 같은 변경 사항이 도입되었습니다.

메시지를 여러 대상 서비스(멀티캐스트)로 보낼 수 있습니다.

SEND(Transact-SQL) 문의 구문은 여러 대화 핸들을 지원하여 멀티캐스트를 설정하기 위해 확장되었습니다.

메시지가 큐에 유지된 시간이 큐에서 노출됨

큐에는 메시지가 큐에 있는 기간을 보여 주는 새 열 message_enqueue_time이 있습니다.

포이즌 메시지 처리를 사용하지 않도록 설정할 수 있습니다.

CREATE QUEUE(Transact-SQL)ALTER QUEUE(Transact-SQL) 문은 이제 POISON_MESSAGE_HANDLING (STATUS = ON | OFF) 절을 추가하여 포이즌 메시지 처리를 설정하거나 해제할 수 있습니다. 카탈로그 뷰 sys.service_queues 에는 이제 포이즌 메시지가 설정되었는지, 아니면 해제되었는지를 나타내는 is_poison_message_handling_enabled 열이 있습니다.

Service Broker의 Always On 지원

자세한 내용은 Always On 가용성 그룹이 있는 Service Broker(SQL Server)를 참조하세요.

다음 단계

Service Broker의 가장 일반적인 용도는 이벤트 알림입니다. 이벤트 알림을 구현하거나, 대화 보안을 구성하거나, 자세한 정보를 가져오는 방법을 알아봅니다.