Rumah  >  Artikel  >  Java  >  Cara menggunakan Java untuk membangunkan aplikasi transaksi yang diedarkan berdasarkan Spring Cloud Alibaba

Cara menggunakan Java untuk membangunkan aplikasi transaksi yang diedarkan berdasarkan Spring Cloud Alibaba

PHPz
PHPzasal
2023-09-21 13:13:41513semak imbas

如何使用Java开发一个基于Spring Cloud Alibaba的分布式事务应用

Cara menggunakan Java untuk membangunkan aplikasi transaksi teragih berdasarkan Spring Cloud Alibaba

Abstrak:

Transaksi teragih ialah mekanisme untuk memproses berbilang sub-urus niaga dalam sistem teragih, memastikan sub-urus niaga ini sama ada semuanya berjaya, Atau gulungkan semuanya kembali. Dalam seni bina perkhidmatan mikro, transaksi yang diedarkan menjadi masalah yang mencabar disebabkan oleh panggilan bersama antara perkhidmatan. Spring Cloud Alibaba ialah rangka kerja pembangunan perkhidmatan mikro berdasarkan Spring Cloud, yang menyediakan set komprehensif penyelesaian transaksi teragih. Artikel ini akan memperkenalkan cara menggunakan Java untuk membangunkan aplikasi transaksi teragih berdasarkan Spring Cloud Alibaba dan menyediakan contoh kod khusus.

  1. Memperkenalkan tanggungan

Sebelum menggunakan Spring Cloud Alibaba untuk pembangunan transaksi teragih, kami perlu memperkenalkan tanggungan yang sepadan terlebih dahulu. Tambahkan kebergantungan berikut pada fail pom.xml projek:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-seata</artifactId>
</dependency>
  1. Mengkonfigurasi Seata

Seata ialah penyelesaian transaksi teragih dalam Spring Cloud Alibaba. Kami perlu mengkonfigurasi maklumat berkaitan Seata dalam fail konfigurasi aplikasi. Tambahkan konfigurasi berikut pada fail application.properties atau application.yml:

# 启用Seata的自动代理
spring.cloud.alibaba.seata.tx-service-group=my_tx_group
# Seata的注册中心地址
spring.cloud.alibaba.seata.registry.type=consul
spring.cloud.alibaba.seata.registry.address=127.0.0.1:8500
  1. Melaksanakan transaksi teragih

Seterusnya, kami mula melaksanakan contoh transaksi teragih yang mudah. Katakan kami mempunyai dua perkhidmatan mikro: perkhidmatan pesanan dan perkhidmatan inventori. Apabila pesanan dibuat, kita perlu menolak inventori yang sepadan pada masa yang sama. Untuk melaksanakan transaksi yang diedarkan, kami perlu menggunakan anotasi @GlobalTransactional yang disediakan oleh Seata. Tambahkan anotasi berikut pada kaedah cipta pesanan perkhidmatan pesanan:

@GlobalTransactional
public void createOrder() {
    // 扣除库存的逻辑
    deductStock();
}

Tambahkan juga anotasi @GlobalTransactional pada kaedah tolak inventori perkhidmatan inventori:

@GlobalTransactional
public void deductStock() {
    // 扣除库存的逻辑
}
  1. Laksanakan transaksi tempatan

Dalam contoh di atas, kami menggunakan Seata untuk mengurus urus niaga Teragih. Tetapi pada hakikatnya, kita masih perlu melaksanakan logik transaksi tempatan dalam setiap perkhidmatan mikro. Memandangkan Seata menyokong berbilang mod transaksi teragih, kami boleh memilih mod yang sesuai untuk melaksanakan transaksi setempat.

Perkhidmatan pesanan dan perkhidmatan inventori dalam contoh boleh menggunakan JdbcTemplate atau MyBatis untuk mengendalikan pangkalan data. Kami mentakrifkan kaedah transaksi tempatan dalam setiap perkhidmatan dan menandakannya dengan anotasi @LocalTransactional:

@LocalTransactional
public void createOrderTx() {
    jdbcTemplate.update("INSERT INTO orders (order_id, user_id, amount) VALUES (?, ?, ?)", orderId, userId, amount);
}

@LocalTransactional
public void deductStockTx() {
    jdbcTemplate.update("UPDATE stock SET amount = amount - ? WHERE id = ?", amount, stockId);
}
  1. Menguji transaksi yang diedarkan

Kini kami boleh menguji aplikasi transaksi yang diedarkan kami. Dalam kod ujian, kami membuat pesanan dan kemudian menegaskan sama ada status pesanan dan inventori adalah seperti yang dijangkakan:

@Test
public void testCreateOrder() {
    // 创建订单
    orderService.createOrder();

    // 断言订单状态
    Order order = jdbcTemplate.queryForObject("SELECT * FROM orders WHERE order_id = ?", new OrderRowMapper(), orderId);
    assertNotNull(order);
    assertEquals(userId, order.getUserId());
    assertEquals(amount, order.getAmount());

    // 断言库存状态
    Stock stock = jdbcTemplate.queryForObject("SELECT * FROM stock WHERE id = ?", new StockRowMapper(), stockId);
    assertNotNull(stock);
    assertEquals(originalAmount - amount, stock.getAmount());
}

Ringkasan:

Artikel ini memperkenalkan cara menggunakan Spring Cloud Alibaba untuk membangunkan aplikasi berdasarkan transaksi yang diedarkan. Dengan memperkenalkan kebergantungan Seata dan menambahkan anotasi @GlobalTransactional atau @LocalTransactional pada kaedah utama setiap perkhidmatan mikro, kami boleh membina aplikasi transaksi teragih yang boleh dipercayai berdasarkan Spring Cloud Alibaba. Dalam projek sebenar, anda juga mungkin perlu mengendalikan senario transaksi teragih yang lebih kompleks, seperti kunci teragih, baris gilir mesej, dsb. Saya harap artikel ini telah memberikan sedikit bantuan untuk anda memahami dan menggunakan transaksi yang diedarkan.

Atas ialah kandungan terperinci Cara menggunakan Java untuk membangunkan aplikasi transaksi yang diedarkan berdasarkan Spring Cloud Alibaba. 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