2009-05-08 2 views
0

저는 야심적인 웹 응용 프로그램 프로젝트에 참여하는 초보 웹 개발자입니다.sql 서비스 중개자 기능 질문

그래서 일부 연구를 마친 후 SQL Service Broker에 대해 알게되었습니다. 내가 사용할 수있는 것 같지만 확실하지 않습니다. 배움에는 많은 시간을 할애해야하기 때문에, 그것이 나의 필요에 꼭 맞을 것이라고 확신하고 싶었습니다.

웹 사이트 사용자가 웹 사이트에 텍스트를 제출할 수있는 시스템을 구현해야합니다. 이 메시지 스트림은 FIFO 방식으로 중복되고 처리되어야하며 스트림의 다른 쪽 끝에서는 다른 사용자 그룹이 메시지를 처리해야합니다.

이제이 마지막 사용자 그룹 중 하나가 읽는 메시지는 다른 사람이 동시에 읽을 수 없도록 잠겨 있어야합니다. 그런 다음 사용자는 메시지를 처리할지 여부를 결정할 수 있습니다. 메시지를 처리하기로 결정한 경우에만 큐에서 삭제할 수 있습니다. 메시지를 처리하고 싶지 않다고 결정하면 메시지를 대기열 끝에 넣거나 (큐의 끝 또는 적어도 우선 순위가 가장 높음) 다른 사용자가 메시지를 읽고 결정할 수 있도록해야합니다 .

SQL Service Broker로 구현할 수있는 기능입니까? 내가 잘못 추적하고 있는가?

감사합니다.

+0

Service Broker가 왜이 문제를 해결할 수 있다고 생각하는지 설명 할 수 있습니까? 사람들이 옳은 길을 가고 있는지 아닌지를 알려주려면 목적지가 아닌 어떤 트랙에 있는지 말해야합니다. ;-) – Tomalak

+0

내가 이해하는 방식으로, 어떤 대기열 시스템이 이것으로 나를 도울 수 있습니다. 나는 대안을 살펴 봤고 기본적으로 모두 똑같은 일을하기 때문에 나는 SSB를 선택했다. FIFO, 1 : 1 메시지 배달, 이중화, 잠금, 비동기, 무거운로드 성능 .. 모두 청구서에 부합합니다. 나는 한 번 사용자가 읽은 메시지를 가장 우선 순위가 높은 대기열에 다시 넣을 수 있는지 여부를 확신하지 못합니다 (읽지 않은 것처럼). 질문을 잘못 이해 했습니까? :) 1 : 1 (인간)의 질문 - 답변 시스템을 구현하고 싶습니다. 기존 메시징 대기열 시스템을 사용하면 코드 1을 직접 작성하지 않아도됩니다. –

+0

"대기열에 다시 넣으려면"본질적으로 "메시지를 다시 보내려는 것"을 의미하거나 대기열에서 꺼내는 대신 수신음을 들여다 보지 않습니다. SSB는 "순서대로"메시지 배달을 보장하므로 마지막에 메시지를 다시 대기시키는 것 외에 "메시지를 다시 넣는"방법이 있을지는 의문입니다. 이것은 도움이 될 것 같습니다 : http://www.simple-talk.com/sql/learn-sql-server/service-broker-foundations-workbench/ – Tomalak

답변

1

IMO, Service Broker를 가장 잘 사용하는 방법은 느슨하게 결합 된 방식으로 독립 응용 프로그램에 연결하는 것입니다. 필자가 말하고자하는 것은 이러한 방법으로 묶인 시스템은 서로 합의한 일련의 메시지 유형을 통해 통신 할 수 있다는 것입니다. 이는 예를 들어 다른 데이터베이스를 직접 조작하는 응용 프로그램과는 대조적입니다.

당신이 말했던 것부터 간단하게 테이블로 구현했습니다. ID PK, 할당 플래그 및 사용자 정의 열이있는 메시지 테이블을 만듭니다. 운영자가 마지막 메시지를 가져 오려고 할 때마다 Allocation = 'N'인 가장 낮은 PK 값을 가져오고 Allocation을 'Y'로 업데이트하십시오. 이것은 단일 트랜잭션입니다. 작업이 메시지를 대기열로 반환하기로 결정하면 AllocationFlag를 'N'및 그 뒤로 설정하십시오.

이것은 단지 예입니다. 이 경우 데이터베이스가 일관성, 부하 성능 등을 제공합니다.

SSB에 제출하는 모든 데이터는 테이블로 저장되고 조작되므로 데이터베이스보다 반드시 빠를 필요는 없습니다. 해결책 .

+1

감사합니다. 내가 의심 한 것.SSB를 사용할 수 있다면 안전하다고 생각했습니다. 전문가가 큐잉을 염두에두고 설계했기 때문에 + 저는 자신의 프로그래밍 기술에 100 % 확신하지 못했습니다. :) –