Maison  >  Article  >  Java  >  Pratique de développement de capacités de microservices basée sur Spring Cloud

Pratique de développement de capacités de microservices basée sur Spring Cloud

王林
王林original
2023-06-23 12:04:40982parcourir

Avec le développement rapide du cloud computing et de la technologie du big data, les méthodes de conception architecturale et de développement des systèmes d'entreprise évoluent également constamment. L'architecture des microservices est l'un des changements importants. Il s'agit d'un modèle architectural qui divise une application unique en un ensemble de petits services qui coopèrent entre eux sur la base d'un mécanisme de communication léger, permettant ainsi d'obtenir des systèmes plus flexibles, évolutifs et maintenables. .

En tant que l'un des frameworks de microservices les plus populaires actuellement, Spring Cloud fournit un ensemble complet de solutions de développement de microservices, notamment la découverte, la configuration, la communication, l'équilibrage de charge, les disjoncteurs, les passerelles API, etc. Cet article présentera la pratique de développement de capacités de microservices basée sur Spring Cloud, ainsi que certains problèmes et solutions rencontrés dans la pratique.

1. Principes de base de l'architecture des microservices

L'architecture des microservices est un modèle architectural qui divise une seule application en un ensemble de petits services. Chaque service collabore entre eux sur la base d'un mécanisme de communication léger pour obtenir une solution plus flexible, évolutive et maintenable. système. Les principes de base de l'architecture des microservices comprennent :

1. Répartition des services : divisez une seule application en un ensemble de petits services en fonction des domaines d'activité ou des modules fonctionnels, et chaque service s'exécute et se met à niveau indépendamment.

2. Communication des services : les services collaborent entre eux sur la base de mécanismes de communication légers. Les méthodes de communication incluent l'API RESTful, la file d'attente de messages, le RPC, etc.

3. Découverte et enregistrement des services : gestion du cycle de vie des services, y compris l'enregistrement des services au centre d'enregistrement des services, la découverte des services et l'équilibrage de charge, etc.

4. Partitionnement des données : divisez les données en différents services via le partitionnement des données pour garantir l'isolation des données entre les services.

5. Exploitation et maintenance automatisées : réaliser le déploiement, la surveillance et la maintenance automatiques des services grâce à des outils automatisés, améliorant ainsi la fiabilité et la maintenabilité du système.

2. Spring Cloud Microservice Framework

Spring Cloud est un framework de microservices basé sur Spring Boot et fournit un ensemble complet de solutions de développement de microservices. Spring Cloud comprend les composants de base suivants :

1 Découverte et enregistrement du service : Eureka, Consul, Zookeeper, etc.

2. Équilibrage de charge client : Ruban.

3. Disjoncteur : Hystrix.

4. Passerelle de service : Zuul2.

5. Centre de configuration distribué : Spring Cloud Config.

6. Bus à messages : Spring Cloud Bus.

3. Pratique de développement de microservices Spring Cloud

Ce qui suit prend une application de microservice simple comme exemple pour présenter la pratique de développement de microservices basée sur Spring Cloud.

1. Créer un centre d'enregistrement Eureka

Tout d'abord, créez un centre d'enregistrement Eureka pour réaliser la découverte et l'enregistrement des services via Eureka.

Dans le projet Spring Boot, intégrez Eureka en ajoutant les dépendances suivantes :

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

Ajoutez l'annotation @EnableEurekaServer dans la classe de démarrage :

@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {
   public static void main(String[] args) {
      SpringApplication.run(EurekaServerApplication.class, args);
   }
}

Après avoir démarré le centre d'enregistrement Eureka, vous pouvez accéder à http://localhost:8761 dans le navigateur Vous pouvez voir l'interface de gestion du centre d'inscription.

2. Créer un fournisseur de services

Créez un fournisseur de services simple qui fournit une interface hello pour renvoyer une chaîne.

Dans le projet Spring Boot, intégrez Eureka et Ribbon en ajoutant les dépendances suivantes :

<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>

Dans le fournisseur de services, activez le client Eureka en ajoutant l'annotation @EnableDiscoveryClient :

@SpringBootApplication
@EnableDiscoveryClient
public class ServiceProviderApplication {
   public static void main(String[] args) {
      SpringApplication.run(ServiceProviderApplication.class, args);
   }
}

Créez un RestController pour fournir l'interface hello :

@RestController
public class HelloController {
   @RequestMapping("/hello")
   public String hello() {
      return "Hello World!";
   }
}

3. Créez un consommateur de service

Créez un consommateur de service, appelez l'interface fournie par le fournisseur de services et réalisez l'équilibrage de charge via Ribbon.

Dans le projet Spring Boot, intégrez Eureka et Ribbon en ajoutant les dépendances suivantes :

<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>

Dans le consommateur de services, activez le client Eureka en ajoutant l'annotation @EnableDiscoveryClient et activez l'équilibrage de charge du client Ribbon en ajoutant l'annotation @LoadBalanced :

@SpringBootApplication
@EnableDiscoveryClient
public class ServiceConsumerApplication {
   public static void main(String[] args) {
      SpringApplication.run(ServiceConsumerApplication.class, args);
   }
 
   @Bean
   @LoadBalanced
   public RestTemplate restTemplate() {
      return new RestTemplate();
   }
}

Créez un RestController pour appeler l'interface hello du fournisseur de services :

@RestController
public class HelloController {
   @Autowired
   private RestTemplate restTemplate;
 
   @RequestMapping("/hello")
   public String hello() {
      String url = "http://service-provider/hello";
      return restTemplate.getForObject(url, String.class);
   }
}

4 Créez une passerelle de service

Créez une passerelle de service pour exposer toutes les interfaces de microservices à l'extérieur et implémentez le transfert et le filtrage de routes via Zuul.

Dans le projet Spring Boot, intégrez Eureka et Zuul en ajoutant les dépendances suivantes :

<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
</dependency>

Dans la passerelle de service, activez Zuul en ajoutant l'annotation @EnableZuulProxy :

@SpringBootApplication
@EnableZuulProxy
public class ApiGatewayApplication {
   public static void main(String[] args) {
      SpringApplication.run(ApiGatewayApplication.class, args);
   }
}

Configurez les informations de routage de la passerelle, ajoutez ce qui suit dans application.yml Configuration :

zuul:
  routes:
    service-provider:
      path: /api/**
      serviceId: service-provider

5. Créer un centre de configuration

Créez un centre de configuration pour gérer la configuration via l'entrepôt Git afin d'obtenir une gestion centralisée et une actualisation dynamique de la configuration.

Dans le projet Spring Boot, intégrez le Config Server en ajoutant les dépendances suivantes :

<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-config-server</artifactId>
</dependency>

Dans le centre de configuration, activez le centre de configuration en ajoutant l'annotation @EnableConfigServer :

@SpringBootApplication
@EnableConfigServer
public class ConfigServerApplication {
   public static void main(String[] args) {
      SpringApplication.run(ConfigServerApplication.class, args);
   }
}

Configurez les informations de l'entrepôt Git et lisez dans application.yml Règles :

spring:
  cloud:
    config:
      server:
        git:
          uri: git://http://gitlab.example.com/abc/config-repo.git
          search-paths: '{application}'
  profiles:
    active: native
  paths:
    config.path: /usr/local/config-repo

6. Implémenter le disjoncteur du service

Créer un disjoncteur pour gérer l'opération de dégradation lorsque le service est anormal ou défaillant.

Dans le projet Spring Boot, intégrez Hystrix en ajoutant les dépendances suivantes :

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

Dans le fournisseur de services, implémentez le disjoncteur en ajoutant l'annotation @HystrixCommand :

@RestController
public class HelloController {
   @RequestMapping("/hello")
   @HystrixCommand(fallbackMethod = "fallback")
   public String hello() {
      ...
   }
 
   public String fallback() {
      return "Fallback";
   }
}

7. Implémentez la surveillance des services

Créez un centre de surveillance, utilisé pour la surveillance et l'analyse des données des interfaces fournies par les microservices afin d'obtenir une surveillance en temps réel de l'état du service.

Dans le projet Spring Boot, intégrez Hystrix Dashboard et Turbine en ajoutant les dépendances suivantes :

<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
</dependency>
<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-netflix-turbine</artifactId>
</dependency>

在监控中心中,通过添加@EnableHystrixDashboard注解来启用Hystrix Dashboard:

@SpringBootApplication
@EnableHystrixDashboard
public class MonitorCenterApplication {
   public static void main(String[] args) {
      SpringApplication.run(MonitorCenterApplication.class, args);
   }
}

在turbine服务提供者中,通过添加@EnableTurbine注解来启用Turbine:

@SpringBootApplication
@EnableTurbine
public class TurbineServerApplication {
   public static void main(String[] args) {
      SpringApplication.run(TurbineServerApplication.class, args);
   }
}

在application.yml中配置Turbine的信息:

turbine:
  aggregator:
    clusterConfig: service-consumer
  appConfig: service-consumer,service-provider
  clusterNameExpression: new String("default")

四、总结

Spring Cloud是一套完备的微服务开发解决方案,通过其提供的一系列组件和架构设计原则,开发者可以轻松构建出高可用、高扩展和易维护的微服务应用。在实践中,我们发现Spring Cloud不但提供了完备的技术支持,同时还提供了很好的学习资源和社区支持,为微服务的发展贡献了不少力量。但是,在实践中也会遇到不少问题和挑战,包括配置管理、调用链跟踪、数据一致性等方面,需要我们不断地进行探索和实践,以解决这些难题。

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