• Spring - Cloud (微服务)


    SpringCloud 和 SpringBoot 版本选择对应: 

    版本对应:https://start.spring.io/actuator/info

    Cloud官网:Spring Cloud 

    中文网:Spring Cloud中文网-官方文档中文版

    在官网可以查看 当前Cloud 推荐的Boot版本:

    当前技术栈选型和停更图(2020年):

    创建聚合工程 (使用Maven 或 Spring Initializr 都是可以的):

    JDK版本改为8:

    注解激活生效:新版的lonbok好像需要勾选:

    字符编码集UTF-8:

    Maven配置案例:

    父模块:

    1. "1.0" encoding="UTF-8"?>
    2. <project xmlns="http://maven.apache.org/POM/4.0.0"
    3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    5. <modelVersion>4.0.0modelVersion>
    6. <groupId>org.examplegroupId>
    7. <artifactId>alibaba2023artifactId>
    8. <version>1.0-SNAPSHOTversion>
    9. <packaging>pompackaging>
    10. <modules>
    11. <module>demomodule>
    12. modules>
    13. <properties>
    14. <maven.compiler.source>8maven.compiler.source>
    15. <maven.compiler.target>8maven.compiler.target>
    16. <spring-boot.version>2.3.12.RELEASEspring-boot.version>
    17. <spring-cloud-alibaba.version>2.2.10-RC1spring-cloud-alibaba.version>
    18. <spring-cloud.version>Hoxton.SR12spring-cloud.version>
    19. properties>
    20. <dependencyManagement>
    21. <dependencies>
    22. <dependency>
    23. <groupId>org.springframework.bootgroupId>
    24. <artifactId>spring-boot-dependenciesartifactId>
    25. <version>${spring-boot.version}version>
    26. <type>pomtype>
    27. <scope>importscope>
    28. dependency>
    29. <dependency>
    30. <groupId>org.springframework.cloudgroupId>
    31. <artifactId>spring-cloud-dependenciesartifactId>
    32. <version>${spring-cloud.version}version>
    33. <type>pomtype>
    34. <scope>importscope>
    35. dependency>
    36. <dependency>
    37. <groupId>com.alibaba.cloudgroupId>
    38. <artifactId>spring-cloud-alibaba-dependenciesartifactId>
    39. <version>${spring-cloud-alibaba.version}version>
    40. <type>pomtype>
    41. <scope>importscope>
    42. dependency>
    43. <dependency>
    44. <groupId>org.springframework.bootgroupId>
    45. <artifactId>spring-boot-starter-webartifactId>
    46. <version>${spring-boot.version}version>
    47. dependency>
    48. dependencies>
    49. dependencyManagement>
    50. project>

    子模块:

    1. "1.0" encoding="UTF-8"?>
    2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    4. <modelVersion>4.0.0modelVersion>
    5. <groupId>com.examplegroupId>
    6. <artifactId>demoartifactId>
    7. <version>0.0.1-SNAPSHOTversion>
    8. <packaging>jarpackaging>
    9. <name>demoname>
    10. <description>Demo project for Spring Bootdescription>
    11. <parent>
    12. <artifactId>alibaba2023artifactId>
    13. <groupId>org.examplegroupId>
    14. <version>1.0-SNAPSHOTversion>
    15. parent>
    16. <properties>
    17. <java.version>1.8java.version>
    18. properties>
    19. <dependencies>
    20. <dependency>
    21. <groupId>org.springframework.bootgroupId>
    22. <artifactId>spring-boot-starter-webartifactId>
    23. dependency>
    24. <dependency>
    25. <groupId>org.springframework.bootgroupId>
    26. <artifactId>spring-boot-starter-actuatorartifactId>
    27. dependency>
    28. <dependency>
    29. <groupId>org.springframework.bootgroupId>
    30. <artifactId>spring-boot-starter-testartifactId>
    31. <scope>testscope>
    32. <exclusions>
    33. <exclusion>
    34. <groupId>org.junit.vintagegroupId>
    35. <artifactId>junit-vintage-engineartifactId>
    36. exclusion>
    37. exclusions>
    38. dependency>
    39. <dependency>
    40. <groupId>org.projectlombokgroupId>
    41. <artifactId>lombokartifactId>
    42. <optional>trueoptional>
    43. dependency>
    44. <dependency>
    45. <groupId>com.alibaba.cloudgroupId>
    46. <artifactId>spring-cloud-starter-alibaba-nacos-configartifactId>
    47. dependency>
    48. <dependency>
    49. <groupId>com.alibaba.cloudgroupId>
    50. <artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
    51. dependency>
    52. <dependency>
    53. <groupId>com.alibaba.cloudgroupId>
    54. <artifactId>spring-cloud-circuitbreaker-sentinelartifactId>
    55. dependency>
    56. <dependency>
    57. <groupId>com.alibaba.cloudgroupId>
    58. <artifactId>spring-cloud-starter-alibaba-sentinelartifactId>
    59. <version>2021.0.1.0version>
    60. dependency>
    61. <dependency>
    62. <groupId>com.alibaba.cspgroupId>
    63. <artifactId>sentinel-datasource-nacosartifactId>
    64. dependency>
    65. <dependency>
    66. <groupId>com.alibaba.cloudgroupId>
    67. <artifactId>spring-cloud-alibaba-sentinel-gatewayartifactId>
    68. dependency>
    69. dependencies>
    70. <build>
    71. <plugins>
    72. <plugin>
    73. <groupId>org.apache.maven.pluginsgroupId>
    74. <artifactId>maven-compiler-pluginartifactId>
    75. <version>3.8.1version>
    76. <configuration>
    77. <source>1.8source>
    78. <target>1.8target>
    79. <encoding>UTF-8encoding>
    80. configuration>
    81. plugin>
    82. <plugin>
    83. <groupId>org.springframework.bootgroupId>
    84. <artifactId>spring-boot-maven-pluginartifactId>
    85. <version>${spring-boot.version}version>
    86. <configuration>
    87. <mainClass>com.example.demo.DemoApplicationmainClass>
    88. <skip>trueskip>
    89. configuration>
    90. <executions>
    91. <execution>
    92. <id>repackageid>
    93. <goals>
    94. <goal>repackagegoal>
    95. goals>
    96. execution>
    97. executions>
    98. plugin>
    99. plugins>
    100. build>
    101. project>

    注意点 1:

    1. #
    2. UTF-8
    3. 1.8
    4. 1.8
    5. 4.12
    6. 1.2.17
    7. 1.16.18
    8. 5.1.47
    9. 1.1.16
    10. 1.3.0
    11. # 引用时
    12. # 标签
    13. mysql
    14. mysql-connector-java
    15. ${mysql.version}
    16. com.alibaba
    17. druid
    18. ${druid.version}
    19. #
    20. com.zbx.springcloud //创建工程时候的完整包名
    21. cloud-api-commons //工程的名字 (如下图)
    22. ${project.version} //当前自己pom里面定义的版本号 (固定这样写就可以了)

    注意点 2:

    使用 Run Dashboard (批量 Run):

    • 当前.idea 下 workspace.xml
    • 找到  标签 第一行应该是  
    • 添加 
                 

             

    注意点3:

    所有的微服务,一定要有自己的微服务名称,在配置文件里面进行配置

     

    1.服务注册与发现:

    什么是服务治理:     

    •    在传统rpc远程调用中,服务与服务依赖关系,管理比较复杂,所以需要使用服务治理,管理服务与服务之间依赖关系,可以实现服务调用、负载均衡、容错等,实现服务发现与注册。

          在服务注册与发现中,有一个注册中心,当服务器启动的时候,会把当前自已服务器的信息 比如 服务地址通讯地址等以别名方式注册到注册中心上。另一方(消费者|服务提供者),以该别名的方式去注册中心上获取到实际的服务通讯地址,然后在实现本地rpc调用远程。

    可用组件: 

    DiscoveryClient 对象 (Spring提供):

    Spring Cloud Commons 提供的抽象

      最早的时候服务发现注册都是通过DiscoveryClient来实现的,随着版本变迁把DiscoveryClient服务注册抽离出来变成了ServiceRegistry抽象,专门负责服务注册,DiscoveryClient专门负责服务发现。还提供了负载均衡的发现LoadBalancerClient抽象。

    DiscoveryClient通过@EnableDiscoveryClient的方式进行启用。

    • 从Spring Cloud Edgware开始,@EnableDiscoveryClient 或@EnableEurekaClient 可省略。只需加上相关依赖,并进行相应配置,即可将微服务注册到服务发现组件上。

    @EnableDiscoveryClient和@EnableEurekaClient:

    • 共同点:都是能够让注册中心能够发现,扫描到改服务。
    • 不同点:@EnableEurekaClient只适用于Eureka作为注册中心,@EnableDiscoveryClient 可以是其他注册中心。

    使用:

    • 可对外提供接口,查询 已注册的服务等相关的信息。
    • 入口主类添加注解 @EnableDiscoveryClient
    1. @Resource
    2. private DiscoveryClient discoveryClient;
    3. @GetMapping(value = "/payment/discovery")
    4. public Object discovery() {
    5. List services = discoveryClient.getServices();
    6. for (String element : services) {
    7. log.info("*****element: " + element);
    8. }
    9. List instances = discoveryClient.getInstances("CLOUD-PAYMENT-SERVICE");
    10. for (ServiceInstance instance : instances) {
    11. log.info(instance.getServiceId() + "\t" + instance.getHost() + "\t" + instance.getPort() + "\t" + instance.getUri());
    12. }
    13. return this.discoveryClient;

    注册中心 Eureka 、ZookeeperConsul 的区别:

    • Nacos 支持AP 和 CP 模式可切换 

     

     

     2.服务的调用与负载均衡:

    Ribbon:

    主要作用:负载均衡 + RestTemplate调用

    负载均衡设置:

    配置方式一:配置类方式 

    配置方式二:配置文件  

    配置方式三:自定义实现   

    OpenFeign:

     3.服务的熔断和降级:

    4.服务网关:

    5.

  • 相关阅读:
    淘宝高级关键字搜索淘宝商品 API
    这一篇让你掌握 vue3.2 setup 语法糖
    模型保存和加载
    【云驻共创】GaussDB(DWS)云数仓工作负载管理流程体验
    app启动流程
    使用标准信号检测 VM振弦采集模块测量精度
    20220726NOI模拟赛--考后总结
    动态通讯录及程序保存在文件中
    81.C++ STL map/ multimap容器
    成功解决ValueError: Only TF native optimizers are supported in Eager mode
  • 原文地址:https://blog.csdn.net/qq_42383787/article/details/108169010