大众运输消息输入错误

2023-11-27

我尝试通过 MassTransit 发布的消息遇到了基本类型问题。考虑以下:

[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;

}

但是,当我尝试发布一组抽象事件时,例如:

public void PublishEvents(IEnumerable<Event> events) {

    foreach (var e in events) {

        Bus.Instance.Publish(e);

    }

}

我没有收到此集合中的任何事件,无论其具体类型如何。如果我在总线上发布之前将事件转换为其正确的具体类型,我确实会正确接收消息。

关于如何纠正此问题以允许处理我的抽象事件集合而不强制转换每个事件的任何想法?

EDIT:我尝试更改我的设置以使用 BinarySerialization,如下所示:

 Bus.Initialize(sbc =>
     {
         sbc.UseBinarySerializer();
     });

并且没有产生任何行为改变。我能够得到我的唯一方法Consumes<PersonCreated>要调用的类是显式地将事件转换为PersonCreated type.


编辑:序列化器在这里并不重要。我没有考虑清楚这一点。

你可以调用Bus.Instance.Publish通过反思来获得正确的类型信息Event对象并获取它的实际类型。这将是一些尴尬的代码,但一旦完成可能很容易重用。在 Magnum 中,我们有一个扩展方法来帮助解决这个问题。

Bus.Instance.FastInvoke(new[]{ event.GetType() }, "Publish", event);

加入我们的邮件列表,http://groups.google.com/group/masstransit-discuss,我们很乐意进行更多详细讨论。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

大众运输消息输入错误 的相关文章

随机推荐