【发布时间】:2019-10-15 02:10:21
【问题描述】:
我有一个带有 RabbitMQ(通过 EasyNetQ)和 SignalR 的 ASP.NET Core MVC 项目。
接下来,我订阅了一条 RabbitMQ 消息,该消息应通过 SignalR 向客户端发送通知。
但遗憾的是,中心总是解析为null。
一个有趣的观察是,当应用程序仍在启动并且队列中仍有未确认的消息时,服务实际上解决得很好。
public void ConfigureServices(IServiceCollection services)
{
services.AddSignalR();
services.RegisterEasyNetQ("host=localhost;virtualHost=/");
}
public void Configure(IApplicationBuilder app)
{
app.UseSignalR(route =>
{
route.MapHub<MyHub>("/mypath");
});
app.Use(async (context, next) =>
{
var bus = context.RequestServices.GetRequiredService<IBus>();
bus.SubscribeAsync<MyMessage>("MySubscription", async message =>
{
var hubContext = context.RequestServices
.GetRequiredService<IHubContext<MyHub>>();
// hubContext is null
await hubContext.Clients.All.SendAsync("MyNotification");
});
await next.Invoke();
});
}
我怀疑我在app.Use 中注册订阅时可能做错了什么,但我似乎找不到任何有用的例子,所以这是我能想到的最好的例子。
我正在使用 ASP.NET Core 3 preview 5,不知道这是否与我的问题有关。
所以问题是:如何在消息订阅处理程序中获取中心上下文?
更新
我检查了GetRequiredService docs,如果服务无法解析,调用实际上应该抛出InvalidOperationException,但它没有。它返回null,据我所知,这是不可能的(除非默认容器支持注册空值实例)。
【问题讨论】:
标签: asp.net-core rabbitmq signalr easynetq