2016-10-27 2 views
2

저는 nservicebus 호스트와 함께 하늘색 작업자 역할을가집니다. 4.7.5. 이 호스트는 하늘색 서비스 버스 전송 및 주제에 이벤트를 보냅니다. 이벤트 전송을 지연하거나 주제 등록의 지연 후 메시지가 나타나도록 일부 속성을 설정하는 방법이 있습니까? 호스트는 기본 데이터베이스의 변경 사항을 알게 된 후 이벤트를 보냅니다. 기본 데이터 쓰기가 복제되는 여러 보조 데이터베이스가 있습니다. 리시버는 nservicebus 호스트를 사용하고 주제에 대한 가입이있는 청년 작업자 역할입니다.Nservicebus는 이벤트 공개를 지연합니다.

수신자가 메시지를 수신 할 때까지 복제 지연으로 인해 보조 메시지에 동기화되지 않은 데이터가있을 수 있습니다.

하나의 옵션은 기본 데이터베이스를 사용하여 읽는 것이지만 취할 경로는 아닙니다.

답변

3

가입 엔드 포인트에서 실패 할 가능성이 있으며 재 시도가이를 처리 할 수 ​​있습니까? 재 시도 시간/지연을 미세 조정하여 메시지가 재 시도되기 전에 보조 데이터베이스가 갱신되도록 할 수 있습니다.

데이터베이스에서 데이터를 조회하는 가장 좋은 방법과 이벤트 버전을 구별하는 방법을 찾아야합니다. 업데이트의 경우 버전 번호 또는 마지막 업데이트 날짜를 사용하거나 생성시 식별자로 조회 만 할 수 있습니다. 보조 데이터베이스 오프

엔드 포인트 데이터를 읽는이 같은 이벤트 핸들러가있을 수 있습니다 : 당신은 이벤트 처리기가 다시 시도 얼마나 지연 각 시도 사이에있을거야 얼마나 많은 시간을 제어 할 수 있습니다

public class CustomerCreationHandler : IHandlesMessage<CustomerCreated> 
{ 
    public void Handle(CustomerCreated @event) 
    { 
     var customer = Database.Load(@event.CustomerId); 
     if(customer == null) 
     { 
      throw new CustomerNotFoundException("Customer was not found."); 
     } 

     //Your business logic goes here 
    } 
} 

. 이 경우 메시지는 1 수준 재 시도에 의해 재 시도되고 아래에 구성된 2 단계 재 시도에 전달됩니다.

class ProvideConfiguration : 
    IProvideConfiguration<SecondLevelRetriesConfig> 
{ 
    public SecondLevelRetriesConfig GetConfiguration() 
    { 
     return new SecondLevelRetriesConfig 
     { 
      Enabled = true, 
      NumberOfRetries = 2, 
      TimeIncrease = TimeSpan.FromSeconds(10) 
     }; 
    } 
} 

또는 대신 이벤트를 게시, 당신은 일정 시간이 경과 한 후 다음 실제 이벤트를 게시하는 같은 엔드 포인트에 연기 된 메시지를 보낼 수 있습니다.