Управление подключением Mass Transit в библиотеке классов - PullRequest
0 голосов
/ 21 мая 2018

Я пытаюсь использовать общественный транспорт для обработки ответа на запрос.Большинство примеров для общественного транспорта относятся к консольному приложению или веб-приложению, и я не знаю, как запустить или остановить шину на производителе, когда я использую ее в библиотеке классов.

Потому что в примерах для шины веб-приложений, запускаемой при запуске приложения, а для библиотеки классов нет такого понятия, как startup.cs.

У меня вопрос: где запустить автобус или остановиться, когда я использую библиотеку классов для подключения к шине?

Мой код производителя выглядит как

IBusControl busControl = CreateBus();
TaskUtil.Await(() => busControl.StartAsync());
IRequestClient<IAccountingRequest, IAccountingResponse> client = CreateRequestClient(busControl);
IAccountingResponse response = null;
AccountingRequest accountingRequest = MapToAccountingRequest(accountingIntegration);

Task.Run(async () =>
{
    response = await client.Request(accountingRequest);          
}).Wait();
busControl.Stop();

Но я думаю, что запуск иОстановка автобуса для каждого запроса не хорошо.

1 Ответ

0 голосов
/ 21 мая 2018

Вы должны предоставить методы в своей библиотеке классов для запуска / остановки шины.Вы можете абстрагировать их по своему усмотрению, но предоставьте разработчику возможность запускать и выключать шину.Многие другие библиотеки для этого, как правило, с помощью метода Stop, Shutdown, Close и т. Д.

Тот факт, что вы также скрываете задачу в приведенном выше примере и блокируете / ждете, заставляет меня чувствовать, что вы застряливнутри чего-то супер наследства, которого вы не можете избежать.В этом случае, ну, я должен был сказать это, но управлял ссылкой на шину в каком-то статическом синглтоне (yuck) и запускал ее при первом использовании (double yuck), затем попытался найти ловушку при выходе из приложениячтобы остановить его (удача).

Лучшее решение - дать разработчикам вызов в вашу библиотеку, чтобы отключить ее, чтобы они могли освободить соединение и ресурсы.

...