Как присоединиться к транзакции БД restClient, kafka в режиме транзакции?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как присоединиться к транзакции БД restClient, kafka в режиме транзакции?

Сообщение Anonymous »

как
  • сохранить в БД (транзакционным способом)
  • подключение restClient
  • отправить сообщение kafka об этом в случае успеха, и наоборот?

Код: Выделить всё

@Slf4j
public class SyncServiceImpl implements SyncService {

@Autowired
private SellerRestClient restClient;
@Autowired
private ShopRepository shopRepository;
@Autowired
private ProductRepository productRepository;
@Autowired
private KafkaTemplate kafkaTemplate;

@Override
public void syncShops() {
for (Shop shop : shopRepository.findAll()) {
try {
syncShop(shop);
} catch (Exception e) {
e.printStackTrace();
}
}
}

@Transactional
@Override
public void syncShop(Shop shop) {
log.info("Syncing shop");
shopRepository.lockShop(shop.getId()); // @Query(native = true, value = "SELECT * FROM shop WHERE id = ? FOR UPDATE")

var products = shop.getProducts();
products.parallelStream()
.forEach(product -> {
log.info("Syncing product");
var seller = product.getSeller();
var sellerDetails = restClient.getLegalDetails(seller.getInn());

var dto = new ProductDto();
dto.setProduct(product);
dto.setSellerDetails(sellerDetails);

kafkaTemplate.send("product_details", "product", dto); // topic, key, value

product.setSynced(true);
productRepository.save(product);
});
shop.setSynced(true);
}
}
нужен restClient, сообщения Kafka не отправляются в случае сбоя сохранения БД

Подробнее здесь: https://stackoverflow.com/questions/798 ... ion-manner
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»