class 图书馆的公共交通连接管理

Mass Transit connection management on class library

我正在尝试使用公共交通工具进行请求响应处理。大多数公共交通示例都是针对控制台应用程序或 Web 应用程序的,当我在 class 库中使用它时,我不知道如何在生产者上启动或停止总线。

因为在应用程序启动时启动 Web 应用程序总线的示例中,但对于 class 库,没有 startup.cs 这样的东西。

我的问题是,当我使用 class 库连接公交车时,公交车从哪里开始或停止?

我的生产者代码看起来像

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();

但我认为每次请求都启动和停止总线并不好。

您应该在 class 库中为 Start/Stop 总线提供方法。您可以根据需要抽象它们,但允许开发人员启动和关闭总线。许多其他库,通常通过停止、关闭、关闭等方法

事实上你也在上面的例子中隐藏了任务 blocking/waiting 让我觉得你被困在一些你无法避免的超级遗产中。在这种情况下,好吧,我不得不这样说,但是在一些静态单例中管理对总线的引用(讨厌),并在第一次使用它时启动它(双重讨厌),然后尝试在应用程序退出时找到一个钩子让它干净(祝你好运)。

最好的解决方案是让开发人员调用您的库以将其关闭,以便他们可以释放连接和资源。