Ocelot
Ocelot是一個用.NET Core實現並且開源的API網關,它功能強大,包括了:路由、請求聚合、服務發現、認證、鑒權、限流熔斷、並內置了負載均衡器與Service Fabric、Butterfly Tracing集成。
API網關—— 它是系統的暴露在外部的一個訪問入口。這個有點像代理訪問的家伙,就像一個公司的門衛承擔着尋址、限制進入、安全檢查、位置引導、等等功能。
依賴包
using Ocelot.DependencyInjection;
using Ocelot.Middleware;
Consul
在Ocelot已經支持簡單的負載功能,也就是當下游服務存在多個結點的時候,Ocelot能夠承擔起負載均衡的作用。但是它不提供健康檢查,服務的注冊也只能通過手動在配置文件里面添加完成。這不夠靈活並且在一定程度下會有風險。這個時候我們就可以用Consul來做服務發現,它能與Ocelot完美結合。
它是一個一個分布式的,高度可用的系統,
而且開發使用都很簡便。它提供了一個功能齊全的控制平面,主要特點是:服務發現、健康檢查、鍵值存儲、安全服務通信、多數據中心。
安裝
1.官網地址https://www.consul.io/
2.添加到環境變量
執行consul
看是否安裝成功
執行consul agent
啟動可能會遇到的問題
解決方法
- 配置地址
consul agent -dev -bind 192.168.199.112
Polly
Install-Package Polly
using Polly;
using System;
using System.Net;
using System.Net.Http;
using System.Threading;
namespace PollyDemo.Console
{
class Program
{
static void Main(string[] args)
{
//Policy
// // 1. 指定要處理什么異常
// .Handle<HttpRequestException>()
// // 或者指定需要處理什么樣的錯誤返回
// .OrResult<HttpResponseMessage>(r => r.StatusCode == HttpStatusCode.BadGateway)
// // 2. 指定重試次數和重試策略
// .Retry(5, (exception, retryCount, context) =>
// {
// System.Console.WriteLine($"開始第 {retryCount} 次重試:");
// })
// // 3. 執行具體任務
// .Execute(ExecuteMockRequest);
try
{
Policy.Handle<DivideByZeroException>()
.Retry(5, (ex, count) =>
{
System.Console.WriteLine("執行失敗! 重試次數 {0}", count);
System.Console.WriteLine("異常來自 {0}", ex.GetType().Name);
}).Execute(() =>
{
Compute();
});
}
catch (Exception ex)
{
System.Console.WriteLine("重試失敗:"+ex.InnerException);
}
System.Console.WriteLine("程序結束,按任意鍵退出。");
System.Console.ReadKey();
}
static HttpResponseMessage ExecuteMockRequest()
{
// 模擬網絡請求
System.Console.WriteLine("正在執行網絡請求...");
Thread.Sleep(3000);
// 模擬網絡錯誤
return new HttpResponseMessage(HttpStatusCode.BadGateway);
}
static int Compute()
{
System.Console.WriteLine("正在執行Compute()...");
Thread.Sleep(3000);
int a = 0;
return 1 / a;
}
}
}