Service Broker를 사용한 애플리케이션 빌드

적용 대상:SQL ServerAzure SQL Managed Instance

Transact-SQL 문을 실행할 수 있는 프로그램에서 Service Broker를 사용할 수 있습니다. Service Broker 애플리케이션은 SQL Server 외부에서 실행되는 프로그램으로 구현될 수 있거나 Transact-SQL 또는 .NET 언어로 작성된 저장 프로시저로 구현될 수 있습니다.

Service Broker를 사용하는 프로그램은 일반적으로 작업을 수행하기 위해 함께 작동하는 여러 구성 요소로 구성됩니다. 대화를 시작하는 프로그램은 메시지를 만들어 다른 서비스로 보냅니다. 해당 프로그램은 응답을 기다리거나 즉시 종료하고 다른 프로그램에 의존하여 응답을 처리할 수 있습니다. 대화의 대상인 서비스의 경우 프로그램은 서비스에 대한 큐에서 들어오는 메시지를 수신하고, 메시지 데이터를 읽고, 필요한 처리를 수행하고, 적절한 경우 응답 메시지를 만들고 보냅니다.

Service Broker는 Transact-SQL을 확장합니다. 애플리케이션은 Service Broker를 사용하는 데 특별한 개체 모델 또는 라이브러리가 필요하지 않습니다. 대신 프로그램은 Transact-SQL 명령을 SQL Server에 보내고 해당 명령의 결과를 처리합니다. Service Broker에서 애플리케이션을 활성화하거나, 백그라운드 서비스로 실행하거나, 예약된 작업으로 실행하거나, 이벤트에 대한 응답으로 시작할 수 있습니다. Service Broker를 사용하는 애플리케이션을 시작하기 위한 전략에 대한 자세한 내용은 시작 전략 선택을 참조하세요.

Service Broker를 사용하여 애플리케이션을 만드는 방법에 대한 자세한 내용은 Service Broker를 사용한 프로그래밍의 이점을 참조하세요.

Service Broker 애플리케이션 개요

다음 그림에서는 Service Broker를 사용하는 애플리케이션의 상호 작용을 보여 줍니다.

Relationship and flow of messages in conversations

그림에 나타난 것처럼 SubmitExpense, AcceptDenyExpenseReimbursementIssued 메시지 유형이 먼저 만들어집니다. ProcessExpenses 계약은 이러한 메시지 유형을 기반으로 생성되며 대화를 통해 비용 보상 태스크를 완료할 수 있는 스키마를 제공합니다. ProcessExpenses 계약은 ProcessExpense 서비스와 SubmitExpense 서비스 간의 모든 대화를 제어합니다. ProcessExpenses 계약과 이 계약에 사용되는 메시지 유형은 이 계약을 기반으로 대화를 가지고 있는 모든 서비스의 데이터베이스에 있어야 합니다.

Service Broker는 SubmitExpense 서비스로 보낸 메시지를 해당 서비스의 큐에 저장합니다. ExpenseSubmission 저장 프로시저는 이 큐로부터 메시지를 받아 처리하고 회신이 필요할 경우 다른 서비스로 메시지를 보냅니다.

Service Broker는 ProcessExpense 서비스로 보낸 메시지를 해당 서비스의 큐에 저장합니다. ExpenseProcessing 저장 프로시저는 이 큐로부터 메시지를 받아 처리하고 회신이 필요할 경우 다른 서비스로 메시지를 보냅니다.

이러한 두 서비스 간의 대화는 다음과 같이 구성됩니다.

  • 사용자는 사용자 인터페이스를 통해 경비 환급 요청을 제출합니다. 애플리케이션은 SubmitExpense 메시지를 생성하는 ExpenseSubmission 저장 프로시저를 실행합니다. SubmitExpense 서비스는 ProcessExpense 서비스와 대화를 시작한 다음 SubmitExpense 메시지를 ProcessExpense 서비스로 보냅니다.

  • Service Broker는 ProcessExpense 서비스에 대한 SubmitExpense 메시지를 받아 ExpenseQueue 큐에 이 메시지를 넣습니다. ExpenseQueue 큐는 SubmitExpense 메시지를 큐에서 꺼내 처리하는 ProcessExpense 저장 프로시저를 활성화합니다. 그런 다음 ProcessExpense 저장 프로시저는 AcceptDenyExpense 메시지를 만들어 SubmitExpense 서비스로 이 메시지를 보냅니다. 비용이 거부되면 ProcessExpense 저장 프로시저는 대화를 종료합니다.

  • Service Broker는 SubmitExpense 서비스에 대한 AcceptDenyExpense 메시지를 해당 서비스의 큐에 넣습니다. ProcessExpense 프로시저가 대화를 종료한 경우 Service Broker는 EndDialog 메시지를 Expenses 큐에 넣습니다. 큐는 AcceptDenyExpense 메시지를 큐에서 꺼내 처리하는 ExpenseSubmission 저장 프로시저를 활성화합니다. ExpenseSubmission 저장 프로시저가 큐에서 EndDialog 메시지를 찾으면 프로시저가 대화를 종료합니다.

  • 비용이 수락된 경우 ProcessExpense 서비스는 비용 지급이 실행되었음을 확인하는 ReimbursementIssued 메시지를 생성 및 전송한 다음 대화를 종료합니다. Service Broker는 이러한 메시지를 서비스의 큐에 배치합니다. 큐는 ExpenseSubmission 프로시저를 활성화하고 프로시저는 ReimbursementIssued 메시지를 처리합니다. 그런 다음 프로시저는 EndDialog 메시지를 처리하고 대화를 종료합니다.

참고 항목