zoukankan      html  css  js  c++  java
  • springCloud

    1.SpringCloud简介

    SpringCloud集成了很多组件,包括:

    • Eureka: 服务治理,服务注册/发现
    • Zuul: 网关组件,提供智能路由,访问过滤功能 (集成了ribbon、hystrix)
    • Ribbon:客户端负载均衡的服务调用组件(客户端负载)
    • Fegin: 服务之间的调用组件 (集成了ribbon、hystrix)
    • Hystrix: 容错管理组件

    2.Eureka注册中心

    • Eureka:就是服务注册中心(可以是一个集群),对外暴露自己的地址
    • 提供者:启动后向Eureka注册自己信息(地址,提供什么服务)
    • 消费者:向Eureka订阅服务,Eureka会将对应服务的所有提供者地址列表发送给消费者,并且定期更新
    • 心跳(续约):提供者定期通过http方式向Eureka刷新自己的状态

    2.1.搭建注册中心EurekaServer

    导入依赖:

     <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.0.6.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
    
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
            <java.version>1.8</java.version>
            <spring-cloud.version>Finchley.RC2</spring-cloud.version>
        </properties>
      <!--注册中心的依赖-->
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
            </dependency>
    
        </dependencies>
    <!-- SpringCloud的依赖 统一管理版本号-->
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    
    

    编写application.yml配置文件

    server:
      port: 8081 # 端口
    spring:
      application:
        name: eureka-server # 应用名称,会在Eureka中显示
    eureka:
      client:
        service-url: # EurekaServer的地址,现在是自己的地址,如果是集群,需要加上其它Server的地址。
          defaultZone: http://127.0.0.1:${server.port}/eureka
    

    在引导类上加注解:

    @SpringBootApplication
    @EnableEurekaServer // 声明当前springboot应用是一个eureka服务中心
    
    public class ItcastEurekaApplication {
    
    public static void main(String[] args) {
        SpringApplication.run(ItcastEurekaApplication.class, args);
       }
    }
    

    直接启动,访问http:localhost:8081即可访问到

    2.2.将其他服务注册到Eureka中

    service-provide

    1. 在pom.xml中,添加springcloud的相关依赖。
    2. 在application.yml中,添加springcloud的相关配置。
    3. 在引导类上添加注解,把服务注入到eureka注册中心。

    参照service-eureka的pom.xml中加入Eureka的客户端,载导入其他与数据库相关的依赖等

     <!-- Eureka客户端 -->
    
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
    
    

    application.yml:

    erver:
      port: 8082
    spring:
      datasource:
        url: jdbc:mysql://localhost:3306/li
        username: root
        password: root
        driverClassName: com.mysql.jdbc.Driver
      application:
        name: service-provider # 应用名称,注册到eureka后的服务名称
    mybatis:
      type-aliases-package: com.li.service.pojo
    eureka:
      client:
        service-url: # EurekaServer地址
          defaultZone: http://127.0.0.1:8081/eureka
    

    在引导类上加上注解

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

    启动后在注册中心中就可以看到此服务,可以再写一个服务的消费方的服务,也注册到Eureka中,通过feign来远程调用;

    service-customer

    1.加入Feign依赖

      <!--引入Feign组件依赖-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-openfeign</artifactId>
            </dependency>
    

    2.引导类加上注解

    @SpringBootApplication
    @EnableDiscoveryClient //启动客户端
    @EnableFeignClients  //启用Feign组件代替RestTemplate远程调用 :其中包含熔断和负载均衡
    public class ServiceConsumerApplication {
        public static void main(String[] args) {
            SpringApplication.run(ServiceConsumerApplication.class,args);
        }
    }
    

    3.创建接口

    /**
     * fallback = UserClientFallback.class : 熔断
     */
    @FeignClient(value = "service-provide") //声明接口为feign客户端接口,并指明调用的微服务名(id)
    public interface UserClient {
        @GetMapping("user/{id}")
        public User queryUserById(@PathVariable("id") Integer id);
    }
    

    4.创建controller

    @Controller
    @RequestMapping("consumer/user")
    public class UserController {
        @Autowired
        private UserClient userClient;
        @GetMapping
        @ResponseBody
        public String queryUserById(@RequestParam("id") Integer id) {
            return this.userClient.queryUserById(id).toString();
        }
    }
    

    3.服务提供方

    服务续约

    在注册服务完成以后,服务提供者会维持一个心跳(定时向EurekaServer发起Rest请求),告诉EurekaServer:“我还活着”。这个我们称为服务的续约(renew);

    eureka:
      instance:
        lease-expiration-duration-in-seconds: 10 # 10秒即过期
        lease-renewal-interval-in-seconds: 5 # 5秒一次心跳
    
    • lease-expiration-duration-in-seconds: 服务续约(renew)的间隔,默认为30秒
    • lease-expiration-duration-in-seconds:服务失效时间,默认值90秒

    默认情况下每个30秒服务会向注册中心发送一次心跳,证明自己还活着。如果超过90秒没有发送心跳,则会在服务列表里移除

    4.服务消费方

    eureka:
      client:
        service-url:
        registry-fetch-interval-seconds: 5  #拉取服务的间隔时间
    

    5.失效剔除和自我保护

    失效剔除

    有时服务挂掉过着关掉,Eureka Server会将这些服务从列表中剔除:

    自我保护

    在当某些服务挂掉之后,Eureka会将这写服务保护一段时间,不被直接剔除

    eureka:
      server:
        enable-self-preservation: false # 关闭自我保护模式(缺省为打开)
        eviction-interval-timer-in-ms: 1000 # 扫描失效服务的间隔时间(缺省为60*1000ms)
    
    
  • 相关阅读:
    前端基础之CSS
    前端基础之HTML(三)
    前端基础之HTML(二)
    前端基础之HTML(一)
    面向对象总结
    内置函数总结
    函数部分总结
    文件操作总结
    基础数据类型总结
    python基础知识总结
  • 原文地址:https://www.cnblogs.com/cqyp/p/13284109.html
Copyright © 2011-2022 走看看