1. 程式人生 > >zipkin+owin wep api集成

zipkin+owin wep api集成

eset iap 圖片 完成 efault 允許 ons trac 研究

這裏的zipkin 是應用再owin模式下的簡單web api集成,結合網上資料和本人動手嘗試作為本人筆記使用,如有不足的地方,歡迎各位大神提建議。

zipkin參考地址:https://github.com/openzipkin/zipkin4net

使用編程環境:

開發環境:vs2017

.net版本 4.6.1

1、創建控制臺應用程序

技術分享圖片

2、這裏通過NUGET引入

a. Microsoft.AspNet.WebApi.OwinSelfHost 這個包 用來做 webapi宿主服務

b. zipkin4net 引入zipkin客戶端方法

3、添加Startup類 作為zipkin設置和宿主服務設置的主方法(這裏“cxzczx” 為給本次痕跡的服務名,建議做成可配置)

using Newtonsoft.Json.Serialization;
using Owin;
using System.Web.Http;
using zipkin4net;
using zipkin4net.Tracers.Zipkin;
using zipkin4net.Transport.Http;

namespace ConsoleApp1
{
    public class Startup
    {
        public void Configuration(IAppBuilder appBuilder)
        {

            //註冊成webapi
HttpConfiguration config = new HttpConfiguration(); config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{action}", defaults: new { id = RouteParameter.Optional } ); appBuilder.UseWebApi(config);
var json = config.Formatters.JsonFormatter; json.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); var logger =new ConsoleLogger(); //實現ILogger TraceManager.SamplingRate = 1.0f; //完全跟蹤 var httpSender = new HttpZipkinSender("http://localhost:9411", "application/json");//設置zipkin服務端地址 var tracer = new ZipkinTracer(httpSender, new JSONSpanSerializer()); TraceManager.RegisterTracer(tracer); TraceManager.Start(logger); //關閉 // TraceManager.Stop(); var trace = Trace.Create(); trace.Record(Annotations.ServerRecv()); trace.Record(Annotations.ServiceName("cxzczx")); trace.Record(Annotations.Rpc("GET")); trace.Record(Annotations.ServerSend()); trace.Record(Annotations.Tag("http.url", "<url>")); //adds binary annotation //Trace.Current = trace; } } }

4、在控制臺的Program文件的main方法裏面添加啟動(baseAddress 請設置成你想設置的端口地址,註意不要與已存在的端口沖突)

    static void Main(string[] args)
        {
            string baseAddress = "http://localhost:7400/"; 

            // Start OWIN host 
            using (WebApp.Start<Startup>(url: baseAddress))
            {
                Console.WriteLine("Start server on {0}", baseAddress);
                Console.ReadLine();
            }
        }

5、再添加一個記錄過程ConsoleLogger.cs

using System;
using zipkin4net;

namespace ConsoleApp1
{
    public class ConsoleLogger : ILogger
    {
        public void LogError(string message)
        {
            Console.Error.WriteLine(message);
        }

        public void LogInformation(string message)
        {
            Console.WriteLine(message);
        }

        public void LogWarning(string message)
        {
            Console.ForegroundColor = ConsoleColor.Yellow;
            Console.WriteLine(message);
            Console.ResetColor();
        }
    }
}

6、OK 此時webapi+zipkin已經註冊完成,現在我們添加一個api接口來測試,新建HomeController

   public class HomeController : ApiController
    {
        [HttpGet]
        public HttpResponseMessage GetPhone(int id)
        {
            Random random = new Random();
            var product = new { id = id, name = "小米mix2", ran = random.Next(10000, 99999) };

            HttpResponseMessage result = new HttpResponseMessage();
            result.Content = new StringContent(JsonConvert.SerializeObject(product), Encoding.GetEncoding("UTF-8"), "application/json");
            return result;
        }




    }

7、進行測試 api調用成功!(請允許我打碼掉我的收藏欄-.-)

技術分享圖片

8、查看zipkin服務端發現,調用痕跡已記錄成功!

技術分享圖片

9、OK 簡單的dome已完成,如需要更加詳細痕跡記錄請前前往https://github.com/openzipkin/zipkin4net 另外本人小菜一枚剛開始研究zipkin,結合網上各類資料自己動手試了一下,文中如有不足的地方歡迎指出,各位大神如有更好的解決方案歡迎交流。

zipkin+owin wep api集成