如何解决轨道交通按类型对象从拓扑中排除消息类型
首先,请原谅我的英语很糟糕。我将 MassTransit 与 Azure 服务总线一起用于微服务之间的异步通信。在我的项目中,我需要排除某些类型的消息,以便它们不会被创建为主题。我看过文档(https://masstransit-project.com/releases/v7.0.4.html#rabbitmq-azure-service-bus)讨论这个问题的部分,暴露了两个方法,通过类/接口中的一个属性,或者通过拓扑配置中的一个方法。
选项 1
[ExcludeFromTopology]
public interface IEvent
{
Guid TransactionId { get; }
}
选项 2
Bus.Factory.CreateUsingRabbitMq(cfg =>
{
cfg.Publish<IEvent>(p => p.Exclude = true);
});
我的问题是这两种方法都不适合我,因为一些要排除的接口在其他库中,我无法将属性添加到这些类型。此外,我也不能在拓扑配置中静态添加这些类型,因为这些类型在运行之前是未知的。这个想法是能够有一个与泛型等效但不是泛型的方法,但带有一个“类型”参数,该参数将该类型配置为从类型学中排除。类似的东西:
示例
var faultType = typeof(Fault<>).MakeGenericType(concreteAggregateType);
var ieventType = typeof(IEvent);
Bus.Factory.CreateUsingRabbitMq(cfg =>
{
cfg.Publish(faultType,p => p.Exclude = true);
cfg.Publish(ieventType,p => p.Exclude = true);
});
此外,在我使用 Mastransit 的整个过程中,我发现在各个方面都具有旨在以通用方式使用但没有非通用等效项的功能。另一个例子是 EndpointConvention.Map<>()
方法。
最后,我无法在运行时动态选择要配置的类型,这使我无法执行以下操作:
示例
IList<Type> typesToExcludeFromTopology = GetTypesToExcludeFromTopology(assembly);
Bus.Factory.CreateUsingRabbitMq(cfg =>
{
typesToExcludeFromTopology.ForEach(t => cfg.Publish(t,p=> p.Exclude = true));
});
有没有其他方法可以解决这个问题?
谢谢。 问候, 博尔哈
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。