写点什么

手把手教你学 Dapr - 3. 使用 Dapr 运行第一个.Net 程序

  • 2022 年 1 月 19 日
  • 本文字数:4308 字

    阅读完需:约 14 分钟

注意:

文章中提到的命令行工具即是Windows Terminal/PowerShell/cmd其中的一个,推荐使用Windows Terminal

运行命令行工具的时候建议以管理员身份,避免踩坑

为了保证操作顺畅,建议使用 PowerShell 先执行一下set-ExecutionPolicy RemoteSigned


安装 Docker

因为 Dapr CLI 默认会在 Docker 内启动 redis、zipkin、placement。

当然这些也不是必须要安装的,只是推荐安装可以体验 Dapr 的完整能力,方便后续章节的学习。

  1. 下载并安装 Docker Desktop

https://www.docker.com/products/docker-desktop

  1. 安装 WSL2,使用命令行工具执行命令

wsl --instal
复制代码

如果不能使用 wsl 直接安装的话可以手动安装,运行PowerShell并执行下面两句命令

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestartdism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
复制代码

如果你再次遇到错误提示:0x800f080c 功能名称 VirtualMachinePlatform 未知。

请保证自己的操作系统版本在 Windows 10 build 18917 以上

  1. 重启电脑后下载 WSL2 内核

https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi

  1. 运行命令行工具,设置默认使用 WSL2

wsl --set-default-version 2
复制代码
  1. 下载 Ubuntu 20.04

https://www.microsoft.com/store/apps/9n6svws3rx71

  1. 设置 Docker 使用 WSL2


你“可能”需要一个小工具

不能说的秘密,看文件名猜功能

https://github.com.cnpmjs.org/dotnetcore/FastGithub/releases/download/2.0.4/fastgithub_win-x64.zip


安装 Dapr CLI

官方解释:Dapr CLI 是您用于各种 Dapr 相关任务的主要工具。 您可以使用它来运行一个带有 Dapr sidecar 的应用程序, 以及查看 sidecar 日志、列出运行中的服务、运行 Dapr 仪表板。

CLI 是必须要安装吗?其实也不是,但新手不建议去体验这些骚操作。后续文章会讲解脱离 dapr cli 工作。

  1. 运行Windows TerminalPowerShell,执行命令,这里要耐心等待一下

iwr -useb https://raw.githubusercontent.com/dapr/cli/master/install/install.ps1 | iex
复制代码

如果是cmd执行下面命令:

powershell -Command "iwr -useb https://raw.githubusercontent.com/dapr/cli/master/install/install.ps1 | iex"
复制代码
  1. 验证安装,重新打开命令行工具执行命令dapr,看到下面的提示即安装正确

         __    ____/ /___ _____  _____   / __  / __ '/ __ \/ ___/  / /_/ / /_/ / /_/ / /  \__,_/\__,_/ .___/_/              /_/
===============================Distributed Application Runtime
Usage: dapr [command]
Available Commands: completion Generates shell completion scripts components List all Dapr components. Supported platforms: Kubernetes configurations List all Dapr configurations. Supported platforms: Kubernetes dashboard Start Dapr dashboard. Supported platforms: Kubernetes and self-hosted help Help about any command init Install Dapr on supported hosting platforms. Supported platforms: Kubernetes and self-hosted invoke Invoke a method on a given Dapr application. Supported platforms: Self-hosted list List all Dapr instances. Supported platforms: Kubernetes and self-hosted logs Get Dapr sidecar logs for an application. Supported platforms: Kubernetes mtls Check if mTLS is enabled. Supported platforms: Kubernetes publish Publish a pub-sub event. Supported platforms: Self-hosted run Run Dapr and (optionally) your application side by side. Supported platforms: Self-hosted status Show the health status of Dapr services. Supported platforms: Kubernetes stop Stop Dapr instances and their associated apps. . Supported platforms: Self-hosted uninstall Uninstall Dapr runtime. Supported platforms: Kubernetes and self-hosted upgrade Upgrades a Dapr control plane installation in a cluster. Supported platforms: Kubernetes
Flags: -h, --help help for dapr -v, --version version for dapr
Use "dapr [command] --help" for more information about a command.
复制代码

初始化 Dapr

  1. 使用命令行工具执行命令

dapr init
复制代码

如此之外还有一个精简版的安装方式

dapr init --slim
复制代码

看看官方解释 slim

在此模式下安装了两个不同的二进制文件 daprdplacementplacement是给 actor 用的,之前有提到过。

在此模式下,不会为状态管理或发布/订阅安装任何默认组件(如 Redis),那就只能用服务调用。其他的需要用户自己设置环境和自定义组件。

说白了,你只用服务调用,那 slim 是可以的,否则的话你需要手动配置来解决 CLI 代替你做的那部分工作。

  1. 验证 Dapr 版本

dapr --version
复制代码

当前时间下,我的版本是

CLI version: 1.4.0Runtime version: 1.4.3
复制代码
  1. 验证容器

docker ps
复制代码

dapr init 的容器是包括 dapr_placement, dapr_redis, dapr_zipkin

  1. 验证组件目录,打开目录 %USERPROFILE%\.dapr\,看到如下结构即代表安装完成


运行一个示例代码看看效果

运行环境准备

vs 2022/2019,建议直接上 VS2022 体验 64 位 VS

https://visualstudio.microsoft.com/zh-hans/vs/preview/#download-preview

.net 6,如果你用的不是 vs2022,需要自行安装.net 6

https://download.visualstudio.microsoft.com/download/pr/5bc3c525-d6d5-4370-8468-e44a1b948c03/fe758c9942966b88b52d92ce2823f6c0/dotnet-sdk-6.0.100-rc.2.21505.57-win-x64.exe


从 Github 下载示例代码

使用命令行工具克隆代码库到本地

ssh(推荐)用下面的命令

git clone git@github.com:doddgu/dapr-study-room.git
复制代码

https 用下面的命令

git clone https://github.com/doddgu/dapr-study-room.git
复制代码

没有 git 的需要先安装一下 git,具体教程可以自行百度

https://github.com/git-for-windows/git/releases/download/v2.33.1.windows.1/Git-2.33.1-64-bit.exe


使用 Dapr 运行.Net 示例代码

  1. 使用命令行工具,跳转到源码目录dapr-study-room\Assignment03\Assignment.Server

Tips:在资源管理器找到源码目录

Win 11 可以右键空白区域 -> 在 Windows 终端中打开即可

Win 11 以下在资源管理器输入 cmd

  1. 执行命令dapr run --app-id assignment-server --app-port 5038 dotnet run

可以先不用了解命令行的意思,后续章节会讲解

  1. 看到输入内容如下即运行成功

== APP == info: Microsoft.Hosting.Lifetime[14]== APP ==       Now listening on: https://localhost:7038== APP == info: Microsoft.Hosting.Lifetime[14]== APP ==       Now listening on: http://localhost:5038== APP == info: Microsoft.Hosting.Lifetime[0]== APP ==       Application started. Press Ctrl+C to shut down.== APP == info: Microsoft.Hosting.Lifetime[0]== APP ==       Hosting environment: Development== APP == info: Microsoft.Hosting.Lifetime[0]== APP ==       Content root path: D:\Project\OpenSource\dapr-study-room\Assignment03\Assignment.Servertime="2021-10-27T18:06:11.8422605+08:00" level=info msg="application discovered on port 5038" app_id=assignment-server instance=SSHZ014 scope=dapr.runtime type=log ver=1.4.3time="2021-10-27T18:06:11.8788949+08:00" level=info msg="application configuration loaded" app_id=assignment-server instance=SSHZ014 scope=dapr.runtime type=log ver=1.4.3time="2021-10-27T18:06:11.8803982+08:00" level=info msg="actor runtime started. actor idle timeout: 1h0m0s. actor scan interval: 30s" app_id=assignment-server instance=SSHZ014 scope=dapr.runtime.actor type=log ver=1.4.3time="2021-10-27T18:06:11.8844485+08:00" level=info msg="dapr initialized. Status: Running. Init Elapsed 1830.3305ms" app_id=assignment-server instance=SSHZ014 scope=dapr.runtime type=log ver=1.4.3time="2021-10-27T18:06:11.8920835+08:00" level=info msg="placement tables updated, version: 0" app_id=assignment-server instance=SSHZ014 scope=dapr.runtime.actor.internal.placement type=log ver=1.4.3
复制代码
  1. 还有一个验证方式,使用命令行工具执行命令dapr list

其中 APP ID,APP PORT,COMMAND 是不变的,其余都是变的

APP ID HTTP PORT GRPC PORT APP PORT COMMAND AGE CREATED PID

assignment-server 49948 49949 5038 dotnet run 13m 2021-10-27 18:06.09 22596


调用 Dapr API

  1. 重新打开一个命令行工具

  2. 测试 Dapr API,再打开一个命令行工具

dapr invoke --app-id assignment-server --method hello

  1. 验证运行是否成功

执行 dapr inovoke 的命令行窗口输出如下

App invoked successfully

执行 dapr run 的命令行窗口输出如下

== APP == Hello World!

这个 Hello World 就是 Assignment.Server 的 API /hello 打印出来的,此时你的环境已经 ok,且第一个示例也运行成功了


给自己点个赞吧👍

在这个环境的搭建过程中,可以看到 dapr 还有点“稚嫩”,毕竟现在才 1.4 版本,还有很长的路要走

但是这并不妨碍他带来的一些思想的进步,如果你错过了微服务的第一波浪潮,也错过了 Service Mesh,那分布式应用运行时(Dapr)可以作为你新的起点


本章源码

Assignment03

https://github.com/doddgu/dapr-study-room


我们正在行动,新的框架、新的生态

我们的目标是自由的易用的可塑性强的功能丰富的健壮的

所以我们借鉴 Building blocks 的设计理念,正在做一个新的框架MASA Framework,它有哪些特点呢?

  • 原生支持 Dapr,且允许将 Dapr 替换成传统通信方式

  • 架构不限,单体应用、SOA、微服务都支持

  • 支持.Net 原生框架,降低学习负担,除特定领域必须引入的概念,坚持不造新轮子

  • 丰富的生态支持,除了框架以外还有组件库、权限中心、配置中心、故障排查中心、报警中心等一系列产品

  • 核心代码库的单元测试覆盖率 90%+

  • 开源、免费、社区驱动

  • 还有什么?我们在等你,一起来讨论

经过几个月的生产项目实践,已完成 POC,目前正在把之前的积累重构到新的开源项目中

目前源码已开始同步到 Github(文档站点在规划中,会慢慢完善起来):

MASA.BuildingBlocks

MASA.Contrib

MASA.Utils

MASA.EShop

BlazorComponent

MASA.Blazor

QQ 群:7424099

微信群:加技术运营微信(MasaStackTechOps),备注来意,邀请进群


MASA 技术团队:(鬼谷子)

发布于: 刚刚阅读数: 2
用户头像

还未添加个人签名 2021.10.26 加入

还未添加个人简介

评论

发布
暂无评论
手把手教你学Dapr - 3. 使用Dapr运行第一个.Net程序