nservice bus saga를 사용하여 내 커넥터를 구현했습니다. 다음은 NserviceBus가 기존의 Saga 데이터를로드하지 않습니다.
public class ClientSaga : Saga<ClientSagaState>,
IAmStartedByMessages<ClientChangeMessage>,
IAmStartedByMessages<ClientContactChangeMessage>,
IAmStartedByMessages<ClientPictureChangeMessage>,
IHandleTimeout<ClientSagaState>
{
[SetterProperty]
public IClientContactChangeDb ClientContactChangeDb{get;set;}
[SetterProperty]
public IBusRefTranslator BusRefTranslator{get;set;}
public void Handle(ClientContactChangeMessage message)
{
var state=this.Data;
//Some handling logic
//Check if client is not in database then store the state
state.ClientContactChange=message;
state.ClientRef =message.ClientRef;
//if client is in the data base then
MarkAsComplete();
}
public void Handle(ClientChangeMessage message)
{
var state=this.data;
//Update or create the client depending on the situation
//check for dependencies
if(state.ClientContactChange !=null)
{
//Handle the contact change
}
else
{
state.ClientChangeMessage=message;
state.ClientRef=message.ClientRef;
}
}
public void Handle(ClientPictureChangeMessage message)
{
var state=this.Data;
//If the client is there then update the picture else store in saga
state.ClientPictureChangeMessage =message;
state.ClientRef=message.ClientRef;
}
}
public override void ConfigureHowToFindSaga()
{
ConfigureMapping<ClientContactChangeMessage>(s => s.ClientRef, m => m.ClientRef);
ConfigureMapping<ClientPictureChangeMessage>(s => s.ClientRef, m => m.ClientRef);
ConfigureMapping<ClientChangeMessage>(s => s.ClienttnRef, m => m.Id);
}
}
public class ClientSagaState: IContainSagaData
{
//i dont need these three fields
public Guid Id { get; set; }
public string Originator { get; set; }
public string OriginalMessageId { get; set; }
// the fields which i needed
public Guid ClientRef {gee; set;}
public ClientChangeMessage ClientChange {get;set;}
public ClientContactChange ClientContactChange {get;set;}
public ClientPictureChangeMessage ClientPictureChangeMessage {get;set;}
}
지금 내 커넥터에서 클라이언트가 클라이언트 연락처 변경 메시지/O를 존재 승을 만들 수 없습니다 코드입니다.
사가 실패
케이스 : 내가 클라이언트 사진 메시지를 보낼 때
- 먼저 새로운 사가 저장 파일을 작성합니다.
- 그럼 난 또 다른 모험과 저장이 내가 클라이언트 연락처 변경 메시지를 보내
- 그런 다음 클라이언트 사진 메시지에 의해 생성 된 무용담을 찾을 수 없습니다 어떻게 든 의해 생성 된 무용담을 발견 즉, 생성하는 클라이언트 변경 메시지를 보내 클라이언트 그림이 변경되었지만 이제 직원을 찾을 수 없습니다.
왜 이런 일이 발생하는지 알 수 없습니다.
사가 성공케이스 : 내가 먼저 클라이언트 변경 메시지를 보낼 때
- 이는 무용담을 만듭니다.
- 그런 다음 클라이언트 연락처 변경 메시지를 보내면 해당 서버가 이고 제대로 실행됩니다.
누구든지이 문제가 발생하는 이유를 설명해주십시오.
자세한 정보가 필요하면 알려주십시오.
감사
UPDATE 다시는 내 코드를 검사에
, 난이의 원인을 발견했다. 내 ClientChangeMessage는 IContainSaga 데이터 (내가 시도했지만 제거하는 것을 잊어 버렸던 무언가)를 상속 받았다. 상속 링크를 제거한 후에 모든 것이 잘 작동했습니다. 수치스럽게 매달려있는 머리
ClientChangeMessage가 ClientRef가 아닌 Id에 의해 조회 된 것처럼 보입니까? –
클라이언트 변경 메시지의 경우 ID와 클라이언트 참조가 동일합니다. 죄송합니다. – sagar
@ sa1986에 대한 언급을 잊어 버렸습니다. 어딘가에서 재연 프로그램을 업로드 할 수 있었습니까? – Simon