环境
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
安装过程略,点击此处官方教程供参考:https://docs.microsoft.com/zh-cn/virtualization/windowscontainers/manage-docker/configure-docker-daemon
2、下载Dapr cli,初始化dapr运行时环境
初始化使用dapr init 命令,过程略,点击此处参考官方教程 :https://docs.dapr.io/zh-hans/getting-started/install-dapr-cli/ 或 这篇文章:https://blog.csdn.net/ChaITSimpleLove/article/details/114379578
有个留意点: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
1
新开一个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”
1
如果客户端输出以下信息,表明服务调用成功
== 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文件,文件内容如下
<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>
同时会在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://github.com/RicardoNiepel/dapr-docs/tree/master/howto/intellij-debugging-daprd