微服务Dapr:window环境下的快速入门

x33g5p2x  于2021-11-21 转载在 其他  
字(4.3k)|赞(0)|评价(0)|浏览(283)

一、安装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.0Runtime 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 - 403Forbidden
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.0Runtime 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: defaultspec:
  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

相关文章