【发布时间】:2017-11-20 12:33:32
【问题描述】:
我有一个存储在数据库中的 ICommand 列表,用于遗留流程管理器(我还没有时间将所有代码转换为使用 Sagas)
我需要能够反序列化命令列表并发送它们。
为了能够在 c# 中表示命令,我有一个列表
循环遍历列表并在每个列表上调用 send 会导致问题,因为 Masstransit 只看到 ICommand 而不是底层类型(即使命令是使用类型 info 序列化的)
下面是代码示例:
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);
}
}
在调试器中将鼠标悬停在 cmd.Body 上会显示正确的类型。
但 Masstransit 只看到 ICommand:
找不到消息类型 xxxx.ICommand 的约定
如何才能让 MT 看到正确的类型?
谷歌搜索提出了一些关于 EndpointConvention 的信息,但它看起来不像记录或完整,还有关于拓扑的讨论,但我找不到任何关于它的信息。
我可以做些什么来完成这项工作?我正在使用城堡温莎集成并通过ep.LoadFrom(container); 加载我的命令处理程序
[更新]
我可以使用以下方法获取消息的底层类型:
var type = cmd.Body.GetType();
有没有将该类型用作通用参数:
this._commandBus.Send(cmd.Body).Wait();
我猜是这个问题?
【问题讨论】:
标签: rabbitmq masstransit