您好,登錄后才能下訂單哦!
如何使用Tye輔助開發(fā)k8s 應用,相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。
Newbe.Claptrap 是一個用于輕松應對并發(fā)問題的分布式開發(fā)框架。如果您是首次閱讀本系列文章。建議可以先從本文末尾的入門文章開始了解。
服務發(fā)現(xiàn),就是新注冊的這個服務模塊能夠及時的被其他調(diào)用者發(fā)現(xiàn)。不管是服務新增和服務刪減都能實現(xiàn)自動發(fā)現(xiàn)。
我們在調(diào)用微服務的過程中,假設在調(diào)用某個 REST API 或者 Thrift API, 為了完成某次調(diào)用請求,代碼里面需要指定服務所在的 IP 地址和端口,在傳統(tǒng)的應用中,網(wǎng)絡地址和端口是靜態(tài)的,一般不會改變,我們只需要把它們配到配置文件中,就可以通過讀取配置文件來完成調(diào)用。但是,在現(xiàn)代基于 Cloud 的微服務架構中,這種方式將失效,因為服務的實例是動態(tài)分配的地址,網(wǎng)絡地址也是動態(tài)的,這樣做的好處是便于服務的自動伸縮,失敗處理和升級.
簡單來說,通過服務發(fā)現(xiàn),服務之間可以使用名稱來代替具體的地址和端口甚至訪問細節(jié)。這樣可以使得服務更加容易適用于云原生這種應用程序?qū)嵗嘧兊沫h(huán)境。
和前篇一樣,我們使用命令行來創(chuàng)建兩個服務。
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
創(chuàng)建 tye.yml
。
便可以在 tye.yml 中得到如下內(nèi)容:
name: tyetestservices: - name: tyetest project: TyeTest/TyeTest.csproj - name: tyetest2 project: TyeTest2/TyeTest2.csproj |
這樣我們就可以在本地使用 tye run
啟動著兩個服務。
接下來,我們會改造其中的 TyeTest 服務,使其調(diào)用 TyeTest2 作為其下游服務。
這樣我們便可以驗證服務發(fā)現(xiàn)的效果。
運行以下命令,為 TyeTest 項目添加包:
dotnet add ./TyeTest/TyeTest.csproj package Microsoft.Tye.Extensions.Configuration --version 0.6.0-alpha.21070.5 |
由于我們需要使用 HttpClient 調(diào)用下游服務,因此需要使用到 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 來調(diào)用下游服務,并且將得到的數(shù)據(jù)返回:
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; } }} |
值得注意的是:
構造函數(shù)中注入的 IConfiguration
是 Aspnet Core 的內(nèi)在機制,無需特殊注冊。
_configuration.GetServiceUri("tyetest2")
是本示例的關鍵點。其通過一個服務名稱來獲取服務的具體 Uri 地址,這樣便可以屏蔽部署時,服務地址的細節(jié)。
這樣,就結束了。
接下來只要使用 tye run
便可以在本地查看已經(jīng)改造好的服務。調(diào)用第一個服務的接口,并可以得到預期的從第二個服務返回的數(shù)據(jù)。
若要發(fā)布到 k8s 進行測試,只要按照前篇的內(nèi)容,設置到 docker registry 和 ingress 便可以進行驗證了。
開發(fā)者可以自行配置并嘗試。
看完上述內(nèi)容,你們掌握如何使用Tye輔助開發(fā)k8s 應用的方法了嗎?如果還想學到更多技能或想了解更多相關內(nèi)容,歡迎關注億速云行業(yè)資訊頻道,感謝各位的閱讀!
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。