环境
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