axon - Axon - 如何获取 @QueryHandler 句柄方法以返回 Optional
问题描述
笔记:
这个问题的重点不仅仅是取回我最终想要的值。
我可以通过简单地不使用来做到这一点Optional
。我想要一个优雅的解决方案,这样我就可以开始返回 Optional。
我试图做的解释:
我使用了QueryGateway
一个签名来查询我的处理程序。我打破了我的代码,因此您可以在我的代码中看到CompletableFuture
我将执行阻塞获取以检索Optional
包含我真正想要的对象的内容。
请注意,我不是在寻找包含我的可选课程的课程。如果这不优雅,那么我不妨做我的空检查。
对查询的调用有效,但出现以下错误:
org.axonframework.axonserver.connector.query.AxonServerQueryDispatchException: CANCELLED: HTTP/2 error code: CANCEL
Received Rst Stream
AXONIQ-5002
58484@DESKTOP-CK6HLMM
启动查询的代码示例:
UserProfileOptionByUserQuery q = new UserProfileOptionByUserQuery(userId);
CompletableFuture<Optional<UserProfile>> query =
queryGateway.query(q,ResponseTypes.optionalInstanceOf(UserProfile.class));
Optional<UserProfile> optional = query.get();
query.get()
调用时发生错误。
我的查询处理程序示例:
@QueryHandler
Optional<UserProfile> handle(UserProfileOptionByUserQuery query, @MetaDataValue(USER_INFO) UserInfo userInfo) {
assertUserCanQuery(query, userInfo);
return userProfileRepository.findById(query.getUserId());
}
查询处理程序工作正常。其他努力(例如使用OptionalResponseType
)不会根据需要启动我的查询。
解决方案
我认为关键在于您收到斯蒂芬的例外情况。
为了我自己的利益,我在Optional
查询处理方面测试了以下排列:
- Query Handler 返回
Optional
,Query Dispatcher 使用OptionalResponeType
- Query Handler 返回
MyType
,Query Dispatcher 使用OptionalResponeType
- Query Handler 返回
Optional
,Query Dispatcher 使用InstanceResponeType
补充说,我已经用 Axon Server 和 Axon Server 尝试了这些排列SimpleQueryBus
。所有三个选项的两辆公共汽车对我来说都很好。
这向我建议您应该深入了解AxonServerQueryDispatchException
您收到的内容。因此,我将为您提供几个后续问题,以进一步推断问题所在。我建议用对他们的回复来更新你原来的问题。
您是否有机会获得更详细的堆栈跟踪?而且,您使用的是什么版本的 Axon Framework 和 Axon Server?你是标准版吗?企业版?这种行为是否只发生在Optional
您与我们共享的这个确切的查询处理程序中?
推荐阅读
- c++ - 用 C++ 理解删除
- ssl - “bq”命令行工具抛出 CERTIFICATE_VERIFY_FAILED
- function - 分配给 Kotlin 中变量的 Lambda。为什么?
- angularjs - chrome自定义选项卡未重定向回混合应用程序
- jasper-reports - 为什么 Jasper Reports 在服务器中显示空报告,但在 jasper studio 中正确生成
- powershell - 在 Powershell 终端中执行基于环境变量的路径
- php - PHP,解析特定命名空间的所有类,并列出这些类的所有方法
- hadoop - 数据节点因 org.apache.hadoop.util.DiskChecker$DiskErrorException 而失败
- javascript - AJAX 内容加载后需要重新加载多个脚本
- http - Github API:远程主机在启动入站响应之前关闭了连接