IDE 调试 Dapr java sdk DemoService

本文详细介绍了如何使用Dapr Java SDK编译并运行示例项目,包括编译jar包、命令行启动DemoService、IDE调试InvokeClient及DemoService等步骤。深入解析了daprd进程的启动参数及其与应用的交互方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Dapr Java SDK demo 为例。

编译 jar 包

cd $JAVA_SDK_DIRECTORY
mvn package

⚠️编译过程会从外网拉去二进制文件,随时都可能需要梯子

命令行启动 DemoService

然后通过命令行启动 demoservice:

dapr run --app-id invokedemo --app-port 3000 --port 3005 -- java -jar examples/target/dapr-java-sdk-examples-exec.jar io.dapr.examples.invoke.http.DemoService -p 3000

通过 ps aux | grep daprd 可以发现 dapr run 的时候,会启动一个 daprd 后台进程,进程如下:

daprd --app-id invokedemo --dapr-http-port 3005 --dapr-grpc-port 51793 --log-level info --max-concurrency -1 --protocol http --metrics-port 51794 --app-port 3000 --placement-address localhost:50005

daprd 进程注册了 app 端口 3000,以及 dapr 的通讯端口,http=3005, grpc=51793

IDE debug InvokeClient

在 IDE 里面,调试 sdk 自带的 invokeclient,编辑配置设定环境变量 DAPR_HTTP_PORT=3005;DAPR_GRPC_PORT=51793 来指定 daprhttpgrpc 通讯端口即可:

在这里插入图片描述
还未深入了解源代码,猜测 java sdk 会有一个确定 dapr runtime 通信端口的流程,其中 DAPR_HTTP_PORT DAPR_GRPC_PORT 两个环境变量会被用到。

IDE 调试 DemoService

参考intellij-debugging-daprd

启动 daprd

首先命令行启动 daprd 预先注册 DemoServiceapp 端口:

daprd -app-id invokedemo -app-port 3000 -dapr-http-port 3005 -dapr-grpc-port 52000 -placement-address localhost:50005

IDE 运行 InvokeClient

编辑 configuration 设置 dapr runtime 的通信端口,添加环境变量:DAPR_HTTP_PORT=3005;DAPR_GRPC_PORT=52000,注意环境变量的值需要和 daprd 启动 invokedemo 指定的 -dapr-http-port-dapr-grpc-port 保持一致,否则 InvokeClient 启动时会报连接不上的错误。

命令行运行 InvokeClient

cd $JAVA_SDK_DIRECTORY
mvn package
DAPR_HTTP_PORT=3005;DAPR_GRPC_PORT=52000 java -jar examples/target/dapr-java-sdk-examples-exec.jar io.dapr.examples.invoke.http.InvokeClient 'message one' 'message two'

得到如下输出:

2020-06-01 16:41:40.437
2020-06-01 16:41:40.453
Done
Dapr 是一个分布式应用程序运行时,它提供了一组构建微服务应用程序所需的基本功能。其中之一是 Actor,它是一种用于构建高度可伸缩和高可用性的分布式应用程序的编程模型。在 Java 中,您可以使用 Dapr Java SDK 来编写 Actor 应用程序。 以下是使用 Dapr Java SDK 编写 Actor 应用程序的步骤: 1. 添加 Dapr 依赖项 在 Maven 或 Gradle 项目中,您需要添加以下依赖项: Maven: ```xml <dependency> <groupId>io.dapr</groupId> <artifactId>dapr-sdk</artifactId> <version>0.30.0</version> </dependency> ``` Gradle: ```groovy implementation 'io.dapr:dapr-sdk:0.30.0' ``` 2. 创建 Actor 接口 创建一个 Java 接口,它将作为 Actor 的契约。例如: ```java public interface MyActor { CompletableFuture<String> sayHello(String name); } ``` 3. 实现 Actor 接口 创建一个实现 Actor 接口的 Java 类。例如: ```java public class MyActorImpl implements MyActor { @Override public CompletableFuture<String> sayHello(String name) { return CompletableFuture.completedFuture("Hello, " + name + "!"); } } ``` 4. 注册 Actor 在应用程序启动时,使用 Dapr Java SDK 将 Actor 注册到 Dapr 中。例如: ```java public class MyApp { private static final String APP_ID = "myapp"; private static final String ACTOR_TYPE = "myactor"; public static void main(String[] args) throws Exception { MyActorImpl actor = new MyActorImpl(); ActorRuntime.getInstance().registerActor(actor, ActorRegistration.newBuilder() .withActorType(ACTOR_TYPE) .withActorIdProvider(new RandomActorIdProvider()) .build()); // Wait for shutdown signal ActorRuntime.getInstance().waitForShutdown(); } } ``` 在上面的代码中,我们将 `MyActorImpl` 类注册为 Actor,并指定 Actor 的类型为 `myactor`。我们还指定了一个随机的 Actor ID 提供程序,以便在创建 Actor 时为其分配唯一的 ID。 5. 调用 Actor 使用 Dapr Java SDK 调用 Actor。例如: ```java public class MyAppClient { private static final String APP_ID = "myapp"; private static final String ACTOR_TYPE = "myactor"; private static final String ACTOR_ID = "actor1"; public static void main(String[] args) throws Exception { MyActor myActor = ActorBuilder .actorFor(MyActor.class, new URI("http://localhost:3500"), ACTOR_TYPE, ACTOR_ID) .build(); String result = myActor.sayHello("World").get(); System.out.println(result); } } ``` 在上面的代码中,我们使用 `ActorBuilder` 创建一个 `MyActor` 类型的 Actor,并指定 Actor 的类型为 `myactor`,Actor ID 为 `actor1`。然后我们调用 `sayHello` 方法,并等待返回结果。 这就是使用 Dapr Java SDK 编写 Actor 应用程序的基本步骤。在实际应用中,您可能需要使用更多的 Dapr 功能来管理 Actor 的生命周期、持久性、状态等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值