2017-09-28 10 views
1

지연된 메시지 저장소로 SQL Server를 사용하여 사용자 지정 재시도 정책을 작성할 수있었습니다. 하지만 이제는 확장 성을 이유로 여러 컴퓨터에 배포 된 여러 작업자 (메시지 처리기 작업)를 실행하고 싶습니다. 그 이유로 인해 나는 큐에서와 같이 지연된 메시지를 읽을 수있는 중앙 위치를 SQL 서버에서 읽는 대신에 갖고 싶습니다.Rebus에서 customl 재시도 메시지에 대한 큐 구성

지연된 메시지를 큐에 저장할 수있는 방법이 있습니까? 그게 더 나은 접근 방법인가요? 이것을하기위한 더 나은 접근 방법은 무엇입니까?

답변

1

지연된 메시지를 큐에 저장할 수있는 방법이 있습니까? 그게 더 나은 접근 방법인가요?

하지 지연이 메시지 당으로 변화 할 수 있다는 점에서 이연 메시지와 충돌 내가 fifo에 정말 좋은 :) 대부분의 큐 익숙 어떤 큐,과 (적어도 일반적인 경우).

전송 된 순서와 잠재적으로 매우 다른 순서로 정렬 된 메시지에 액세스하려는 경우 2 차 인덱스가있는 데이터베이스를 지연된 메시지를 저장하는 데 매우 적합한 기술로 만듭니다.

더 나은 접근 방법은 무엇입니까?

SQL Server에 지연된 메시지를 저장하는 것이 잘못되었다고 생각하는지 모르겠다. 물론

, 당신은 메시지를 연기 여러 엔드 포인트가있는 경우, 대신 각 엔드 포인트 투표를 데이터베이스에있는의 "외부 타임 아웃 관리자"를 사용 할 수 있습니다 -이 엔드 포인트에서이 작업을 수행하여가있을 수 있습니다

Configure.With(...) 
    .(...) 
    .Timeouts(t => t.UseExternalTimeoutManager("timeouts")) 
    .Start(); 

그리고 구성된 대기 시간 저장소 및 입력 대기열 timeouts으로 끝점을 시작하기 만하면됩니다.

+0

나는 외부 타임 아웃 매니저를 가지고있는 솔루션을 좋아한다. 그리고 그것은 내가 찾고 있었던 것이다 (각 작업자 폴링 데이터베이스보다는). 하지만이 외부 타임 아웃 관리자가 어디에서 실행되고 있는지 알 수 있습니까? 타임 아웃 매니저가 충돌하면 나머지 작업자가 다른 타임 아웃 매니저를 선출합니까? –

+0

제한 시간 관리자가 다시 시작되지 않고 중지되거나 충돌하는 경우, 끝점은 지연된 메시지를 수신하지 않습니다. 새로운 지연된 메시지는'timeouts' 큐에 대기열에 올려집니다. 타임 아웃 관리자는 보통 Rebus 엔드 포인트 일 뿐이므로 필요합니다. – mookid8000

+0

중앙 데이터베이스를 사용하는 경우 (예 : SQL Server를 사용하고 브로커 기반 대기열 시스템 (RabbitMQ 등)을 사용하는 경우 중복성을 구현하기 위해 두 대의 다른 컴퓨터에 두 개의 시간 제한 관리자 인스턴스를 배포하는 것이 매우 쉽습니다 – mookid8000