您好,登錄后才能下訂單哦!
這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)?lái)有關(guān)如何在Tye中如何對(duì)數(shù)據(jù)庫(kù)進(jìn)行鏈接,文章內(nèi)容豐富且以專(zhuān)業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
下面我們來(lái)了解一下如何在 Tye 中如何對(duì)數(shù)據(jù)庫(kù)進(jìn)行鏈接。
絕大多數(shù)服務(wù)都需要用到外部中間件來(lái)支持應(yīng)用程序的正常運(yùn)行,通常來(lái)說(shuō),就包含有數(shù)據(jù)庫(kù)、緩存中間件、消息隊(duì)列和文件系統(tǒng)等等。
因此,在開(kāi)發(fā)過(guò)程中需要在應(yīng)用程序中管理對(duì)這些中間件的鏈接字符串。
Tye 提供了一種方式以便更加容易的管理這些鏈接字符串。
首先,我們使用 Tye 來(lái)啟動(dòng)一個(gè) mongo。
手動(dòng)創(chuàng)建一個(gè) tye.yml:
tye.yml
name: mongo-sampleservices: - name: mongo image: mongo env: - name: ME_CONFIG_MONGODB_ADMINUSERNAME value: root - name: ME_CONFIG_MONGODB_ADMINPASSWORD value: example - name: mongo-express image: mongo-express bindings: - port: 8081 containerPort: 8081 protocol: http env: - name: ME_CONFIG_MONGODB_ADMINUSERNAME value: root - name: ME_CONFIG_MONGODB_ADMINPASSWORD value: example |
使用 tye run 便可以在本地啟動(dòng)一個(gè) mongo 并且在 http://localhost:8081 通過(guò) ui 查看 mongo 中的數(shù)據(jù)情況:
實(shí)際上就是使用 Tye 控制 docker desktop 啟動(dòng) mongo。因此需要提前在本地安裝好 docker desktop,以便啟動(dòng)。
當(dāng)然,這實(shí)際上和使用 docker-compose
沒(méi)有什么實(shí)質(zhì)性的區(qū)別。
下面,我們創(chuàng)建一個(gè)應(yīng)用,并且將應(yīng)用與 mongo 進(jìn)行連接。
創(chuàng)建測(cè)試應(yīng)用,并安裝必要的包:
create-tye-mongo-test.sh
dotnet new sln -n TyeTestdotnet new webapi -n TyeTestdotnet sln ./TyeTest.sln add ./TyeTest/TyeTest.csprojdotnet add ./TyeTest/TyeTest.csproj package Microsoft.Tye.Extensions.Configuration --version 0.6.0-alpha.21070.5dotnet add ./TyeTest/TyeTest.csproj package MongoDB.Driver |
進(jìn)入 Startup,向容器中注冊(cè) MongoClient :
Startup.cs
// This method gets called by the runtime. Use this method to add services to the container.public void ConfigureServices(IServiceCollection services){ services.AddControllers(); services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo {Title = "TyeTest", Version = "v1"}); }); services.AddScoped(p => { var config = p.GetRequiredService<IConfiguration>(); var connectionString = config.GetConnectionString("mongo"); Console.WriteLine(connectionString); var client = new MongoClient(connectionString); return client; });} |
值得注意的是,這里使用了一個(gè)擴(kuò)展方法從 IConfiguration
中讀取 mongo 的連接字符串:
mongo
實(shí)際上就是定義在 tye 中的服務(wù)名稱(chēng)。
GetConnectionString
是來(lái)自于 Microsoft.Tye.Extensions.Configuration
的擴(kuò)展方法
MongoClient
應(yīng)該全局單例還是 Scope
其實(shí)筆者也沒(méi)查過(guò)資料。實(shí)際項(xiàng)目開(kāi)發(fā)者注意按照需求調(diào)整。
打開(kāi) WeatherForecastController
,讓我們?cè)诿看谓邮苷?qǐng)求時(shí),都寫(xiě)入一些數(shù)據(jù)到 mongo
中以驗(yàn)證效果。
WeatherForecastController.cs
using System;using System.Collections.Generic;using System.Linq;using System.Threading.Tasks;using Microsoft.AspNetCore.Mvc;using Microsoft.Extensions.Logging;using MongoDB.Driver;namespace TyeTest.Controllers{ [ApiController] [Route("[controller]")] public class WeatherForecastController : ControllerBase { private static readonly string[] Summaries = new[] { "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" }; private readonly ILogger<WeatherForecastController> _logger; private readonly MongoClient _mongoClient; public WeatherForecastController(ILogger<WeatherForecastController> logger, MongoClient mongoClient) { _logger = logger; _mongoClient = mongoClient; } [HttpGet] public IEnumerable<WeatherForecast> Get() { var rng = new Random(); var result = Enumerable.Range(1, 5).Select(index => new WeatherForecast { Date = DateTime.Now.AddDays(index), TemperatureC = rng.Next(-20, 55), Summary = Summaries[rng.Next(Summaries.Length)] }) .ToArray(); var mongoCollection = _mongoClient.GetDatabase(nameof(WeatherForecast)) .GetCollection<WeatherForecast>(nameof(WeatherForecast)); mongoCollection.InsertMany(result); return result; } }} |
至此,測(cè)試應(yīng)用就創(chuàng)建完畢了。預(yù)期的效果是,當(dāng)接受到請(qǐng)求時(shí),就會(huì)向 mongo
中的 WeatherForecast
collection
寫(xiě)入一些數(shù)據(jù)??梢酝ㄟ^(guò) mongo express UI 進(jìn)行查看。
由于前面,我們是手動(dòng)創(chuàng)建過(guò)了 tye.yml
。因此,我們現(xiàn)在直接在原來(lái)的基礎(chǔ)上進(jìn)行修改,以便加入測(cè)試應(yīng)用。
首先,將之前創(chuàng)建好的 tye.yml
放置到 TyeTest.sln
的根目錄。
然后修改為如下形式:
tye.yml
name: mongo-sampleservices: - name: mongo image: mongo env: - name: ME_CONFIG_MONGODB_ADMINUSERNAME value: root - name: ME_CONFIG_MONGODB_ADMINPASSWORD value: example bindings: - containerPort: 27017 connectionString: 'mongodb://${host}:${port}' - name: mongo-express image: mongo-express bindings: - port: 8081 containerPort: 8081 protocol: http env: - name: ME_CONFIG_MONGODB_ADMINUSERNAME value: root - name: ME_CONFIG_MONGODB_ADMINPASSWORD value: example - name: tyetest project: TyeTest/TyeTest.csproj |
對(duì)比之前,一共有兩處修改:
增加了 tyetest
服務(wù)配置的節(jié)點(diǎn),以便能夠啟動(dòng)測(cè)試應(yīng)用
在 mongo
服務(wù)上增加了 bindings
。這是 tye
中組織服務(wù)之間相互連接的一種方式。其中的 connectionString
便是其他服務(wù)連接 mongo
所使用的鏈接串。
修改完畢之后。使用 tye run
啟動(dòng)應(yīng)用。
打開(kāi) swagger
頁(yè)面,并訪問(wèn) API,便可以在 mongo express 中查看到數(shù)據(jù)已經(jīng)成功完成了寫(xiě)入:
查看效果之后可以使用 Ctrl
+C
停止 tye
以移除相關(guān)容器。
上述就是小編為大家分享的如何在Tye中如何對(duì)數(shù)據(jù)庫(kù)進(jìn)行鏈接了,如果剛好有類(lèi)似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。