【问题标题】:Data Coherence for completing camunda user task and updating external DB用于完成 camunda 用户任务和更新外部数据库的数据一致性
【发布时间】:2020-01-14 08:24:31
【问题描述】:

我们在我们的应用程序中使用 camunda 作为 REST 服务。 为了在我们的应用程序中完成用户任务,我们必须执行 2 个操作:
1. 将数据写入本地数据库
2.通过camunda rest API完成任务

但是这个操作不是事务性的。这对我们来说是个问题。

此代码代码不是事务性的:

completeUserTask(String taskId, SpecificTaskData userData) {
     dao.update(userData)
     camundaRestApi.completeUserTask(taskId)
}

我看到两个可用的解决方案。两者都将 camunda 用户任务拆分为 2 个节点:

但我不喜欢为每个用户任务创建服务任务或消息接收器的想法。
我认为它使图表不清楚(更不合理)。
你怎么看这个问题?谢谢。

【问题讨论】:

    标签: rest transactions microservices camunda


    【解决方案1】:

    我的建议可能为时已晚 :-)

    我们还遇到了如何将两个操作(写入业务数据和完成任务/发送消息)放在同一个事务中的问题。

    我们的解决方案是这样组织方法:

    @Transactional
    void correlate(String message, String businessKey, DataObject dataObject) {
            dataRepository.update(dataObject);
            runtimeService.correlateMessage(messageCode, businessKey);        
    }
    

    当然,您可以使用任何其他触发器来继续流程(完成/提交用户任务)。

    另一种方法是创建执行侦听器,它可以从流程上下文中获取数据并将其放入您需要的任何位置(DAO、服务、事件总线等)。此外,通过 Java Config,您可以默认为任何类型的活动添加此类侦听器(无需在 Modeler 中指定):

        public class AddSendEventListenerToBpmnParseListener implements BpmnParseListener {
        
          @Override   public void parseProcess(Element processElement, ProcessDefinitionEntity processDefinition) {
            processDefinition.addBuiltInListener(PvmEvent.EVENTNAME_START, new SendEventListener());
            processDefinition.addBuiltInListener(PvmEvent.EVENTNAME_END, new SendEventListener());   }
        
          @Override   public void parseIntermediateThrowEvent(Element intermediateEventElement, ScopeImpl scope, ActivityImpl activity) {
            activity.addBuiltInListener(PvmEvent.EVENTNAME_START, new SendEventListener());   }
        
          @Override   public void parseStartEvent(Element startEventElement, ScopeImpl scope, ActivityImpl startEventActivity) {   }
        
        // other methods omitted 
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-30
      • 1970-01-01
      • 2016-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-21
      相关资源
      最近更新 更多