如何将 c# dotnet core 3.1 微服务流绑定到涡轮服务器流

问题描述

我有一个在 openshift 3 上运行的涡轮服务器,并使用 steeltoe 3.0.2 断路器库部署了一个 donet 核心 3.1 c# 微服务。我可以通过服务流 url (/hystrix/hystrix.stream) 监控 hystrix 仪表板上的微服务流。我要做的是将微服务hystrix事件流注册到涡轮服务器事件流中。有谁知道如何做到这一点?任何参考链接也会有很大帮助。

更新:项目参考和设置文件配置

myproject.csproj:

<ItemGroup>
  <packagereference Include="Steeltoe.CircuitBreaker.Hystrix.MetricsEventscore" Version="3.0.2" />
  <packagereference Include="Steeltoe.CircuitBreaker.Hystrixcore" Version="3.0.2" />
<ItemGroup>

startup.cs:配置服务部分

services.AddMvc(options => options.EnableEndpointRouting = false);
services.AddHystrixCommand<MyCircuitBreakerCommand>("MyCircuitBreakerGroup",Configuration);
services.AddHystrixMetricsstream(Configuration);

startup.cs -> 配置部分

app.UseHystrixRequestContext();
app.UseHystrixMetricsstream();
app.UseMvc();

我也没有修改 program.cs 或任何 .json 设置文件

最近尝试访问这些微服务资源:/hystrix/config.stream、/hystrix/request.stream 和 /hystrix/utilization.stream,但得到这个内部服务器错误

Connection id "0HM90GL5F64RK",Request id "0HM90GL5F64RK:00000003":应用程序抛出了一个未处理的异常。 system.invalidOperationException:尝试激活“Steeltoe.CircuitBreaker.Hystrix.MetricsEvents.Controllers.HystrixConfigStreamController”时,无法解析“Steeltoe.CircuitBreaker.Hystrix.Config.HystrixConfigurationStream”类型的服务。 在 Microsoft.Extensions.DependencyInjection.ActivatorUtilities.GetService(IServiceProvider sp,Type type,Type requiredBy,Boolean isDefaultParameterrequired) 在 lambda_method(Closure,IServiceProvider,Object[] ) 在 Microsoft.AspNetCore.Mvc.Controllers.ControllerActivatorProvider.c__displayClass4_0.b__0(ControllerContext controllerContext) 在 Microsoft.AspNetCore.Mvc.Controllers.ControllerFactoryProvider.c__displayClass5_0.g__CreateController|0(ControllerContext controllerContext) 在 Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next,Scope& scope,Object& state,Boolean& isCompleted) 在 Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeInnerFilterasync() --- 从上一个抛出异常的位置开始的堆栈跟踪结束 --- 在 Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Awaited|24_0(ResourceInvoker invoker,Task lastTask,State next,Scope scope,Object state,Boolean isCompleted) 在 Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Rethrow(ResourceExecutedContextSealed context) 在 Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Next(State& next,Boolean& isCompleted) 在 Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.InvokeFilterPipelineAsync() --- 从上一个抛出异常的位置开始的堆栈跟踪结束 --- 在 Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Logged|17_1(ResourceInvoker invoker) 在 Microsoft.AspNetCore.Builder.RouterMiddleware.Invoke(HttpContext httpContext) 在 Steeltoe.CircuitBreaker.Hystrix.HystrixRequestContextMiddleware.Invoke(HttpContext context) 在 Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpProtocol.ProcessRequests[TContext](IHttpApplication`1 应用程序) 失败:Microsoft.AspNetCore.Server.Kestrel[13]

解决方法

此错误消息告诉我们 HystrixConfigurationStream 尚未注册到服务容器。可以在startup.cs中使用以下代码添加:

services.AddHystrixConfigStream(Configuration);

但我认为更好的选择是将 AddHystrixMetricsStream 复数化为 AddHystrixMonitoringStreams,它也注册 a couple other things

我个人没有在这段代码上花很多时间,所以我不知道到底发生了什么,但我有 filed an issue 的文档,如果有错误,我们应该能够跟进修复。