我目前正在开展一个项目,该项目允许第 3 方连接到我们产品的消息代理。任务是提供这些第 3 方可以使用的库。我希望能够将 Mass Transit 或 NServiceBus 与其一起打包,但我想将这些细节隐藏在接口后面。
我已经把服务总线本身隐藏起来了......
public class MyServiceBus : IServiceBus {
private readonly MassTransit.IBus _bus;
private readonly MassTransit.IBusControl _busControl;
public PanelSawServiceBus(MassTransit.IBus bus, MassTransit.IBusControl busControl) {
_bus = bus;
_busControl = busControl;
}
public Task PublishAsync<T>(T message, CancellationToken token = default(CancellationToken)) where T : class =>
_bus.Publish(message, token);
public Task SendAsync<T>(T message, CancellationToken token = default(CancellationToken)) where T : class =>
(_bus as ISendEndpointProvider)?.Send(message, token);
public Task StartAsync() => _busControl.StartAsync();
public Task StopAsync() => _busControl.StopAsync();
}
不应允许供应商发布/发送消息,而应仅在消费。如何隐藏消息的使用,以便我可以打包服务总线库而不暴露正在使用的库?
编辑 1 使用 Mass Transit 使用消息看起来像这样
public class MyConsumer : IConsumer<SomeMessage> {
public Task Consume(ConsumeContext<SomeMessage> ctx) => Task.CompletedTask;
}
在创建服务总线实例的引导期间,您可以定义您的消费者(Mass Transit 将在收到消息时构建它们)。
var busControl = Bus.Factory.CreateUsingInMemory(config => {
config.ReceiveEndpoint("queue_name", endpointCfg => {
endpointCfg.Consumer<MyConsumer>();
}
};
我希望包装器做的是让开发人员说“使用队列工厂,我想用这个队列名称构造一个实例,这里是实现隐藏总线技术接口的消费者接口的类型的名称。” 我只是不知道我是否可以隐藏消费者。
www说
相关分类