• 引入Jaeger——使用


      上一篇定义了两种使用Jaeger的方式:中间件和action过滤器,下面这个例子定义了两个服务 WebAPI01,请求WebAPI02,采用的是中间件的请求方式。

     

    引入JaegerSharp包(或发布到自己的Nuget库里引用)

     

    WebAPI01的Startup

    using JaegerSharp;
    using Microsoft.AspNetCore.Builder;
    using Microsoft.AspNetCore.Hosting;
    using Microsoft.Extensions.Configuration;
    using Microsoft.Extensions.DependencyInjection;
    using Microsoft.Extensions.Hosting;
    using Microsoft.OpenApi.Models;
    using System;
    
    namespace WebAPI01
    {
        public class Startup
        {
            public Startup(IConfiguration configuration)
            {
                Configuration = configuration;
            }
            public IConfiguration Configuration { get; }
            public void ConfigureServices(IServiceCollection services)
            {
                //命名客户端
                services.AddHttpClient("WebAPI02", client =>
                {
                    client.BaseAddress = new Uri(Configuration.GetSection("DownStreamUrl").Value);
                });
                services.AddControllers();
                services.AddSwaggerGen(c =>
                {
                    c.SwaggerDoc("v1", new OpenApiInfo { Title = "WebAPI01", Version = "v1" });
                });
                //添加OpenTracing
                services.AddOpenTracing();
                //注入Jaeger
                if (Convert.ToBoolean(Configuration.GetSection("OpenTracing:Enable")?.Value))
                {
                    var agentHost = Configuration.GetSection("OpenTracing:Agent").GetValue<string>("Host");
                    var agentPort = Configuration.GetSection("OpenTracing:Agent").GetValue<int>("Port");
                    var agentMaxPacketSize = Configuration.GetSection("OpenTracing:Agent").GetValue<int>("MaxPacketSize");
                    services.AddJaegerSharp(agentHost, agentPort, agentMaxPacketSize);
                }
            }
    
            public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
            {
                if (env.IsDevelopment())
                {
                    app.UseDeveloperExceptionPage();
                    app.UseSwagger();
                    app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "WebAPI01 v1"));
                }
    
                app.UseHttpsRedirection();
                if (Convert.ToBoolean(Configuration.GetSection("OpenTracing:Enable")?.Value))
                {
                    app.UseJaegerSharp();
                }
                app.UseRouting();
    
                app.UseAuthorization();
    
                app.UseEndpoints(endpoints =>
                {
                    endpoints.MapControllers();
                });
            }
        }
    }

    WebAPI01的appsettings.json

    {
      "Logging": {
        "LogLevel": {
          "Default": "Information",
          "Microsoft": "Warning",
          "Microsoft.Hosting.Lifetime": "Information"
        }
      },
      "OpenTracing": {
        "Enable": true,
        "Agent": {
          "Host": "localhost",
          "Port": 6831,
          "MaxPacketSize": 0
        }
      },
      "DownStreamUrl": "https://localhost:6001"
    }

      调用下游服务 WebAPI02,下游服务 WebAPI02与WebAPI01类似,需要引入JaegerSharp,添加配置文件,指向同一个Jaeger的host,如果WebAPI02有下游API调用,继续配置调用。

    using Microsoft.AspNetCore.Mvc;
    using Microsoft.Extensions.Logging;
    using System.Net.Http;
    using System.Threading.Tasks;
    
    namespace WebAPI01.Controllers
    {
        [ApiController]
        [Route("[controller]")]
        public class HomeController : ControllerBase
        {
            private readonly IHttpClientFactory _clientFactory;
            private readonly ILogger<HomeController> _logger;
    
            public HomeController(ILogger<HomeController> logger, IHttpClientFactory clientFactory)
            {
                _clientFactory = clientFactory;
                _logger = logger;
            }
    
            [HttpGet]
            public async Task<string> Get()
            {
                _logger.LogInformation("WebAPI01中请求WebAPI02");
                var result = await GetWebAPI02();
                return $"WebAPI01请求WebAPI02返回值 :{ result}";
            }
    
            async Task<string> GetWebAPI02()
            {
                using var client = _clientFactory.CreateClient("WebAPI02");
                var request = new HttpRequestMessage(HttpMethod.Get, "/home");
                using var response = await client.SendAsync(request);
                if (response.IsSuccessStatusCode)
                {
                    var result = await response.Content.ReadAsStringAsync();
                    return result;
                }
                else
                {
                    return "error";
                }
            }
        }
    }

    下载Jaeger(https://www.jaegertracing.io/download/),我用的是1.21.0的Windows版本,因为我的开发环境是Windows,运行jaeger-all-in-one.exe

    ,再跑自己的应用,访问完链路后,打开localhost:16686,查看结果如下:

    查询WebAPI01结果

     点击WebAPI01:HTTP GET 7151a0a结果如下,链路清晰

     

      想要更快更方便的了解相关知识,可以关注微信公众号 
     

     

  • 相关阅读:
    Fiddler工具抓包
    简单Ant打包
    android中ActionBar的几个属性
    yum安装php7.2
    java 获取计算机内存
    docker apache安装
    docker 安装 openresty
    docker 安装nginx
    docker安装gitlab
    java获取时间格式
  • 原文地址:https://www.cnblogs.com/axzxs2001/p/15860677.html
Copyright © 2020-2023  润新知