MassTransit을 통해 게시하려고 시도하는 메시지에 기본 타이핑 문제가 있습니다. 에 관계없이 콘크리트 종류의, 나는이 컬렉션에서 어떤 이벤트를 수신하지 않습니다MassTransit 메시지가 잘못 입력되었습니다.
public void PublishEvents(IEnumerable<Event> events) {
foreach (var e in events) {
Bus.Instance.Publish(e);
}
}
: 내가 좋아하는 뭔가 추상적 이벤트의 컬렉션을 게시하려고 할 때, 그러나
[Serializable]
public abstract class Event : CorrelatedBy<Guid> {
public Guid CorrelationId { get; set; }
public abstract string EventName { get; }
public override string ToString() {
return string.Format("{0} - {1}", EventName, CorrelationId);
}
}
[Serializable]
public class PersonCreated : Event {
public PersonCreated(Guid personId, string firstName, string lastName) {
PersonId = personId;
FirstName = firstName;
LastName = lastName;
}
public readonly Guid PersonId;
public readonly string FirstName;
public readonly string LastName;
}
: 다음 사항을 고려 . 버스에 게시하기 전에 이벤트를 적절한 구체 유형으로 캐스팅하면 메시지가 올바르게 수신됩니다.
내 추상 이벤트 컬렉션이 각 이벤트를 캐스팅하지 않고 처리 할 수 있도록이 문제를 해결할 수있는 방법에 대한 아이디어가 있습니까?
편집 : 내가 지금처럼 BinarySerialization를 이용할 수 있도록 설정을 변경 시도 :
Bus.Initialize(sbc =>
{
sbc.UseBinarySerializer();
});
과 행동의 변화를 굴복하지 않았습니다. 내 Consumes<PersonCreated>
클래스를 호출 할 수있는 유일한 방법은 이벤트를 명시 적으로 PersonCreated
유형으로 캐스팅하는 것입니다.
아 .. 저는 오늘이 문제에 대한 토론 목록을 조사해 왔으며, 더 많은 사람들이 여기에서 볼 수 있듯이 이것이 게시하기 좋은 곳이라고 생각했습니다. 나는 교차 게시 할 예정이다. –
우리 MT 개발자는 우리가 SO 게시글을보기 전에 이메일을 볼 것이다. 우리는 질문에 매우 민감하게 반응하려고 노력합니다. – Travis
BinarySerializer 사용 시도에 대한 정보를 포함하도록 내 질문을 업데이트했습니다. –