微软微服务构建框架Dapr基础入门教程

发布时间 2023-11-03 18:12:36作者: 一叶、知秋

最近学习dapr,决定将过程在此记录,也为小伙伴们学习的时候提供一份参考。

Dapr的介绍这里就不多说了,大家直接可以去百度或者去官网上进行查阅,本文就简单介绍下如何使用。

Dapr官方中文文档

一、安装Dapr CLI

  选择与您使用的系统对应的安装方式即可,我这里使用的是windows系统,故使用windows系统做示例。

  1. 在线安装,使用管理员权限打开cmd,直接将一下命令粘贴进去执行就可以了(命令中的链接可能根据您的网络不同而出现连不上的情况,如果连不上,请使用第二种方式)。

powershell -Command "iwr -useb https://raw.githubusercontent.com/dapr/cli/master/install/install.ps1 | iex"

  2. 离线安装,将github中对应的软件包下载并安装就可以了。github地址

   3. 安装完成,在cmd输入dapr,如果出现以下结果,就说明安装成功,可以进行下一步了。

 二、本地初始化Dapr(安装dapr自带的中间件)。

  1. 使用前请安装docker

  2. 在cmd中输入命令dapr init,等待进行初始化(过程较慢,因为要拉取中间件的docker映像)

  3. 验证dapr版本。输入 dapr --version 查看当前dapr版本,如图

   4.验证docker容器的运行情况,如图

   5. 验证组件目录已初始化,cmd中输入 explorer "%USERPROFILE%\.dapr\" ,如出现以下弹窗,则成功,如图

 三、在代码中使用dapr

  1. 新建一个webapi项目,如图

   2. 稍作修改(不改也可,比较符合自身习惯)

   3. 生成一下项目,并在cmd中进入生成以后的项目的根目录,如图

   4. cmd中输入命令 

dapr run --app-id cart --app-port 5000 dotnet dapr.serv.one.dll

  dapr run表示启动dapr服务

  app-id表示服务id

  app-port表示服务端口(推荐app-port和服务中的端口设为一致)

  donet dapr.serv.one.dll 表示启动asp.net core程序的命令

  如图,表示成功启动

   5. 接下来,我们使用dapr的方式,来进行服务调用

        新建空控制台项目,并将dapr.serv.one中的WeatherForecast类复制到本项目中,在nuget中安装 Dapr.Client 类库和 Newtonsoft.Json 类库。

    开始调用,如图

   使用DaprClient调用的方式

     使用HttpClient的调用方式

     以下为图中代码:

using Dapr.Client;
using Newtonsoft.Json;

namespace ConsoleApp3
{
    internal class Program
    {
        static void Main(string[] args)
        {
            var result = DaprTest().Result ?? new List<WeatherForecast>();
            Console.WriteLine(JsonConvert.SerializeObject(result));
        }

        public static async Task<IEnumerable<WeatherForecast>?> DaprTest()
        {
            var daprClient = new DaprClientBuilder().Build();
            return await daprClient.InvokeMethodAsync<IEnumerable<WeatherForecast>>(HttpMethod.Get, "cart", "WeatherForecast/GetWeatherForecast");
            
        }
    }
}

  

using Dapr.Client;
using Newtonsoft.Json;
using System.Net.Http.Json;

namespace ConsoleApp3
{
    internal class Program
    {
        static void Main(string[] args)
        {
            var result = DaprTest().Result ?? new List<WeatherForecast>();
            Console.WriteLine(JsonConvert.SerializeObject(result));
        }

        public static async Task<IEnumerable<WeatherForecast>?> DaprTest()
        {
            var httpClient = DaprClient.CreateInvokeHttpClient(daprEndpoint: "http://localhost:51323", appId: "cart");
            return await httpClient.GetFromJsonAsync<IEnumerable<WeatherForecast>>("WeatherForecast/GetWeatherForecast");
        }
    }
}

  其中,daprEndpoint中的端口,要设置为dapr服务启动成功后给出的端口地址,而不是app地址,否则调用服务的时候调用不到。WeatherForecast/GetWeatherForecast 则表示服务的具体路径

     

    结果如下:

   好了,dapr的基础入门就介绍到这里,后续的订阅/发布及其他功能,如有时间,我会继续补充。

  本人也是小白刚刚入门,如有理解或者操作不对的地方,烦请朋友们指正。