Проблема в том, что я пытаюсь создать единый фасад для работы с очередями и темами, сохраняя семантику Send
против Publish
Например:
public interface IServiceBus
{
Task Send<T>(T message, string destination, SendOptions options = null);
Task Publish<T>(T message, string topic, SendOptions options = null);
}
Send()
отправит сообщение в очередь, а Publish()
опубликует сообщение в теме. Поэтому мне нужно иметь экземпляр IQueueClient
и ITopicClient
, чтобы это произошло; Я вставил бы их в мою IServiceBus
реализацию как зависимости и вызвал бы их соответственно.
Проблема в том, что QueueClient и TopicClients требуют, чтобы вы указывали их назначения при обновлении клиентов, что не позволяет мне разрешить это в качестве параметров для моей IServiceBus
реализации.
Я мог бы просто создать клиента во время создания сообщения, но это супер неэффективно. Я искал хотя бы диспетчер соединений, который мог бы выступать в роли фабрики для клиентов, но, похоже, MessagingFactory
не входит в этот SDK (Microsoft.Azure.ServiceBus 3.4.0).
Так что вопросы
- Есть ли какая-то фабрика, которую я могу использовать, которая позволила бы мне создавать подходящих клиентов по требованию с той же эффективностью, которую можно было бы получить, повторно используя клиентов?
- Есть ли какой-то тип переопределения или альтернативный объект клиента, который я должен использовать для достижения этого эффекта? Эти два клиента действительно ограничивают.