Rabbitmq Masstransit发送ICommand

Rabbitmq Masstransit发送ICommand,rabbitmq,masstransit,Rabbitmq,Masstransit,我有一个ICommand列表,我存储在DB中,用于一个遗留流程管理器(我还没有时间将所有代码转换为使用Sagas) 我需要能够反序列化命令列表并发送它们 为了能够用c语言表示命令,我有一个列表 在列表中循环并在每个列表上调用send会导致问题,因为Masstransit只看到ICommand,而看不到基础类型(即使命令是用类型信息序列化的) 下面是一个代码示例: if (deserializedCommands == null) { deserializedCommands = this.

我有一个ICommand列表,我存储在DB中,用于一个遗留流程管理器(我还没有时间将所有代码转换为使用Sagas)

我需要能够反序列化命令列表并发送它们

为了能够用c语言表示命令,我有一个列表

在列表中循环并在每个列表上调用send会导致问题,因为Masstransit只看到ICommand,而看不到基础类型(即使命令是用类型信息序列化的)

下面是一个代码示例:

if (deserializedCommands == null)
{
   deserializedCommands = this._serializer.Deserialize<IEnumerable<Envelope<ICommand>>>(undispatched.Commands).ToList();

   while (deserializedCommands.Count > 0)
   {
       var cmd = deserializedCommands.First();

       this._commandBus.Publish(cmd.Body).Wait();

       deserializedCommands.RemoveAt(0);
   }
}
是否仍可以将该类型用作以下对象的通用参数:

this._commandBus.Send(cmd.Body).Wait();

我想这就是问题所在。

如果你知道下面的消息类型,你可以使用
上下文。TryGetPayload
来检索你需要的对象。

如果你从数据库中得到了具体的对象,并且正在正确地反序列化它,那么在MassTransit中使用
发送
对象
重载,而不是使用interface重载。通过使其成为对象,MassTransit将在运行时确定类型,并为实际对象类型使用匹配的序列化程序,而不是指定的接口类型。

这是在接收端吗?问题是消息仅包含ICommand中指定的属性,而ICommand只是使用者的一个名称你应该调用我在回答中所写的方法。但我误解了你。你想发送,克里斯已经回答了。工作就像一个符咒,在我摆弄了各种(复杂得多)的东西之后,让它工作起来-这样一个简单的解决方案立即起作用是巨大的:)谢谢!:)你不是第一个经历过这个问题的人。我相信你现在已经猜到了。有一个平滑的解决方案,TBF文档警告我的场景!我正在更新一些旧代码,并希望以迭代方式进行转换,这就达到了最佳效果
this._commandBus.Send(cmd.Body).Wait();