В настоящее время я работаю над проектом, который позволяет сторонним организациям подключаться к брокеру сообщений нашего продукта. Задача состоит в том, чтобы предоставить библиотеку, которую могут использовать эти третьи стороны. Я хочу иметь возможность упаковывать либо 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>();
}
};
Я хотел бы, чтобы оболочка позволила разработчику сказать: «Используя фабрику очередей, я хочу создать экземпляр с этим именем очереди, и вот имена типов, которые реализуют потребительский интерфейс, скрывающий интерфейсы технологии шины ». Я просто не знаю, смогу ли я спрятать потребителей.