一、安装Dapr CLI脚手架
开始下载并安装 Dapr CLI,使用powershell,输入以下的语句安装:
powershell -Command "iwr -useb https://raw.githubusercontent.com/dapr/cli/master/install/install.ps1 | iex"
但是一般会报错如下,意思就是被墙了,要FQ才行:
iwr : 未能解析此远程名称: ‘raw.githubusercontent.com‘ 所在位置 行:1 字符: 1 + iwr -useb https://raw.githubusercontent.com/dapr/cli/master/install/i ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest],WebExce
ption + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand
FQ后再次执行,出现以下提示:
PS D:\> powershell -Command "iwr -useb https://raw.githubusercontent.com/dapr/cli/master/install/install.ps1 | iex" PowerShell requires an execution policy of ‘RemoteSigned‘. To make this change please run: ‘Set-ExecutionPolicy RemoteSigned -scope CurrentUser‘
按照提示我们需要执行策略更改,如下,输入Y确认即可:
PS D:\> Set-ExecutionPolicy RemoteSigned -scope CurrentUser 执行策略更改 执行策略可帮助你防止执行不信任的脚本。更改执行策略可能会产生安全风险,如 https:/go.microsoft.com/fwlink/?LinkID=135170 中的 about_Execution_Policies 帮助主题所述。是否要更改执行策略? [Y] 是(Y) [A] 全是(A) [N] 否(N) [L] 全否(L) [S] 暂停(S) [?] 帮助 (默认值为“N”): Y
再次执行安装就安装成功了,默认安装在C:\dapr目录下,我们将此目录添加至用户PATH环境变量中。
此处看到已经默认添加了,我们就不用添加了,打开新的powershell后输入dapr命令验证,成功显示如下
二、初始化Dapr
用管理员权限运行powershell,输入dapr --version命令查询dapr版本如下:
PS C:\> dapr --version CLI version: 1.2.0 Runtime version: n/a
可以看到Runtime version没有显示,说明dapr运行时没有安装,我们输入dapr init命令,显示如下提示:
PS C:\> dapr init
Making the jump to hyperspace...
could not connect to Docker. Docker may not be installed or running
说明链接不到docker,我们运行docker后再次输入dapr init命令,但是报了403权限问题无法安装,多试几次就成功了(这里打个问号?),也可以查到版本号了:
PS C:\> dapr init Making the jump to hyperspace... Downloading binaries and setting up components... cannot get the latest release version: https://api.github.com/repos/dapr/dapr/releases - 403 Forbidden PS C:\> dapr init Making the jump to hyperspace... Downloading binaries and setting up components... Downloaded binaries and completed components set up. daprd binary has been installed to C:\Users\Xu\.dapr\bin. dapr_placement container is running. dapr_redis container is running. dapr_zipkin container is running. Use `docker ps` to check running containers. Success! Dapr is up and running. To get started, go here: https://aka.ms/dapr-getting-started PS C:\> dapr --version CLI version: 1.2.0 Runtime version: 1.2.2
之后通过docker ps命令查看安装的容器,需要确保镜像为daprio/dapr、openzipkin/zipkin和redis的容器都运行
PS C:\> docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 26af89c8762c daprio/dapr "./placement" 5 minutes ago Up 5 minutes 0.0.0.0:6050->50005/tcp dapr_placement df646eb3b33a openzipkin/zipkin "start-zipkin" 5 minutes ago Up 5 minutes (healthy) 9410/tcp, 0.0.0.0:9411->9411/tcp dapr_zipkin 4a28c3982d6b redis "docker-entrypoint.s…" 7 minutes ago Up 7 minutes 0.0.0.0:6379->6379/tcp dapr_redis
在dapr inti时,CLI 还创建了一个默认组件文件夹,其中包括几个 YAML 文件,其中包含state store、elevated 和 zipkin。 Dapr sidecar, 将读取这些文件。 告诉它使用Redis容器进行状态管理和消息传递,以及Zipkin容器来收集跟踪。
可以通过运行cmd,在文件管理器中打开如下:
explorer "%USERPROFILE%\.dapr\"
将会看到Dapr 配置、 Dapr 二进制目录和 Dapr 的默认组件目录
三、使用Dapr的内置api
运行以下命令以启动 Dapr sidecar,它将在端口 3500 上监听名为 myapp 的空白应用程序
dapr run --app-id myapp --dapr-http-port 3500
因为使用此命令,没有定义自定义组件文件夹。因此Dapr 使用在 init 流中创建的默认组件定义(在 Windows中启用cmd用语句explorer "%USERPROFILE%\.dapr\"打开),告诉 Dapr 使用本地的 Redis Docker 容器作为状态存储和消息代理。
接下来我们保存一个键值对到redis docker中,如下
Invoke-RestMethod -Method Post -ContentType ‘application/json‘ -Body ‘[{ "key": "name", "value": "Bruce Wayne"}]‘ -Uri ‘http://localhost:3500/v1.0/state/statestore‘
然后我们可以获取到我们保存的键值
Invoke-RestMethod -Uri ‘http://localhost:3500/v1.0/state/statestore/name‘
我们可以在redis中看到我们保存的键值对
四、定义一个组件
像是上述的执行的dapr内置api,是启用了我们的默认组件,这里我们自己构造组件进行运行,创建一个名为my-components的文件夹,在此目录内创建一个新文件localSecretStore.yaml和一个名为mysecrets.json的密钥文件,内容分别如下:
apiVersion: dapr.io/v1alpha1 kind: Component metadata: name: my-secret-store namespace: default spec: type: secretstores.local.file version: v1 metadata: - name: secretsFile value: my-components/mysecrets.json - name: nestedSeparator value: ":"
{ "my-secret" : "I‘m Batman" }
您可以看到上述的文件定义有一个type: secretstores.local.file字段值,其告诉Dapr使用本地文件组件作为密钥存储。 元数据字段提供了使用该组件所需的组件特定信息(在本例中,是密钥存储JSON的路径)。
我们将当前目录跳转到my-components文件夹的上一个目录,运行dapr sidecar,并以我们定义的组件为启动项:
dapr run --app-id myapp --dapr-http-port 3500 --components-path ./my-components
之后我们获取密钥可以看到如下情况获取成功:
PS D:\> Invoke-RestMethod -Uri ‘http://localhost:3500/v1.0/secrets/my-secret-store/my-secret‘ my-secret --------- I‘m Batman