2014-10-21 5 views
2

해당 응용 프로그램의 데이터베이스에 트리거를 추가하여 Rebus를 타사 응용 프로그램과 통합하려면 트리거가 데이터베이스의 변경 사항에 대한 정보가 들어있는 Rebus 메시지 형식으로 레코드를 삽입합니다. (조작 유형 : 삽입, 갱신, 삭제, 테이블 이름 및 행 ID). 이 작업을 쉽게 수행 할 수있는 방법이 있습니까 아니면 직접 저장 프로 시저를 작성해야합니까? https://github.com/rebus-org/Rebus/blob/master/src/Rebus/Transports/Sql/SqlServerMessageQueue.cs 전송 방법은 무엇입니까?T-SQL을 사용하여 SQL Server에 Rebus 메시지 삽입

또는 방금 트리거에서 매개 변수를 사용하여 EXE를 실행할 수도 있지만 트랜잭션이 아닙니다.

나는이 문제를 보았습니다. https://github.com/rebus-org/Rebus/issues/119하지만 죽은 생각 인 것 같습니다.

다른 권장 방법이 있습니까?

업데이트 :은 (SQL-CLR하지 않고도 가능하지 않음)이 SQL에서 할 미친 것, 그래서 내가 수수께끼 메시지의 단지 실현 몸이 직렬화 어쩌면 유일한 방법은 ReceiveMessage와 사용자 정의 전송을 생성하는 것입니다 내 형식으로 메시지를 수락하는 방법? 사전 :)에서

덕분에

답변

2

나는 SQL 서버 서비스 브로커를 사용하여 "물건을 SQL 서버에서 일어나는"와 통합 우수한 결과를 했어 - 직접적으로 (즉 수수께끼 전송 구현으로)하지만 메시지로 내가 외부에서 폴링 할 수있는 대기열.

데이터베이스에서 흥미로운 일이 발생하면 트리거가 일부 테이블을 쿼리하고 for xml auto의 결과를 선택하여 서비스 브로커 큐로 보낼 수 있습니다. 수수께끼 메시지, 시도 및 오류 큐를 기반으로 될 수에서 XML을 파싱에서이 방식으로, 모든 -

나는 다음 브로커 큐 bus.SendLocal 문자열로받은 XML을 폴링 것 System.Timers.Timer와 수수께끼 엔드 포인트가 있었다 , 그리고 다음과 같은 관습 신뢰성 :

+0

멋진 생각 :)이 XML은 업데이트 및 삭제에 어떻게 보이나요? 삽입 할 경우에는 실제로 새 데이터를 선택해야하지만, 업데이트의 경우 원본 상태와 다를 수 있으며 삭제가 발생했다는 정보 만 삭제할 수 있습니까? – user1121956

+1

데이터는 거래와 관련된 거래이므로 삭제되지 않았으며 단순히 상태 필드를 사용하여 취소 여부를 나타냅니다. 인서트/업데이트는 동일한 방식으로 처리되었으므로 기본적으로 변경 될 때마다 전체 업데이트를 수행했습니다. – mookid8000

+0

119 호에 나온 것처럼 전송 도구 대신 Timer를 사용하는 이유가 궁금합니다. – user1121956