溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何使用Tye輔助開發(fā)k8s 應用

發(fā)布時間:2021-12-16 09:41:12 來源:億速云 閱讀:122 作者:柒染 欄目:云計算

如何使用Tye輔助開發(fā)k8s 應用,相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。

Newbe.Claptrap 是一個用于輕松應對并發(fā)問題的分布式開發(fā)框架。如果您是首次閱讀本系列文章。建議可以先從本文末尾的入門文章開始了解。

服務發(fā)現(xiàn) - 微服務開發(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)的效果。

然后,使用 Tye.Configuration

添加包

運行以下命令,為 TyeTest 項目添加包:

dotnet add ./TyeTest/TyeTest.csproj package Microsoft.Tye.Extensions.Configuration --version 0.6.0-alpha.21070.5

添加 HttpClientFactory

由于我們需要使用 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" });      });  }

使用 HttpClient 調(diào)用服務

進入 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;        }    }}

值得注意的是:

  1. 構造函數(shù)中注入的 IConfiguration 是 Aspnet Core 的內(nèi)在機制,無需特殊注冊。

  2. _configuration.GetServiceUri("tyetest2") 是本示例的關鍵點。其通過一個服務名稱來獲取服務的具體 Uri 地址,這樣便可以屏蔽部署時,服務地址的細節(jié)。

這樣,就結束了。

接下來只要使用 tye run 便可以在本地查看已經(jīng)改造好的服務。調(diào)用第一個服務的接口,并可以得到預期的從第二個服務返回的數(shù)據(jù)。

最后,發(fā)到 K8S 里面試一下

若要發(fā)布到 k8s 進行測試,只要按照前篇的內(nèi)容,設置到 docker registry 和 ingress 便可以進行驗證了。

開發(fā)者可以自行配置并嘗試。

看完上述內(nèi)容,你們掌握如何使用Tye輔助開發(fā)k8s 應用的方法了嗎?如果還想學到更多技能或想了解更多相關內(nèi)容,歡迎關注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI