环境
OS:Microsoft Windows [版本 10.0.17763.1879]
Docker Desktop for Windows
dapr CLI version: 1.2.0
dapr Runtime version: 1.2.0
IDE: IntelliJ IDEA 2019.1.4

1、安装Docker Desktop for Windows

安装过程略,点击此处官方教程供参考

2、下载Dapr cli,初始化dapr运行时环境

初始化使用dapr init 命令,过程略,点击此处参考官方教程这篇文章

有个留意点:dapr init执行初始化后 dapr cli会从github下载2个文件包到本地~/.dapr/bin/目录
一个是dashboard,一个是daprd;同时会从dockerhub下载3个dapr组件docker镜像。daprd和dashboard文件较大,github访问的网络问题不能忽视。往往是docker镜像早已就绪,daprd和dashboard却迟迟下载不完或悄悄地下载失败了,必要情况下请科学上网

3、下载java-sdk

java-sdk中包含有examples模块,可以通过sdk调用示例熟悉dapr开发模式,测试开发环境搭建是否成功。

需要注意的是,官方的java-sdk所需运行环境是JDK8,但examples是JDK11。代码下载地址:https://github.com/dapr/java-sdk.git

4、打包测试dapr run命令

在io.dapr.examples.invoke.http目录下有3个http服务调用测试类,操作相关的说明文档见io/dapr/examples/invoke/http/README.md,我们先按照说明文档的操作操作一遍,熟悉下dapr run命令。

以下步骤通过cmd命令行操作:

  • 先在dapr-sdk-parent下maven打包整个项目,在java-sdk-master\examples\target下会生成打包文件dapr-java-sdk-examples-exec.jar 。参考命令:mvn clean install
  • cd 到java-sdk-master\examples目录下执行启动服务端命令:
dapr run --app-id invokedemo --app-port 3000 -- java -jar target/dapr-java-sdk-examples-exec.jar io.dapr.examples.invoke.http.DemoService -p 3000
  • 新开一个cmd命令窗口,再执行启动客户端命令直接调用服务端并发送信息:
dapr run --app-id invokeclient -- java -jar target/dapr-java-sdk-examples-exec.jar io.dapr.examples.invoke.http.InvokeClient "message one" "message two"

如果客户端输出以下信息,表明服务调用成功

== APP == "message one" received

== APP == "message two" received

== APP == Done

5、使用IDEA配置daprd调试代码

第4步是打包应用后通过dapr run命令启动服务调用,以下介绍通过idea编辑器调试dapr远程服务调用方法。点击此处查看官方教程

官方教程已经很详细,此处做个贴图补充说明
daprd是dapr的运行时环境,sidecar模式要求一个Java应用服务需要启动一个daprd.exe进程和一个java应用进程,所以在开发模式下我们需要挨个启动这2个进程。启动前先分别配置idea启动参数

1)daprd.exe启动配置
File->Settings->Tools->External Tools 点击+号新增一个tool配置项:

  • Name 随意填,如daprd for DemoService in examples
  • Group:默认选择External Tools
  • Program: 选择daprd.exe路径 C:\dapr\daprd.exe (从~/.dapr/bin目录下复制一个daprd.exe到C:\dapr\目录下。 .dapr为隐藏目录,其下的文件idea目录查看器看不到)
  • Arguments: 配置 -app-id invokedemo -app-port 3000,申明服务的app-id和端口,其它配置请参考 daprd --help
  • Working directory: 配置程序所在目录,如:C:\workspace\test\java-sdk-master\examples

在这里插入图片描述
配置完成后会在~\.IntelliJIdea2019.1\config\tools目录下生成External Tools.xml文件,文件内容如下

<toolSet name="External Tools">
  <tool name="daprd for DemoService in examples" showInMainMenu="false" showInEditor="false" showInProject="false" showInSearchPopup="false" disabled="false" useConsole="true" showConsoleOnStdOut="false" showConsoleOnStdErr="false" synchronizeAfterRun="true">
    <exec>
      <option name="COMMAND" value="C:\dapr\daprd.exe" />
      <option name="PARAMETERS" value="-app-id invokedemo -app-port 3000" />
      <option name="WORKING_DIRECTORY" value="C:/workspace/test/java-sdk-master/examples" />
    </exec>
  </tool>
</toolSet>

同时会在Tools->External Tools菜单下多出一个tool项daprd for DemoService in examples(如下图),点击daprd for DemoService in examples 可以启动daprd.exe进程,监控3000端口
在这里插入图片描述

2)DemoService启动配置
Run->Edit Configurations,配置main启动项,比普通的main方法启动多配置一项
Program arguments:-p 3000,启动端口指定为3000,必须和上一步中的daprd指定的监听端口一致
在这里插入图片描述
配置完成后debug模式启动DemoService服务
在这里插入图片描述
至此服务端启动完成。在io.dapr.examples.invoke.http.DemoServiceController#handleMethod方法内加断点,执行第4步中的dapr run --app-id invokeclient -- java -jar target/dapr-java-sdk-examples-exec.jar io.dapr.examples.invoke.http.InvokeClient "message one" "message two" 启动客户端服务调用服务端即可调试服务端代码。

正如官方文档所言,通过daprd启动的服务,dapr list命令和dapr dashboard是看不到的

旁门左道:

dapr run 命令只支持自托管方式使用(见:https://docs.dapr.io/zh-hans/reference/cli/dapr-run/),同一个app-id限制只能启动一个应用实例(多实例启动会报错dapr with ID invokedemo is already running)。如果我们想在本地启动2个实例可以尝试用dapr和daprd分别启动1个app-id一样但端口不一样的实例(用第4步和第5步的方式分别启动一个服务端)。用第4步的客户端服务多次调用可以发现dapr会随机访问1个后台服务,Dapr自托管方式使用 mDNS 协议提供轮询负载均衡服务1

参考文档:

https://docs.dapr.io/zh-hans/
https://docs.microsoft.com/zh-cn/virtualization/windowscontainers/manage-docker/configure-docker-daemon
https://github.com/RicardoNiepel/dapr-docs/tree/master/howto/intellij-debugging-daprd


  1. 参考此链接 ↩︎

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐