대화

적용 대상:SQL ServerAzure SQL Managed Instance

Service Broker에서 전송한 모든 메시지는 대화의 일부입니다. 대화는 두 서비스 간의 대화입니다. 대화는 두 서비스 간의 신뢰할 수 있는 영구 양방향 메시지 스트림입니다.

대화는 EOIO(Exactly-Once-In-Order) 방식으로 메시지 배달을 제공합니다. 대화는 각 메시지에 포함된 대화 식별자 및 시퀀스 번호를 사용하여 관련 메시지를 식별하고 올바른 순서로 메시지를 배달합니다. 대화는 두 서비스 간의 신뢰할 수 있는 영구 메시지 스트림입니다.

대화에는 두 명의 참가자가 있습니다. 초기자가 대화를 시작합니다. 대상은 초기자가 시작한 대화를 수락합니다. 참가자가 대화를 시작할지 여부는 대화 계약에 지정된 대로 참가자가 보낼 수 있는 메시지를 결정합니다. 다음 다이어그램은 대화의 메시지 흐름을 보여줍니다.

Message flow between initiator and target

애플리케이션은 대화의 일부로 메시지를 교환합니다. SQL Server는 대화 메시지를 받으면 대화용 큐에 메시지를 넣습니다. 애플리케이션은 큐에서 메시지를 수신하고 필요에 따라 메시지를 처리합니다. 처리의 일부로 애플리케이션은 대화의 다른 참가자에게 메시지를 보낼 수 있습니다.

안정적인 배달

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

참고 항목

Service Broker는 승인 메시지를 내부적으로 처리합니다. 이러한 메시지는 큐에 표시되지 않으며 애플리케이션에 배달되지 않습니다. Service Broker는 이를 원격 서비스에 연결할 수 없음 오류로 간주하지 않습니다. 원격 서비스가 연결할 수 없게 되면 Service Broker는 서비스가 연결할 수 있게 되거나 대화 수명이 만료할 때까지 해당 서비스에 대한 메시지를 보관합니다.

대화 수명

대화 수명 동안 애플리케이션 간에 메시지를 교환할 수 있습니다. 대화의 수명은 로컬 SQL Server 인스턴스가 대화를 생성하는 시점부터 애플리케이션이 대화를 명시적으로 종료하거나 대화에 관련된 오류 메시지를 받을 때까지 유지됩니다. 각 참가자는 애플리케이션이 오류 또는 대화의 끝을 나타내는 메시지를 받을 때 대화를 명시적으로 종료할 책임이 있습니다. 대부분의 서비스에서 한 참가자는 오류 없이 대화를 종료하여 대화가 완료되고 성공했음을 나타내는 역할을 담당합니다. 대상 또는 개시자가 이 작업을 수행하는지 여부는 대화의 목적에 따라 달라집니다.

시작 애플리케이션에 대한 로컬 SQL Server는 애플리케이션이 대화를 시작할 때 대화에 대한 대화 엔드포인트를 만듭니다. 대상 애플리케이션에 대한 로컬 SQL Server는 인스턴스가 대화에 대한 첫 번째 메시지를 받을 때 대화에 대한 대화 엔드포인트를 만듭니다.

대화는 또한 대화 수명이 지정된 기한을 초과하지 않도록 합니다. 시작 애플리케이션은 필요에 따라 대화의 최대 수명을 지정할 수 있습니다. 로컬 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입니다.

참고 항목