溫馨提示×

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

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

如何在Tye中如何對(duì)數(shù)據(jù)庫(kù)進(jìn)行鏈接

發(fā)布時(shí)間:2021-12-16 10:12:00 來(lái)源:億速云 閱讀:172 作者:柒染 欄目:云計(jì)算

這期內(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 啟動(dòng) mongo

首先,我們使用 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ù)情況:

如何在Tye中如何對(duì)數(shù)據(jù)庫(kù)進(jìn)行鏈接

實(shí)際上就是使用 Tye 控制 docker desktop 啟動(dòng) mongo。因此需要提前在本地安裝好 docker desktop,以便啟動(dòng)。

當(dāng)然,這實(shí)際上和使用 docker-compose 沒(méi)有什么實(shí)質(zhì)性的區(qū)別。

創(chuàng)建應(yīng)用程序連接 mongo

下面,我們創(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 的連接字符串:

  1. mongo 實(shí)際上就是定義在 tye 中的服務(wù)名稱(chēng)。

  2. GetConnectionString 是來(lái)自于 Microsoft.Tye.Extensions.Configuration 的擴(kuò)展方法

  3. 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)行查看。

修改 tye.yml 以配置鏈接串

由于前面,我們是手動(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ì)比之前,一共有兩處修改:

  1. 增加了 tyetest 服務(wù)配置的節(jié)點(diǎn),以便能夠啟動(dòng)測(cè)試應(yīng)用

  2. 在 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ě)入:

如何在Tye中如何對(duì)數(shù)據(jù)庫(kù)進(jìn)行鏈接

查看效果之后可以使用 Ctrl+C 停止 tye 以移除相關(guān)容器。

上述就是小編為大家分享的如何在Tye中如何對(duì)數(shù)據(jù)庫(kù)進(jìn)行鏈接了,如果剛好有類(lèi)似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

AI