Spring AMQP RP C - поделиться одной транзакцией - PullRequest
0 голосов
/ 21 февраля 2020

Я использую Spring AMQP для предоставления службы RP C, поэтому синхронные вызовы могут быть сделаны из других микросервисов - однако я сталкиваюсь с проблемой совместного использования одной транзакции во всей операции. Рассмотрим настройку ниже:

1) RP C вызов

@Transactional
Item rpcSendAndReceive(Long oldId) {
    var oldItem = itemRepository.findById(oldId);        
    var newItem = itemService.clone(oldItem);
    rpcService.populate(new Payload(newItem.getId())); // a blocking call - see 2)
    return newItem;
}

2) rpcService.populate() реализация

void populate(Payload payload) {
    var item = itemRepository.findById(payload.getId()); // null
    populationService.fill(item);
}

Дело в том, что во время RP C выполнение метода, транзакция еще не зафиксирована (и не должна быть, так как rpcService.populate имеет решающее значение для бизнес-логики c и должна вызвать откат в случае неудачи), следовательно, itemRepository.findById(payload.getId()) вернет null. Чего я хотел бы добиться, так это поделиться сделкой, начатой ​​у производителя (1), чтобы товар можно было найти у потребителя (2). Есть ли способ сделать это возможным, или я пытаюсь сделать что-то практически невозможное с AMQP здесь?

...