다음을 통해 공유


Service Broker를 사용한 응용 프로그램 작성

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를 사용하는 응용 프로그램의 상호 작용을 보여 주는 그림입니다.

대화의 메시지 관계 및 흐름

그림에 나타난 것처럼 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 메시지를 처리하고 대화를 종료합니다.