您好,登錄后才能下訂單哦!
如何使用Tye輔助開發k8s 應用,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
Newbe.Claptrap 是一個用于輕松應對并發問題的分布式開發框架。如果您是首次閱讀本系列文章。建議可以先從本文末尾的入門文章開始了解。
服務發現,就是新注冊的這個服務模塊能夠及時的被其他調用者發現。不管是服務新增和服務刪減都能實現自動發現。
我們在調用微服務的過程中,假設在調用某個 REST API 或者 Thrift API, 為了完成某次調用請求,代碼里面需要指定服務所在的 IP 地址和端口,在傳統的應用中,網絡地址和端口是靜態的,一般不會改變,我們只需要把它們配到配置文件中,就可以通過讀取配置文件來完成調用。但是,在現代基于 Cloud 的微服務架構中,這種方式將失效,因為服務的實例是動態分配的地址,網絡地址也是動態的,這樣做的好處是便于服務的自動伸縮,失敗處理和升級.
簡單來說,通過服務發現,服務之間可以使用名稱來代替具體的地址和端口甚至訪問細節。這樣可以使得服務更加容易適用于云原生這種應用程序實例多變的環境。
和前篇一樣,我們使用命令行來創建兩個服務。
dotnet new sln -n TyeTestdotnet new webapi -n TyeTestdotnet sln .\TyeTest.sln add .\TyeTest\TyeTest.csprojdotnet new webapi -n TyeTest2dotnet sln .\TyeTest.sln add .\TyeTest2\TyeTest2.csproj |
然后使用 tye init
創建 tye.yml
。
便可以在 tye.yml 中得到如下內容:
name: tyetestservices: - name: tyetest project: TyeTest/TyeTest.csproj - name: tyetest2 project: TyeTest2/TyeTest2.csproj |
這樣我們就可以在本地使用 tye run
啟動著兩個服務。
接下來,我們會改造其中的 TyeTest 服務,使其調用 TyeTest2 作為其下游服務。
這樣我們便可以驗證服務發現的效果。
運行以下命令,為 TyeTest 項目添加包:
dotnet add ./TyeTest/TyeTest.csproj package Microsoft.Tye.Extensions.Configuration --version 0.6.0-alpha.21070.5 |
由于我們需要使用 HttpClient 調用下游服務,因此需要使用到 HttpClientFactory。故而,在 TyeTest 項目的 Startup.cs 增加對 HttpClientFactory 的注冊。
public void ConfigureServices(IServiceCollection services) {+ services.AddHttpClient(); services.AddControllers(); services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo { Title = "TyeTest", Version = "v1" }); }); } |
進入 WeatherForecastController, 我們使用 HttpClient 來調用下游服務,并且將得到的數據返回:
using System;using System.Collections.Generic;using System.Linq;using System.Net.Http;using System.Text.Json;using System.Threading.Tasks;using Microsoft.AspNetCore.Mvc;using Microsoft.Extensions.Configuration;using Microsoft.Extensions.Logging;namespace TyeTest.Controllers{ [ApiController] [Route("[controller]")] public class WeatherForecastController : ControllerBase { private readonly ILogger<WeatherForecastController> _logger; private readonly IConfiguration _configuration; private readonly HttpClient _httpClient; public WeatherForecastController(ILogger<WeatherForecastController> logger, IConfiguration configuration, HttpClient httpClient) { _logger = logger; _configuration = configuration; _httpClient = httpClient; } [HttpGet] public async Task<string> Get() { var serviceUri = _configuration.GetServiceUri("tyetest2"); Console.WriteLine(serviceUri); var httpResponseMessage = await _httpClient.GetAsync($"{serviceUri}WeatherForecast"); var json = await httpResponseMessage.Content.ReadAsStringAsync(); return json; } }} |
值得注意的是:
構造函數中注入的 IConfiguration
是 Aspnet Core 的內在機制,無需特殊注冊。
_configuration.GetServiceUri("tyetest2")
是本示例的關鍵點。其通過一個服務名稱來獲取服務的具體 Uri 地址,這樣便可以屏蔽部署時,服務地址的細節。
這樣,就結束了。
接下來只要使用 tye run
便可以在本地查看已經改造好的服務。調用第一個服務的接口,并可以得到預期的從第二個服務返回的數據。
若要發布到 k8s 進行測試,只要按照前篇的內容,設置到 docker registry 和 ingress 便可以進行驗證了。
開發者可以自行配置并嘗試。
看完上述內容,你們掌握如何使用Tye輔助開發k8s 應用的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。