消费者界面在MassTransit
所有人都期望消息模型是类而不是结构。由于它们都是内部接口(我必须说那里的设计非常好),这是显示约束的通用容器类,直接获取从源代码来看 https://github.com/MassTransit/MassTransit/blob/v2.8.0/src/MassTransit/Consumes.cs:
/// <summary>
/// Declares a Consume method for the message type TMessage which is called
/// whenever a a message is received of the specified type.
/// </summary>
public static class Consumes<TMessage> where TMessage : class
对于刚开始使用该技术的人来说这不是问题,但对我们来说却很麻烦,因为在考虑使用服务总线框架之前,我们的代码库中已经有了与命令模式相关的对象,因此我们必须更改了相当多的接口和通用类来添加约束,使它们能够与 MT 一起使用。
我们很幸运没有明确地有任何struct
但是,因为这可能会导致更多(可能是不需要的)更改。
为什么要求消息类别是class
?是否可以改变这一点,以便该库与现有代码更无缝地交互?我认为这个约束并不是无缘无故添加的,所以可能会出现一些复杂的情况。
实际上,所有消息契约都应该是接口。抽象应该从任何逻辑中删除,接口将强制执行这一点。您还可以以有趣的方式组合传递,因为 MT 将传递到继承/实现层次结构中的所有匹配路由。
但无论我们建议对消息做什么,事实证明值类型不会按照我们使用它们的方式工作。我们严重依赖类型信息,并且我们可以为交付给您的消费者的类型创建代理。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)