-
Choerodon平台版本:0.8.0
-
运行环境(如localhost或k8s):localhost
-
遇到问题时的前置条件:
-
问题描述:
参考猪齿鱼最新的分布式事务一致性解决方案(Saga)
http://choerodon.io/zh/docs/development-guide/backend/framework/saga/(如何使用Saga)
http://choerodon.io/zh/blog/event-consistent/(Saga简介)
在合同系统进行了相关程序的集成以及参考demo程序逻辑编写,
在github上所获取到的saga相关的阿斯加德服务 版本为0.8.0.RELEASE
合同系统相关的服务均按照文档所说对 猪齿鱼开发包版本升级至0.6.0RELEASE <choerodon.starters.version>0.6.0.RELEASE</choerodon.starters.version>
并在消费端开启saga相关配置
- 报错信息(请尽量使用代码块的形式展现):
在使用debug追踪后,发现在使用feign调用阿斯加德服务时,程序在如下位置报错,
@Override
public ResponseEntity<SagaInstanceDTO> start(final StartInstanceDTO dto) {
final String code = dto.getSagaCode();
if (!sagaMapper.existByCode(code)) {
throw new FeignException(“error.saga.notExist”);
}
SagaTask sagaTask = new SagaTask();
sagaTask.setIsEnabled(true);
sagaTask.setSagaCode(code);
List<SagaTask> sagaTasks = taskMapper.select(sagaTask);
if (sagaTasks.isEmpty()) {
Date date = new Date();
SagaInstance instanceDO = new SagaInstance(code, dto.getRefType(), dto.getRefId(),
SagaDefinition.InstanceStatus.NON_CONSUMER.name(), date, date);
if (instanceMapper.insertSelective(instanceDO) != 1) {
throw new FeignException(DB_ERROR);
}
return new ResponseEntity<>(modelMapper.map(
instanceMapper.selectByPrimaryKey(instanceDO.getId()), SagaInstanceDTO.class), HttpStatus.OK);
}
return new ResponseEntity<>(startInstanceAndTask(dto, sagaTasks), HttpStatus.OK);
}public ResponseEntity<SagaInstanceDTO> start(final StartInstanceDTO dto) {
final String code = dto.getSagaCode();
if (!sagaMapper.existByCode(code)) {
throw new FeignException(“error.saga.notExist”);
}
-
原因分析:
查询到相关的表为如下表 asgard_orch_saga
-
疑问:
问题:请问saga如何在这张表(asgard_orch_saga)中维护数据,是需要手动维护还是在其他地方?在博客中提及的猪齿鱼事务定义界面如何访问?