Amalan Terbaik Seni Bina Perkhidmatan Mikro dalam Pembangunan Java
Dengan perkembangan pesat Internet, seni bina aplikasi monolitik tradisional tidak lagi dapat memenuhi keperluan untuk ketersediaan tinggi, berskala dan lelaran pantas. Sebagai penyelesaian, seni bina perkhidmatan mikro secara beransur-ansur menjadi popular dalam bidang pembangunan perisian. Artikel ini akan memperkenalkan amalan terbaik seni bina perkhidmatan mikro dalam pembangunan Java dan menyediakan contoh kod khusus.
1. Pisahkan domain dan perkhidmatan
Apabila mereka bentuk seni bina perkhidmatan mikro, anda perlu membahagikan sistem kepada domain terlebih dahulu. Bahagikan sistem kepada berbilang perkhidmatan mengikut kawasan perniagaan, dan setiap perkhidmatan bertanggungjawab untuk fungsi perniagaan bebas. Melalui pemisahan, kerumitan sistem dapat dikurangkan, kecekapan pembangunan dan kebolehselenggaraan sistem dapat dipertingkatkan. Contohnya, bahagikan sistem e-dagang kepada perkhidmatan pengguna, perkhidmatan produk, perkhidmatan pesanan, dsb.
Mengambil perkhidmatan pesanan sebagai contoh, kita boleh menggunakan Spring Boot dan Spring Cloud untuk membina perkhidmatan pesanan yang mudah. Mula-mula, cipta projek Spring Boot dan perkenalkan kebergantungan yang berkaitan:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>
Kemudian, buat kelas entiti pesanan dan lapisan akses data:
@Entity @Table(name = "orders") public class Order { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String orderNumber; // ...其他属性和方法 } @Repository public interface OrderRepository extends JpaRepository<Order, Long> { // ...其他方法 }
Seterusnya, buat pengawal dan logik perniagaan perkhidmatan pesanan:
@RestController @RequestMapping("/orders") public class OrderController { private final OrderRepository orderRepository; public OrderController(OrderRepository orderRepository) { this.orderRepository = orderRepository; } @PostMapping public Order createOrder(@RequestBody Order order) { return orderRepository.save(order); } @GetMapping("/{id}") public Order getOrder(@PathVariable Long id) { return orderRepository.findById(id) .orElseThrow(() -> new RuntimeException("Order not found")); } }
Akhir sekali, konfigurasikan Perkhidmatan pendaftaran dan penemuan:
spring: application: name: order-service cloud: discovery: register-with-eureka: true fetch-registry: true service-url: defaultZone: http://localhost:8761/eureka server: port: 8081
Melalui langkah di atas, kami telah menyelesaikan pembinaan perkhidmatan pesanan ringkas. Anda boleh membuat pesanan dengan menghantar permintaan POST dan mendapatkan maklumat pesanan dengan menghantar permintaan GET.
2. Komunikasi antara perkhidmatan
Dalam seni bina perkhidmatan mikro, komunikasi antara perkhidmatan adalah sangat penting. Amalan biasa ialah menggunakan API RESTful atau baris gilir mesej untuk komunikasi. Berikut mengambil komunikasi menggunakan RESTful API sebagai contoh.
Kami membahagikan perkhidmatan pesanan di atas kepada perkhidmatan pengguna, perkhidmatan produk dan perkhidmatan pesanan, dan mereka menggunakan API RESTful untuk berkomunikasi antara satu sama lain. Perkhidmatan pesanan perlu menghubungi perkhidmatan pengguna dan perkhidmatan produk untuk mendapatkan maklumat pengguna dan produk. Pertama, kita perlu memperkenalkan pelanggan perkhidmatan pengguna dan perkhidmatan produk ke dalam perkhidmatan pesanan.
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>
Kemudian, cipta antara muka pelanggan perkhidmatan pengguna dan perkhidmatan produk:
@FeignClient(name = "user-service") public interface UserClient { @GetMapping("/users/{id}") User getUser(@PathVariable Long id); } @FeignClient(name = "product-service") public interface ProductClient { @GetMapping("/products/{id}") Product getProduct(@PathVariable Long id); }
Akhir sekali, masukkan pelanggan perkhidmatan pengguna dan perkhidmatan produk dalam perkhidmatan pesanan, dan gunakan kaedah yang mereka sediakan untuk memanggil perkhidmatan pengguna dan produk perkhidmatan:
@RestController @RequestMapping("/orders") public class OrderController { private final OrderRepository orderRepository; private final UserClient userClient; private final ProductClient productClient; public OrderController(OrderRepository orderRepository, UserClient userClient, ProductClient productClient) { this.orderRepository = orderRepository; this.userClient = userClient; this.productClient = productClient; } @PostMapping public Order createOrder(@RequestBody Order order) { User user = userClient.getUser(order.getUserId()); Product product = productClient.getProduct(order.getProductId()); // ...处理订单逻辑 return orderRepository.save(order); } // ...其他方法 }
Melalui konfigurasi di atas, kami boleh menghubungi perkhidmatan pengguna dan perkhidmatan produk dalam perkhidmatan pesanan untuk mencapai komunikasi antara perkhidmatan.
Ringkasan
Amalan terbaik seni bina perkhidmatan mikro dalam pembangunan Java memerlukan pemisahan domain dan pemisahan perkhidmatan, dan menggunakan kaedah komunikasi yang sesuai untuk mencapai komunikasi tak segerak antara perkhidmatan. Artikel ini menggunakan pembangunan Java sebagai contoh untuk memperkenalkan amalan terbaik seni bina perkhidmatan mikro dan menyediakan contoh kod khusus. Sudah tentu, perkara di atas hanyalah contoh mudah Dalam projek sebenar, isu seperti pendaftaran dan penemuan perkhidmatan, pengimbangan beban, toleransi kesalahan, dll. juga perlu dipertimbangkan. Saya harap artikel ini dapat memberikan sedikit rujukan untuk semua orang menggunakan seni bina perkhidmatan mikro dalam pembangunan Java.
Atas ialah kandungan terperinci Amalan terbaik untuk seni bina perkhidmatan mikro dalam pembangunan Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!