Rumah  >  Artikel  >  Java  >  Penyelesaian transaksi diedarkan seni bina perkhidmatan mikro rangka kerja Java

Penyelesaian transaksi diedarkan seni bina perkhidmatan mikro rangka kerja Java

王林
王林asal
2024-06-04 15:04:02582semak imbas

Penyelesaian transaksi yang diedarkan dalam rangka kerja Java termasuk: Mekanisme pampasan: lakukan operasi bertentangan selepas kegagalan transaksi, sesuai untuk transaksi mudah. Corak Saga: Pecahkan urus niaga kepada langkah bebas, setiap langkah dilaksanakan secara bebas dan digulung semula sekiranya berlaku kegagalan. Komit Dua Fasa (2PC): Menyelaraskan berbilang peserta (seperti pangkalan data) untuk sama ada melakukan atau melancarkan transaksi.

Penyelesaian transaksi diedarkan seni bina perkhidmatan mikro rangka kerja Java

Penyelesaian transaksi teragih dalam rangka kerja Java seni bina mikroperkhidmatan

Transaksi teragih ialah salah satu isu penting yang perlu diselesaikan dalam seni bina perkhidmatan mikro. Melengkapkan transaksi ACID merentas pelbagai perkhidmatan mikro adalah penting untuk memastikan integriti dan konsistensi data. Artikel ini akan membincangkan pelbagai pendekatan untuk penyelesaian transaksi teragih dalam rangka kerja Java dan menyediakan kes praktikal untuk menunjukkan pelaksanaan penyelesaian ini.

Kaedah 1: Mekanisme Pampasan

Mekanisme pampasan melibatkan melakukan tindakan sebaliknya selepas transaksi gagal. Pendekatan ini mudah dan mudah dilaksanakan, tetapi mungkin tidak sesuai untuk transaksi bersarang atau pemprosesan tak segerak.

@Transactional
public void transfer(Account fromAccount, Account toAccount, BigDecimal amount) {
    fromAccount.withdraw(amount);
    toAccount.deposit(amount);
}

@Transactional
public void compensateTransfer(Account fromAccount, Account toAccount, BigDecimal amount) {
    toAccount.withdraw(amount);
    fromAccount.deposit(amount);
}

Kaedah 2: Corak Saga

Corak Saga memecahkan transaksi kepada satu siri langkah bebas atau "sub-transaksi". Setiap langkah dilaksanakan dalam urus niaga yang berasingan dan boleh ditarik balik sekiranya berlaku kegagalan.

public class TransferSaga {

    private TransferStep transferStep;
    private CompensateTransferStep compensateTransferStep;

    public TransferSaga(TransferStep transferStep, CompensateTransferStep compensateTransferStep) {
        this.transferStep = transferStep;
        this.compensateTransferStep = compensateTransferStep;
    }

    public void execute(Account fromAccount, Account toAccount, BigDecimal amount) {
        transferStep.execute(fromAccount, toAccount, amount);
        compensateTransferStep.compensate(fromAccount, toAccount, amount);
    }
}

Kaedah 3: Komit Dua Fasa (2PC)

2PC ialah protokol transaksi teragih yang menyelaraskan berbilang peserta (seperti pangkalan data) yang terlibat dalam transaksi. Protokol ini memastikan bahawa semua peserta sama ada melakukan transaksi atau melancarkannya semula.

Kes praktikal

Pertimbangkan sistem dengan dua perkhidmatan mikro: order-servicepayment-service。当客户下订单时,order-service 创建订单并向 payment-service Hantar permintaan pembayaran.

Penyelesaian menggunakan mekanisme pampasan adalah seperti berikut:

@Transactional
public void createOrder(Order order) {
    orderRepository.save(order);
    paymentService.requestPayment(order.getId(), order.getAmount());
}

@Transactional
public void compensateCreateOrder(Order order) {
    orderRepository.delete(order);
}
@Transactional
public void requestPayment(Long orderId, BigDecimal amount) {
    Payment payment = new Payment();
    payment.setOrderId(orderId);
    payment.setAmount(amount);
    paymentRepository.save(payment);
}

@Transactional
public void compensateRequestPayment(Payment payment) {
    paymentRepository.delete(payment);
}

Atas ialah kandungan terperinci Penyelesaian transaksi diedarkan seni bina perkhidmatan mikro rangka kerja Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn