다음을 통해 공유


대화 기능

Service Broker에서 전송한 모든 메시지는 대화의 일부입니다. 대화는 두 서비스 간에 이루어지는 대화를 의미합니다. 대화는 두 서비스 간의 안정적이고 지속적인 양방향 메시지 스트림입니다.

대화는 EOIO(Exactly-Once-In-Order) 방식으로 메시지 배달을 제공합니다. 대화는 각 메시지에 포함된 대화 식별자와 시퀀스 번호를 사용하여 관련된 메시지를 식별하고 올바른 순서로 메시지를 배달합니다. 대화는 두 서비스 간의 안정적이고 지속적인 메시지 스트림입니다.

대화에는 두 참가자가 있습니다. 시작자는 대화를 시작하고 대상은 시작자가 시작한 대화를 수락합니다. 대화에 대한 계약에 지정된 바와 같이 참가자가 대화를 시작하는지 여부에 따라 참가자가 보낼 수 있는 메시지가 결정됩니다. 다음은 대화의 메시지 흐름을 보여 주는 다이어그램입니다.

시작자와 대상 간 메시지 흐름

응용 프로그램은 메시지를 대화의 일부로 주고받습니다. SQL Server가 대화를 대한 메시지를 받으면 SQL Server는 대화에 대한 큐에 메시지를 넣습니다. 응용 프로그램은 큐에서 메시지를 받고 필요에 따라 메시지를 처리합니다. 처리 과정 중에 응용 프로그램이 메시지를 대화의 다른 참가자에게 보낼 수도 있습니다.

안정적인 배달

대화는 자동 메시지 수신 승인을 통합하므로 메시지를 안정적으로 배달할 수 있습니다. Service Broker는 원격 서비스에서 메시지를 승인할 때까지 보내는 메시지를 전송 큐에 각각 저장합니다. 이러한 자동 승인은 응용 프로그램이 메시지마다 명시적으로 승인할 필요가 없으므로 시간과 리소스가 절약됩니다. 가능한 경우에는 승인 메시지가 대화에 대한 반환 메시지의 일부로 포함됩니다.

[!참고]

Service Broker는 승인 메시지를 내부적으로 처리합니다. 이러한 메시지는 큐에 표시되지 않고 응용 프로그램으로 배달되지도 않습니다.

Service Broker는 원격 서비스가 연결할 수 없게 되는 경우를 오류로 간주하지 않습니다. 원격 서비스가 연결할 수 없게 되면 Service Broker는 서비스가 연결할 수 있게 되거나 대화 수명이 만료할 때까지 해당 서비스에 대한 메시지를 보관합니다.

대화 수명

대화의 수명 주기 동안 응용 프로그램 간에 메시지를 주고받을 수 있습니다. 대화의 수명은 로컬 SQL Server 인스턴스가 대화를 생성하는 시점부터 응용 프로그램이 대화를 명시적으로 종료하거나 대화에 관련된 오류 메시지를 받을 때까지 유지됩니다. 각 참가자는 응용 프로그램이 오류 또는 대화의 종료를 나타내는 메시지를 받을 경우 대화를 명시적으로 종료해야 합니다. 대부분의 서비스에서는 오류 없이 대화를 종료하여 대화가 성공적으로 완료되었음을 나타내는 작업을 한 참가자가 담당합니다. 이 작업을 대상이 수행하는지 시작자가 수행하는지는 대화의 목적에 따라 달라집니다.

시작 응용 프로그램에 대한 로컬 Service Broker는 응용 프로그램이 대화를 시작할 때 대화에 대한 대화 끝점을 만듭니다. 대상 응용 프로그램에 대한 로컬 Service Broker는 인스턴스가 대화에 대한 첫 번째 메시지를 받을 때 대화에 대한 대화 끝점을 만듭니다.

또한 대화는 대화의 수명이 지정된 한도를 초과하지 않는다고 보장할 수 있습니다. 시작 응용 프로그램은 필요할 경우 대화의 최대 수명을 지정할 수도 있습니다. 로컬 Service Broker와 원격 Service Broker는 모두 이 수명을 추적합니다. 대화가 최대 수명 시점에 활성 상태로 유지되면 대화의 양측에서 각각 제한 시간 오류 메시지를 서비스 큐에 넣고 대화에 대한 새 메시지를 거부합니다. 대화는 대화가 시작될 때 설정되는 최대 수명을 초과하여 유지되지 않습니다. 응용 프로그램은 대화가 종료된 후에도 대화에 대한 메시지를 받을 수 있지만 해당 대화에 대해 새 메시지는 도착할 수 없으며 응용 프로그램이 대화에 대한 메시지를 보낼 수도 없습니다.

응용 프로그램은 대화를 명시적으로 종료하여 대화를 완료한 시점을 나타내는 역할을 맡습니다. Service Broker는 대화를 자동으로 종료하지 않습니다. 대화는 응용 프로그램이 대화를 명시적으로 종료할 때까지 데이터베이스에 남아 있습니다. 그러므로 대화 시간이 초과되거나 Broker가 오류를 보고하는 경우에도 대화의 각 참가자는 END CONVERSATION 문을 명시적으로 실행해야 합니다.

대화 타이머

응용 프로그램은 대화 타이머를 사용하여 특정 시간에 메시지를 받을 수 있습니다. 대화 타이머가 만료되면 SQL Server가 대화에 대한 메시지를 대화 타이머를 시작한 끝점에서 대화에 대한 큐에 삽입합니다. 응용 프로그램은 다양한 용도로 대화 타이머를 사용할 수 있습니다. 일반적으로 대화 타이머는 원격 서비스에서 응답이 지연되는 경우에 대해 응답할 때 사용합니다. 지정된 간격에 따라 원격 서비스에 메시지를 보내는 서비스를 만드는 경우에도 대화 타이머를 사용합니다. 예를 들어 서비스가 대화 타이머를 사용하여 2-3분마다 SQL Server의 현재 상태를 보고할 수 있습니다. 응용 프로그램이 대화 타이머를 사용하여 특정 시간에 저장 프로시저를 활성화할 수도 있습니다. 이를 통해 Service Broker가 예약된 작업을 지원할 수 있습니다.

대화의 각 참가자는 대화 타이머를 대화당 하나씩 설정할 수 있습니다. 다른 참가자와 대화 타이머를 공유하지 않으며 대화 타이머는 대화의 수명에 영향을 미치지 않습니다. 대신 타이머가 만료되면 로컬 Service Broker가 로컬 서비스에 대한 큐에 제한 시간 메시지를 추가합니다. 제한 시간 메시지의 유형 이름은 **https://schemas.microsoft.com/SQL/ServiceBroker/DialogTimer**입니다.