zipkin+owin wep api集成
阿新 • • 發佈:2018-02-07
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) { //註冊成webapiHttpConfiguration 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集成