上一篇:手把手教你学Dapr - 2. 必须知道的概念

注意:

文章中提到的命令行工具即是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

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

    wsl --instal
    如果不能使用wsl直接安装的话可以手动安装,运行PowerShell并执行下面两句命令
    dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
    dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
    如果你再次遇到错误提示:0x800f080c 功能名称 VirtualMachinePlatform 未知。

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

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

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

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

    wsl --set-default-version 2
  5. 下载Ubuntu 20.04

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

  6. 设置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"
  2. 验证安装,重新打开命令行工具执行命令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代替你做的那部分工作。

  2. 验证Dapr版本

    dapr --version

    当前时间下,我的版本是

    CLI version: 1.4.0
    Runtime version: 1.4.3
  3. 验证容器

    docker ps

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

  4. 验证组件目录,打开目录%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

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

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

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

    == 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.Server
    time="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.3
    time="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.3
    time="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.3
    time="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.3
    time="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
  4. 还有一个验证方式,使用命令行工具执行命令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
  3. 验证运行是否成功

    执行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),备注来意,邀请进群

手把手教你学Dapr - 3. 使用Dapr运行第一个.Net程序的更多相关文章

  1. 跟哥一起学python(2)- 运行第一个python程序&环境搭建

    本节的任务,是完成我们的第一个python程序,并搭建好学习python的环境.  建议通过视频来学习本节内容: 查看本节视频 再次看看上一节提到的那张图,看看作为高级编程语言,我们如何编程. 首先, ...

  2. 《手把手教你学C语言》学习笔记(10)--- 程序的循环控制

    C语言程序设计中,有些代码需要重复执行很多次,循环主要有三类: 一.for循环 1.基本格式为:for(表达式1:表达式2:表达式3){ //表达式1:循环变量赋初值 //表达式2:循环变量满足的条件 ...

  3. 《手把手教你学C语言》学习笔记(9)--- 程序的选择控制

    C语言是面向过程编程语言的主要代表,其特征就是严格控制程序的执行语句顺序,因此,C程序的主要结构控制就是顺序控制,以main函数为入口函数,根据控制,一条一条地执行语句.由于实际需求是很复杂的,只用顺 ...

  4. 《手把手教你学C语言》学习笔记(7)---程序的输入与输出

    程序设计中,为了观察程序的运行状态和结构,需要输出指定的内容:为了让程序能够更加灵活,可以根据需求输入内容,让计算机处理和运行:所以程序的输入输出就显的尤为重要.主要包括printf和scanf函数. ...

  5. 手把手教你学Dapr - 4. 服务调用

    上一篇:手把手教你学Dapr - 3. 使用Dapr运行第一个.Net程序 介绍 通过使用服务调用,您的应用程序可以使用标准的gRPC或HTTP协议与其他应用程序可靠.安全地通信. 为什么不直接用Ht ...

  6. 手把手教你学Dapr - 5. 状态管理

    上一篇:手把手教你学Dapr - 4. 服务调用 介绍 使用状态管理,您的应用程序可以将数据作为键/值对存储在支持的状态存储中. 您的应用程序可以使用 Dapr 的状态管理 API 使用状态存储组件来 ...

  7. 手把手教你学Dapr - 6. 发布订阅

    上一篇:手把手教你学Dapr - 5. 状态管理 介绍 发布/订阅模式允许微服务使用消息相互通信.生产者或发布者在不知道哪个应用程序将接收它们的情况下向主题发送消息.这涉及将它们写入输入通道.同样,消 ...

  8. 手把手教你学Dapr - 7. Actors

    上一篇:手把手教你学Dapr - 6. 发布订阅 介绍 Actor模式将Actor描述为最低级别的"计算单元".换句话说,您在一个独立的单元(称为actor)中编写代码,该单元接收 ...

  9. 手把手教你学Dapr - 8. 绑定

    目录 手把手教你学Dapr - 1. .Net开发者的大时代 手把手教你学Dapr - 2. 必须知道的概念 手把手教你学Dapr - 3. 使用Dapr运行第一个.Net程序 手把手教你学Dapr ...

随机推荐

  1. [Apache Atlas] Atlas 架构设计及源代码简单分析

    Apache Atlas 架构图 Atlas 支持多数据源接入:Hive.HBase.Storm等 Type System Type Atlas 中定义了一些元数据类型 ── AtlasBaseTyp ...

  2. springboot pom.xml

    Demo project for Spring Boot <?xml version="1.0" encoding="UTF-8"?> <pr ...

  3. 『Python』matplotlib的imshow用法

    热力图是一种数据的图形化表示,具体而言,就是将二维数组中的元素用颜色表示.热力图之所以非常有用,是因为它能够从整体视角上展示数据,更确切的说是数值型数据. 使用imshow()函数可以非常容易地制作热 ...

  4. [转载]SELinux 环境下网络服务设置,配置 Apache 、Samba、NFS

    原文地址:http://www.ibm.com/developerworks/cn/linux/l-cn-selinux-services1/index.html?ca=drs- 引言 SELinux ...

  5. 完美解决JavaIO流报错 java.io.FileNotFoundException: F:\ (系统找不到指定的路径。)

    完美解决JavaIO流报错 java.io.FileNotFoundException: F:\ (系统找不到指定的路径.) 错误原因 读出文件的路径需要有被拷贝的文件名,否则无法解析地址 源代码(用 ...

  6. openEuler 20.03/21.03 - 华为欧拉开源版(CentOS 8 华为版开源版)下载

    开始 openEuler 之旅吧 openEuler 通过社区合作,打造创新平台,构建支持多处理架构.统一和开放的操作系统,推动软硬件应用生态繁荣发展. 好玩的活动停不下来 openEuler 社区不 ...

  7. Docker里面没有你期望的命令、甚至没有yum怎么办?

    分享小知识点 跟大家分享一个实用的小知识点 有时候在docker容器里面不仅没有你期望的那些常用的命令,甚至没有yum命令让你去安装那些常用的命令 怎么办呢?不要慌! 没有yum命令说明这个容器的系统 ...

  8. P4544 [USACO10NOV]Buying Feed G

    part 1 暴力 不难发现有一个 $\mathcal O(K^2n)$ 的基础 dp: $$f_{i,j+l}=\min(f_{i,j+l},f_{i-1,j}+(x_i-x_{i-1})\time ...

  9. .NET 开发一个服务器 应用管理工具

    一:背景 1.Anno.Deploy Anno.Deploy可以和 Anno集成使用,用于部署新的服务.启动服务.停止服务.清理服务.也可以单独使用,用于守护程序. 使用方法 1.和Anno集成使用 ...

  10. Knativa 基于流量的灰度发布和自动弹性实践

    作者 | 李鹏(元毅) 来源 | Serverless 公众号 一.Knative Knative 提供了基于流量的自动扩缩容能力,可以根据应用的请求量,在高峰时自动扩容实例数:当请求量减少以后,自动 ...