Maison >Java >javaDidacticiel >Meilleures pratiques pour l'architecture des microservices dans le développement Java

Meilleures pratiques pour l'architecture des microservices dans le développement Java

WBOY
WBOYoriginal
2023-09-18 08:55:531037parcourir

Meilleures pratiques pour larchitecture des microservices dans le développement Java

Meilleures pratiques de l'architecture de microservices dans le développement Java

Avec le développement rapide d'Internet, l'architecture d'application monolithique traditionnelle ne peut plus répondre aux besoins de haute disponibilité, d'évolutivité et d'itération rapide. En tant que solution, l'architecture de microservices devient progressivement populaire dans le domaine du développement de logiciels. Cet article présentera les meilleures pratiques de l'architecture des microservices dans le développement Java et fournira des exemples de code spécifiques.

1. Diviser les domaines et les services

Lors de la conception d'une architecture de microservices, vous devez d'abord diviser le système en domaines. Divisez le système en plusieurs services selon les domaines d'activité, et chaque service est responsable d'une fonction commerciale indépendante. Grâce au fractionnement, la complexité du système peut être réduite, l'efficacité du développement et la maintenabilité du système peuvent être améliorées. Par exemple, divisez le système de commerce électronique en services utilisateurs, services produits, services de commande, etc.

En prenant le service de commande comme exemple, nous pouvons utiliser Spring Boot et Spring Cloud pour créer un service de commande simple. Tout d'abord, créez un projet Spring Boot et introduisez les dépendances associées :

<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>

Ensuite, créez la classe d'entité de commande et la couche d'accès aux données :

@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> {
    // ...其他方法
}

Ensuite, créez le contrôleur et la logique métier du service de commande :

@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"));
    }
}

Enfin, configurez le service. inscription et découverte :

spring:
  application:
    name: order-service
  cloud:
    discovery:
      register-with-eureka: true
      fetch-registry: true
      service-url:
        defaultZone: http://localhost:8761/eureka

server:
  port: 8081

Grâce aux étapes ci-dessus, nous avons achevé la construction d'un service de commande simple. Vous pouvez créer une commande en envoyant une requête POST et obtenir des informations sur la commande en envoyant une requête GET.

2. Communication entre services

Dans l'architecture des microservices, la communication entre les services est très importante. Une pratique courante consiste à utiliser une API RESTful ou une file d'attente de messages pour la communication. Ce qui suit prend comme exemple la communication utilisant l'API RESTful.

Nous divisons le service de commande ci-dessus en service utilisateur, service produit et service de commande, et ils utilisent l'API RESTful pour communiquer entre eux. Le service de commande doit appeler le service utilisateur et le service produit pour obtenir des informations sur l'utilisateur et le produit. Tout d'abord, nous devons introduire le client du service utilisateur et le service produit dans le service de commande.

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

Ensuite, créez l'interface client du service utilisateur et du service produit :

@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);
}

Enfin, injectez le client du service utilisateur et du service produit dans le service de commande, et utilisez les méthodes fournies pour appeler le service utilisateur et le service produit :

@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);
    }

    // ...其他方法
}

Grâce à la configuration ci-dessus, nous pouvons appeler le service utilisateur et le service produit dans le service de commande pour établir la communication entre les services.

Résumé

Les meilleures pratiques de l'architecture des microservices dans le développement Java nécessitent le fractionnement des domaines et des services, ainsi que l'utilisation de méthodes de communication appropriées pour obtenir une communication asynchrone entre les services. Cet article utilise le développement Java comme exemple pour présenter les meilleures pratiques de l'architecture des microservices et fournir des exemples de code spécifiques. Bien entendu, ce qui précède n'est qu'un exemple simple. Dans les projets réels, des problèmes tels que l'enregistrement et la découverte des services, l'équilibrage de charge, la tolérance aux pannes, etc. J'espère que cet article pourra fournir une référence permettant à chacun d'appliquer l'architecture de microservices au développement Java.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn