Table des matières
@EnableFeignClients" >@EnableFeignClients
@Import()@Import()" >@Import()@Import()
openfeign中作用" >openfeign中作用
registerDefaultConfiguration(metadata, registry)" >registerDefaultConfiguration(metadata, registry)
registerFeignClients(metadata, registry)" >registerFeignClients(metadata, registry)
Maison Java javaDidacticiel Analyse du code source Spring Cloud : partie 1

Analyse du code source Spring Cloud : partie 1

Aug 15, 2023 pm 04:04 PM
spring cloud

Ne vous moquez pas des amis qui lisent le code source. De nos jours, les entretiens ne portent que sur des essais en huit parties et ne sont pas fiables. Ils consistent davantage à poser des questions sur le projet, le code source et les questions. Je n'ai pas d'autre choix que de fabriquer des roues, sinon ce serait très fatiguant et ennuyeux !

Personnellement, je pense que la condition préalable pour lire le code source est de pouvoir l'utiliser. Une fois que vous le connaissez, vous pouvez deviner comment les autres l'implémentent. S'il existe des documents officiels pertinents, alors lisez les documents officiels.

Cependant, il est dommage que de nombreux documents officiels soient mal rédigés, ce qui vous laisse perplexe après les avoir lus pendant un moment.

Récemment, j'étudie 35, 0.05);font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;word-break: break-all;color: rgb(239, 112, 96);">openfeign code source À ce moment-là, j'ai trouvé une annotation clé dans le code source : @Importer . openfeign源码的时候,发现在源码中有个关键注解:@Import

项目启动类:

/**
 * @author tianwc  公众号:java后端技术全栈、面试专栏
 * @version 1.0.0
 * @date 2023年07月07日 16:47
 * 在线刷题 1200+题和1000+篇干货文章:<a href="http://woaijava.cc/">博客地址</a>
 */
@EnableFeignClients(basePackages = {"com.tian.feign"})
@SpringBootApplication()
public class    MqApplication {
    public static void main(String[] args) {
        SpringApplication.run(MqApplication.class, args);
    }
}
Copier après la connexion

然后,就是我们的feignclient接口:

/**
 * @author tianwc  公众号:java后端技术全栈、面试专栏
 * @version 1.0.0
 * @date 2023年07月07日 16:47
 * 在线刷题 1200+题和1000+篇干货文章:<a href="http://woaijava.cc/">博客地址</a>
 */
@FeignClient(contextId = "userFeignClient", value = "charge-user-service")
public interface UserFeignClient {

    /**
     * 邀请成功增加收益
     *
     * @param invitedDto 邀请增加收益
     * @return 邀请成功
     */
    @PostMapping("/user/invited/register")
    CommonResult<Boolean> invitedRegister(@RequestBody InvitedDto invitedDto);
}
Copier après la connexion

使用案例:

/**
 * @author tianwc  公众号:java后端技术全栈、面试专栏
 * @version 1.0.0
 * @date 2023年07月07日 16:47
 * 在线刷题 1200+题和1000+篇干货文章:<a href="http://woaijava.cc/">博客地址</a>
 */
@RestController
@RequestMapping("/user")
public class UserController {

    @Resource
    UserFeignClient userFeignClient;

    @PostMapping("/invited")
    public CommonResult invitedRegister(){
        //省略不想搞的代码
        return userFeignClient.invitedRegister(invitedDto);
    }

}
Copier après la connexion

从上面的代码中,我们可以看出openfeign关键代码有:

@EnableFeignClients(basePackages = {"com.tian.feign"})

@FeignClient(contextId = "userFeignClient", value = "charge-user-service")

userFeignClient.invitedRegister(invitedDto);

Classe de démarrage du projet : 🎜
/**
 * @author tianwc  公众号:java后端技术全栈、面试专栏
 * @version 1.0.0
 * @date 2023年07月07日 16:47
 * 在线刷题 1200+题和1000+篇干货文章:<a href="http://woaijava.cc/">博客地址</a>
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Documented
@Import(FeignClientsRegistrar.class)
public @interface EnableFeignClients { 
 String[] value() default {}; 
 String[] basePackages() default {}; 
 Class<?>[] basePackageClasses() default {}; 
 Class<?>[] defaultConfiguration() default {}; 
 Class<?>[] clients() default {};
}
Copier après la connexion
Copier après la connexion
🎜Ensuite, voici notre feignclientInterface : 🎜
@Import(FeignClientsRegistrar.class)
Copier après la connexion
Copier après la connexion
🎜Cas d'utilisation : 🎜
/**
 * @author tianwc  公众号:java后端技术全栈、面试专栏
 * @version 1.0.0
 * @date 2023年07月07日 16:47
 * 在线刷题 1200+题和1000+篇干货文章:<a href="http://woaijava.cc/">博客地址</a>
 */
@Override
public void registerBeanDefinitions(AnnotationMetadata metadata,
                                    BeanDefinitionRegistry registry) {
    registerDefaultConfiguration(metadata, registry);
    registerFeignClients(metadata, registry);
}
Copier après la connexion
Copier après la connexion
🎜À partir du code ci-dessus, nous pouvons voir queopenfeignLes codes clés sont : 🎜
@EnableFeignClients( basePackages = {"com.tian.feign"})🎜

@FeignClient(contextId = "userFeignClient", value = " charge-user-service")🎜

userFeignClient.invitedRegister(invitedDto);🎜

@EnableFeignClients

@EnableFeignClients这个注解在启动类上,我们肯定要重点关注。

小技巧:凡是以@Enable开头的各种注解基本上都是开启xxxx。比如:@EnableFeignClients表示开启feign客户端。

我们进入@EnableFeignClients

/**
 * @author tianwc  公众号:java后端技术全栈、面试专栏
 * @version 1.0.0
 * @date 2023年07月07日 16:47
 * 在线刷题 1200+题和1000+篇干货文章:<a href="http://woaijava.cc/">博客地址</a>
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Documented
@Import(FeignClientsRegistrar.class)
public @interface EnableFeignClients { 
 String[] value() default {}; 
 String[] basePackages() default {}; 
 Class<?>[] basePackageClasses() default {}; 
 Class<?>[] defaultConfiguration() default {}; 
 Class<?>[] clients() default {};
}
Copier après la connexion
Copier après la connexion

我们通常只需要关心属性basePackages,表示我们需要扫描的包目录。

如果既没有指定basePackages,也没有指定basePackageClasses,则采用启动类所在的目录作为包扫描路径。默认是这种情况。

本文重点来了,在这个注解@EnableFeignClients上有个注解@Import(FeignClientsRegistrar.class),这里到底是有什么作用?

@Import()@Import()

@Import()注解是在spring 3.0版本中引入的,字面意义就是导入.

@Import注解的全类名是org.springframework.context.annotation.Import。其只有一个默认的value属性,该属性类型为Class<?>[],表示可以传入一个或多个Class对象。

通过注释可以看出,该注解有如下作用:

可以导入一个或多个组件类(通常是@Configuration配置类)该注解的功能与Spring XML中的<import/>元素相同。可以导入@Configuration配置类、ImportSelectImportBeanDefinitionRegistrar的实现类。

从spring 4.2版本开始,还可以引用常规组件类(普通类),该功能类似于AnnotationConfigApplicationContext.register()方法。

该注解可以在类中声明,也可以在元注解中声明。如果需要导入XML或其他非@Configuration定义的资源,可以使用@ImportResource

@Import() l'annotation a été introduite dans la version Spring 3.0, et sa signification littérale est import.

🎜Le nom complet de la classe de l'annotation @Import est org.springframework.context.annotation.Import. Il n'a qu'un seul attribut de valeur par défaut, qui est de type Class&lt ;?>[], indiquant qu'un ou plusieurs objets Class peuvent être transmis. 🎜🎜Comme le montre l'annotation, l'annotation a les fonctions suivantes : 🎜🎜Vous pouvez importer une ou plusieurs classes de composants (généralement la classe de configuration @Configuration). La fonction de cette annotation est la même que celle de <import/> les éléments sont les mêmes . Vous pouvez importer @ConfigurationClasse de configuration, < code style="font-size: 14px;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;background-color: rgba(27, 31, 35, 0.05);font- famille : "Operator Mono", Consolas, Monaco, Menlo, monospace ; word-break : break-all ; couleur : rgb(239, 112, 96);">ImportSelect et Classe d'implémentation ImportBeanDefinitionRegistrar. 🎜🎜À partir du printemps 4.2, vous pouvez également référencer des classes de composants régulières (classes ordinaires). Cette fonction est similaire à Méthode AnnotationConfigApplicationContext.register(). 🎜🎜Cette annotation peut être déclarée dans la classe ou dans la méta-annotation. Si vous devez importer du XML ou d'autres fichiers non-, 35, 0.05);font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;word-break: break-all;color: rgb(239, 112, 96 );">@Configuration Pour les ressources définies, vous pouvez utiliser @ImportResource annotation . 🎜🎜Il existe généralement trois façons de l'utiliser : 🎜
  • @Import一个普通类 spring会将该类加载到spring容器中
  • @Import一个类,该类实现了ImportBeanDefinitionRegistrar接口,在重写的registerBeanDefinitions方法里面,能拿到BeanDefinitionRegistry的注册器,能手工往beanDefinitionMap中注册 beanDefinition
  • @Import一个类 该类实现了ImportSelector 重写selectImports方法该方法返回了String[]数组的对象,数组里面的类都会注入到spring容器当中。

下面我们来聊聊@Import在openfeign的这里是起到什么作用。

openfeign中作用

回答上面的代码里

@Import(FeignClientsRegistrar.class)
Copier après la connexion
Copier après la connexion

这里导入的是FeignClientsRegistrar类,我们再来看看他的类关系图:

Analyse du code source Spring Cloud : partie 1

从类关系图来看,FeignClientsRegistrar实现了ImportBeanDefinitionRegistrar接口。再结合@Import的三种使用方式中的第二种方式,能手工往beanDefinitionMap中注册 beanDefinition

/**
 * @author tianwc  公众号:java后端技术全栈、面试专栏
 * @version 1.0.0
 * @date 2023年07月07日 16:47
 * 在线刷题 1200+题和1000+篇干货文章:<a href="http://woaijava.cc/">博客地址</a>
 */
@Override
public void registerBeanDefinitions(AnnotationMetadata metadata,
                                    BeanDefinitionRegistry registry) {
    registerDefaultConfiguration(metadata, registry);
    registerFeignClients(metadata, registry);
}
Copier après la connexion
Copier après la connexion

这个方法registerBeanDefinitions()是feign的核心入口方法,其中会做两件事:

注册默认的配置和注册所有的FeignClient。

registerDefaultConfiguration(metadata, registry)

这个方法是负责注册OpenFeign的默认配置 ,逻辑相对简单:

private void registerDefaultConfiguration(AnnotationMetadata metadata,
                                          BeanDefinitionRegistry registry) {
    //获取@EnableFeignClients的全部属性
    //@EnableFeignClients(basePackages = {"com.tian.feign"}) 
    //这里的basePackages就是我们指定的熟悉
    Map<String, Object> defaultAttrs = metadata
        .getAnnotationAttributes(EnableFeignClients.class.getName(), true);

    if (defaultAttrs != null && defaultAttrs.containsKey("defaultConfiguration")) {
        String name;
        if (metadata.hasEnclosingClass()) {
            name = "default." + metadata.getEnclosingClassName();
        }
        else {
            name = "default." + metadata.getClassName();
        }
        registerClientConfiguration(registry, name,
                                    defaultAttrs.get("defaultConfiguration"));
    }
}
Copier après la connexion

defaultAttrs中内容如下:

Analyse du code source Spring Cloud : partie 1

但是这里我们只关注defaultConfiguration,我们并有对其进行设置,所以我们可以忽略他。重点是下面这个方法。

registerFeignClients(metadata, registry)

这里就是项目启动时和openfeign相关的核心代码,这也是@EnableFeignClients@FeignClient两个注解关联起来的地方。

我们进入源码中:

public void registerFeignClients(AnnotationMetadata metadata,
                                 BeanDefinitionRegistry registry) {
    
    ClassPathScanningCandidateComponentProvider scanner = getScanner();
    scanner.setResourceLoader(this.resourceLoader);

    Set<String> basePackages;

    Map<String, Object> attrs = metadata
        .getAnnotationAttributes(EnableFeignClients.class.getName());
    AnnotationTypeFilter annotationTypeFilter = new AnnotationTypeFilter(
        FeignClient.class);
    final Class<?>[] clients = attrs == null ? null
        : (Class<?>[]) attrs.get("clients");
    if (clients == null || clients.length == 0) {
        scanner.addIncludeFilter(annotationTypeFilter);
        basePackages = getBasePackages(metadata);
    }
    else {
        final Set<String> clientClasses = new HashSet<>();
        basePackages = new HashSet<>();
        for (Class<?> clazz : clients) {
            basePackages.add(ClassUtils.getPackageName(clazz));
            clientClasses.add(clazz.getCanonicalName());
        }
        AbstractClassTestingTypeFilter filter = new AbstractClassTestingTypeFilter() {
            @Override
            protected boolean match(ClassMetadata metadata) {
                String cleaned = metadata.getClassName().replaceAll("\\$", ".");
                return clientClasses.contains(cleaned);
            }
        };
        scanner.addIncludeFilter(
            new AllTypeFilter(Arrays.asList(filter, annotationTypeFilter)));
    }

    for (String basePackage : basePackages) {
        Set<BeanDefinition> candidateComponents = scanner
            .findCandidateComponents(basePackage);
        for (BeanDefinition candidateComponent : candidateComponents) {
            if (candidateComponent instanceof AnnotatedBeanDefinition) {
                // verify annotated class is an interface
                AnnotatedBeanDefinition beanDefinition = (AnnotatedBeanDefinition) candidateComponent;
                AnnotationMetadata annotationMetadata = beanDefinition.getMetadata();
                Assert.isTrue(annotationMetadata.isInterface(),
                              "@FeignClient can only be specified on an interface");

                Map<String, Object> attributes = annotationMetadata
                    .getAnnotationAttributes(
                    FeignClient.class.getCanonicalName());

                String name = getClientName(attributes);
                registerClientConfiguration(registry, name,
                                            attributes.get("configuration"));

                registerFeignClient(registry, annotationMetadata, attributes);
            }
        }
    }
}
Copier après la connexion

代码一行一行看是不是觉得很累,我给你总结好了。

上面的方法分为以下七个步骤:

  • Obtenez d'abord @EnableFeignClients annoté Tous attributs, principalement pour obtenir le chemin du package d'analyse (basePackages); <code style='font-size: 14px;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;background-color: rgba(27, 31, 35, 0.05);font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;word-break: break-all;color: rgb(239, 112, 96);'>@EnableFeignClients注解的所有属性,主要为了拿到扫描包路径(basePackages);
  • 因为一般不会在@EnableFeignClients注解中配置clients属性,所以会进入到clients属性为空时的逻辑;
  • 然后通过getScanner()方法获取扫描器:ClassPathScanningCandidateComponentProvider,并将上下文AnnotationConfigServletWebServerApplicationContext作为扫描器的ResourceLoader
  • 接着给扫描器ClassPathScanningCandidateComponentProvider添加一个注解过滤器(AnnotationTypeFilter),只过滤出包含@FeignClient注解的BeanDefinition
  • 再通过getBasePackages(metadata)方法获取@EnableFeingClients
  • 🎜 car il n'est généralement pas utilisé dans @EnableFeignClients configurez l'attribut clients dans l'annotation, donc il entrera dans la logique lorsque l'attribut clients est vide ; 🎜🎜🎜🎜 Passez ensuite getScanner() obtient le scanner : ClassPathScanningCandidateComponentProvider et changez le contexte AnnotationConfigServletWebServerApplicationContextEn tant que scannerResourceLoader;🎜🎜🎜🎜Donnez ensuite au scannerClassPathScanningCandidateComponentProviderAjoutez un filtre d'annotation (AnnotationTypeFilter) pour filtrer uniquement les fichiers contenant @FeignClient annotationBeanDefinition; 🎜🎜🎜🎜 puis passez getBasePackages(metadata) obtientLe chemin d'analyse du package ou la classe d'analyse spécifiée dans l'annotation @EnableFeingClients ; s'il n'est pas obtenu, le chemin d'accès au package où se trouve la classe de démarrage sera analysé par défaut ; 🎜🎜
  • Ensuite, entrez la logique de base : passez scanner.findCandidateComponents( basePackage) analyse toutes les annotations du chemin du package @FeignClientInterface d'assemblage annotée et qualifiée;
  • scanner.findCandidateComponents(basePackage)方法从包路径下扫描出所有标注了@FeignClient注解并符合条件装配的接口;
  • 最后将FeignClientConfigurationBeanDefinitionRegistry中注册一下,再对FeignClient做真正的注册操作。
  • 总结

    openfeign源码中的@Import注解在这里的作用就是将扫描到带有FeignClient

    Enfin, FeignClientConfiguration dans Enregistrez-le dans BeanDefinitionRegistry, puis FeignClient effectue la véritable opération d'enregistrement.

    Résumé

    DansopenfeignL'annotation @Import dans le code source est utilisée ici pour analyser les fichiers avec FeignClientToutes les classes d'interface annotées sont enregistrées sous forme de beans dans le conteneur IOC à ressort.

    🎜 Permettez-moi de souligner à nouveau comment utiliser l'annotation @Import : 🎜
    • @ImportUn ressort de classe commun Cette classe sera chargée dans le conteneur Spring@Import一个普通类 spring会将该类加载到spring容器中
    • @Import一个类,该类实现了ImportBeanDefinitionRegistrar接口,在重写的registerBeanDefinitions方法里面,能拿到BeanDefinitionRegistry的注册器,能手工往beanDefinitionMap中注册 beanDefinition
    • @Import一个类 该类实现了ImportSelector 重写selectImports
    @ImportUne classe qui implémente ImportBeanDefinitionRegistrar code>, dans l'interface réécrite <code style="font-size: 14px;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;background-color: rgba (27, 31 , 35, 0.05);famille de polices : " operator mono consolas monaco menlo monospace de mot break-all rgb>registerBeanDefinitionsIn la méthode, vous pouvez obtenir <code style="font-size: 14px;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;background-color: rgba(27 , 31, 35, 0,05);famille de polices : " operator mono consolas monaco menlo monospace de mot break-all rgb>BeanDefinitionRegistryregister, vous pouvez définir manuellement beanDefinitionMap RegisterbeanDefinition

    @ImportUne classe qui implémente ImportSelector RewriteselectImports méthode Cette méthode renvoie l'objet du tableau String[] et les classes du tableau seront injectées dans le conteneur Spring. .

    D'accord, c'est tout à partager aujourd'hui. Il y a beaucoup de choses intéressantes dans cet openfeign, nous les partagerons la prochaine fois ! 🎜🎜🎜🎜🎜🎜🎜

    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 de ce site Web
    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

    Outils d'IA chauds

    Undresser.AI Undress

    Undresser.AI Undress

    Application basée sur l'IA pour créer des photos de nu réalistes

    AI Clothes Remover

    AI Clothes Remover

    Outil d'IA en ligne pour supprimer les vêtements des photos.

    Undress AI Tool

    Undress AI Tool

    Images de déshabillage gratuites

    Clothoff.io

    Clothoff.io

    Dissolvant de vêtements AI

    AI Hentai Generator

    AI Hentai Generator

    Générez AI Hentai gratuitement.

    Article chaud

    R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
    3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O. Meilleurs paramètres graphiques
    3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O. Comment réparer l'audio si vous n'entendez personne
    3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
    WWE 2K25: Comment déverrouiller tout dans Myrise
    4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

    Outils chauds

    Bloc-notes++7.3.1

    Bloc-notes++7.3.1

    Éditeur de code facile à utiliser et gratuit

    SublimeText3 version chinoise

    SublimeText3 version chinoise

    Version chinoise, très simple à utiliser

    Envoyer Studio 13.0.1

    Envoyer Studio 13.0.1

    Puissant environnement de développement intégré PHP

    Dreamweaver CS6

    Dreamweaver CS6

    Outils de développement Web visuel

    SublimeText3 version Mac

    SublimeText3 version Mac

    Logiciel d'édition de code au niveau de Dieu (SublimeText3)

    Utiliser intelligemment Spring Cloud pour résoudre les problèmes d'équilibrage de charge sous une architecture de microservices Utiliser intelligemment Spring Cloud pour résoudre les problèmes d'équilibrage de charge sous une architecture de microservices Jun 23, 2023 pm 01:40 PM

    Alors que la complexité des applications d'entreprise continue d'augmenter, de plus en plus d'entreprises commencent à diviser leurs applications en plusieurs microservices et à compléter l'ensemble du processus métier grâce à la collaboration entre microservices. Cette approche architecturale peut rendre les applications plus stables et évolutives, mais elle entraîne également de nouveaux problèmes, tels que l'équilibrage de charge, la découverte de services, etc. Cet article explique comment utiliser Spring Cloud pour résoudre le problème d'équilibrage de charge dans le cadre de l'architecture des microservices. Qu’est-ce que l’équilibrage de charge ? L'équilibrage de charge (LoadBalancing) fait référence à l'équilibrage de plusieurs serveurs et réseaux

    Analyse du code source Spring Cloud : partie 1 Analyse du code source Spring Cloud : partie 1 Aug 15, 2023 pm 04:04 PM

    Personnellement, je pense que la condition préalable à la lecture du code source est que vous devez être capable de l'utiliser. Une fois que vous le connaissez, vous pouvez deviner comment d'autres l'ont implémenté. S'il existe des documents officiels pertinents, lisez les documents officiels.

    Développement de microservices Spring Cloud orientés services Développement de microservices Spring Cloud orientés services Jun 23, 2023 pm 12:30 PM

    Avec le développement d'Internet et la mise à jour continue de la technologie, les applications uniques traditionnelles ne peuvent plus répondre aux besoins des utilisateurs, et le concept de microservices est apparu. SpringCloud est une boîte à outils de développement de microservices lancée par Pivotal. Elle offre aux développeurs un moyen extrêmement pratique de créer, déployer et gérer des applications d'architecture de microservices. Cet article présentera en détail le développement de microservices SpringCloud orienté services, y compris le concept et l'architecture de SpringCloud, le processus de développement de microservices et

    Déploiement et fonctionnement de l'architecture de microservice Spring Cloud Déploiement et fonctionnement de l'architecture de microservice Spring Cloud Jun 23, 2023 am 08:19 AM

    Avec le développement rapide d’Internet, la complexité des applications d’entreprise augmente de jour en jour. En réponse à cette situation, l’architecture des microservices a vu le jour. Grâce à sa modularité, son déploiement indépendant et sa grande évolutivité, il est aujourd'hui devenu le premier choix pour le développement d'applications au niveau de l'entreprise. En tant qu'excellente architecture de microservices, Spring Cloud a montré de grands avantages dans les applications pratiques. Cet article présentera le déploiement, l'exploitation et la maintenance de l'architecture de microservices SpringCloud. 1. Déployer l'architecture de microservices SpringCloud SpringCloud

    Comment utiliser Java pour développer une application d'orchestration de conteneurs basée sur Spring Cloud Kubernetes Comment utiliser Java pour développer une application d'orchestration de conteneurs basée sur Spring Cloud Kubernetes Sep 20, 2023 am 11:15 AM

    Comment utiliser Java pour développer une application d'orchestration de conteneurs basée sur Spring Cloud Kubernetes Avec le développement et l'application généralisée de la technologie des conteneurs, les outils d'orchestration de conteneurs sont devenus un élément indispensable des développeurs. En tant que l'un des outils d'orchestration de conteneurs les plus populaires, Kubernetes est devenu la norme de l'industrie. Dans ce contexte, combinant Spring Cloud et Kubernetes, nous pouvons facilement développer des applications basées sur l'orchestration de conteneurs. Cet article présentera en détail

    Introduction au framework Spring Cloud en langage Java Introduction au framework Spring Cloud en langage Java Jun 09, 2023 pm 10:54 PM

    Introduction au framework SpringCloud en langage Java Avec la popularité du cloud computing et des microservices, le framework SpringCloud est devenu l'un des frameworks préférés pour créer des applications cloud natives en langage Java. Cet article présentera les concepts et les fonctionnalités du framework Spring Cloud, et comment utiliser Spring Cloud pour créer une architecture de microservices. Introduction à SpringCloud Le framework SpringCloud est un framework de microservices basé sur SpringBoot. c'est

    Pratique de microservice Spring Cloud pour la mise en œuvre de verrous distribués Pratique de microservice Spring Cloud pour la mise en œuvre de verrous distribués Jun 22, 2023 pm 11:28 PM

    Avec la popularité de l'architecture de microservices, de plus en plus d'équipes de développement d'entreprise commencent à utiliser Spring Cloud pour créer leurs propres systèmes de microservices. Dans un environnement distribué, la mise en œuvre de verrous distribués constitue un défi technique important. Cet article explique comment implémenter des pratiques de microservice de verrous distribués dans le cadre Spring Cloud. Tout d’abord, nous devons comprendre ce qu’est un verrou distribué. Le verrouillage distribué est une technologie utilisée pour protéger l'accès aux ressources partagées. Il peut garantir que dans un environnement distribué, plusieurs nœuds ne modifieront pas la même ressource en même temps ou.

    La combinaison des microservices Spring Cloud et de la composantisation La combinaison des microservices Spring Cloud et de la composantisation Jun 23, 2023 am 10:21 AM

    Avec le développement continu de la technologie Internet, de plus en plus d'entreprises commencent à adopter une architecture de microservices pour construire leurs systèmes. SpringCloud est un framework de microservices qui a émergé rapidement dans ce contexte. Sur cette base, cet article discutera de la combinaison des microservices SpringCloud et de la composantisation, et analysera ses avantages et ses méthodes de mise en œuvre. 1. Introduction aux microservices SpringCloud SpringCloud est une version améliorée du projet SpringBoot. Il fournit un grand nombre d'outils.

    See all articles