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.
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>
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
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() { // 扣除库存的逻辑 }
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); }
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!