Spring Boot集成Cadence Worker:多Workflow注册后仅单个可用求助
解决方案与排查步骤
核心问题:注册的是Workflow接口而非实现类
Cadence的Worker.registerWorkflowImplementationTypes()方法要求传入Workflow实现类的Class对象,而非接口。如果你的WorkflowA、WorkflowB是接口类型,当前代码的注册方式完全错误,只有WorkflowC是实现类时才会正常工作。
修正代码,将注册语句改为传入实现类:
// 假设你的实现类是WorkflowAImpl、WorkflowBImpl、WorkflowCImpl worker.registerWorkflowImplementationTypes(WorkflowAImpl.class); worker.registerWorkflowImplementationTypes(WorkflowBImpl.class); worker.registerWorkflowImplementationTypes(WorkflowCImpl.class);
其他排查方向(如果上述修正后仍有问题)
- 检查Workflow接口注解:确保每个Workflow接口的主方法上标注了
@WorkflowMethod,且一个接口只能有一个主Workflow方法(其他方法可使用@SignalMethod/@QueryMethod)。 - 类加载与Spring管理:
- 确保Workflow实现类被Spring扫描到(添加
@Component注解,或处于@ComponentScan的扫描范围内)。 - 实现类必须包含无参构造函数(Cadence需通过反射实例化,Spring管理的类默认有无参构造,除非自定义了带参构造且未显式声明无参构造)。
- 确保Workflow实现类被Spring扫描到(添加
- Task List匹配:调用WorkflowA/B时,确认客户端指定的Task List与Worker注册的
TASK_LIST完全一致(大小写敏感)。示例调用代码需保证:WorkflowOptions options = WorkflowOptions.newBuilder() .setTaskList(TASK_LIST) // 必须和Worker的TASK_LIST参数一致 .build(); - Workflow类型名称一致性:如果调用时通过
@WorkflowMethod(name="xxx")自定义了Workflow类型名,需确保注册的实现类对应的接口上的名称与调用时使用的名称完全一致。
内容的提问来源于stack exchange,提问作者Chris Qin
相关产品推荐
相关产品推荐

