【问题标题】:MassTransit message mis-typingMassTransit 信息输入错误
【发布时间】:2011-08-29 22:58:20
【问题描述】:

我在尝试通过 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);

    }

}

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

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

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

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

并且没有产生任何行为变化。我能够调用 Consumes&lt;PersonCreated&gt; 类的唯一方法是将事件显式转换为 PersonCreated 类型。

【问题讨论】:

    标签: c# event-handling masstransit


    【解决方案1】:

    编辑:序列化器在这里无关紧要。我没有想到这一点。

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

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

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

    【讨论】:

    • 啊..我今天一直在浏览讨论列表以查找此问题,并认为这是一个发布的好地方,因为更多人会在这里看到它。我会交叉发布
    • 我们,MT 开发人员,在看到 SO 帖子之前会先看到电子邮件。我们尽量对问题做出积极回应。
    • 我已更新我的问题以包含有关我尝试使用 BinarySerializer 的信息
    • 需要更改序列化程序以获取另一端的类型信息。发布过程仅在编译时检查它从Publish&lt;T&gt;T 获得什么类型信息(如果使用反射则运行)。
    • 是的,我们不能 ILMerge Magnum,因为用于 sagas 的状态机已暴露。使用 NuGet,无论如何添加依赖项都容易得多!
    猜你喜欢
    • 2018-12-12
    • 2014-03-30
    • 1970-01-01
    • 2010-10-31
    • 2014-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-11
    相关资源
    最近更新 更多