spring4 系列四 cloud

一、概述 spring提供了一套分布式环境的基础框架,可以用于实现基于服务的架构。使用这些服务基本上都需要添加pom依赖、添加配置、代码中添加注解。

二、具体服务

1、服务注册和发现

<groupId>org.springframework.cloud</groupId>

    <artifactId>spring-cloud-starter-eureka-server</artifactId>

    @EnableEurekaServer

    eureka:

  instance:

    hostname: peer1

扫描二维码关注公众号,回复: 266335 查看本文章

 client:

    serviceUrl:

      defaultZone: http://peer2:8762/eureka/ # 互相备份

    2、具体服务的注册

    <groupId>org.springframework.cloud</groupId>

    <artifactId>spring-cloud-starter-eureka</artifactId>

    @EnableDiscoveryClient

    @Autowired

  private DiscoveryClient discoveryClient;

    eureka:

 client:

   serviceUrl:

     defaultZone: http://10.88.102.203:8761/eureka/

 instance:

   preferIpAddress: true

3、消费服务方式一 ribbon

ribbon可以实现寻找同一个Zone且负载较少的eureka Server,通过uereka server获取服务列表,客户端负载均衡、超时重试等逻辑。

    <groupId>org.springframework.cloud</groupId>

    <artifactId>spring-cloud-starter-ribbon</artifactId>

@LoadBalanced

public RestTemplate restTemplate() {

return new RestTemplate();

}

// 通过url找服务

restTemplate.getForObject("http://xxx/" + id, User.class); 

   eureka:

 client:

   serviceUrl:

     defaultZone: http://10.88.102.203:8761/eureka/

 instance:

   preferIpAddress: true

4、消费服务 方式二 Feign

整合ribbon,简化代码,适合于一次性调用很多个服务的时候

<groupId>org.springframework.cloud</groupId>

    <artifactId>spring-cloud-starter-feign</artifactId>

@EnableFeignClients

@EnableDiscoveryClient

@FeignClient(name = "microservice-provider-user")

public interface UserFeignClient {

 @RequestMapping("/{id}")

 // 通过函数名来找服务

 public User findByIdFeign(@RequestParam("id") Long id); 

}

ribbon:

 eureka:

   enabled: true   

5、Hystrix 熔断器 隔离故障的范围

<groupId>org.springframework.cloud</groupId>

    <artifactId>spring-cloud-starter-hystrix</artifactId>

    @EnableCircuitBreaker

    1》ribbon:

    // 注意fallback的函数签名要和调用函数本身一致

    @HystrixCommand(fallbackMethod = "fallback")

    2》forein: 直接传递第二个参数(函数的重载)即可

    @FeignClient(name = "microservice-provider-user", fallback = HystrixClientFallback.class)

    6、对熔断器的监控 Hystrix Dashboard

    <groupId>org.springframework.cloud</groupId>

      <artifactId>spring-cloud-starter-hystrix-dashboard</artifactId>

      @EnableHystrixDashboard

    7、同时收集多个服务的监控数据 Turbine

    <dependency>

      <groupId>org.springframework.cloud</groupId>

      <artifactId>spring-cloud-starter-turbine</artifactId>

    </dependency>

    <dependency>

      <groupId>org.springframework.cloud</groupId>

      <artifactId>spring-cloud-netflix-turbine</artifactId>

    </dependency>

    @EnableTurbine

    security.basic.enabled: false

turbine:

 aggregator:

   clusterConfig: default

 appConfig: serviceid1, serviceid2 

 clusterNameExpression: new String("default")

8、统一配置

<groupId>org.springframework.cloud</groupId>

    <artifactId>spring-cloud-config-server</artifactId>

    @EnableConfigServer

    cloud:

    config:

      server:

        git:

          uri: https://github.com/xxx

          search-paths: dir

          username:        

          password:

    使用方:

    <groupId>org.springframework.cloud</groupId>

    <artifactId>spring-cloud-starter-config</artifactId>

    @RefreshScope

@Value("${profile}")

private String profile;

bootstrap.yml(数据加载顺序:bootstrap config application,如果在application中,实现不了占位符的替换)

  cloud:

   config:

     uri: http://config-server:8040/

     profile: dev                      

     label: master       

使用方刷新:curl  -X POST http://localhost:8041/refresh

9、网关 Zuul提供了动态路由、监控、回退、安全等功能。

<groupId>org.springframework.cloud</groupId>

    <artifactId>spring-cloud-starter-zuul</artifactId>

    @EnableZuulProxy

    zuul:

 ignored-services: xxxx

 routes:

   movie:                                                            

     path: /movie/**

     service-id: yyyy

三、常用命令

java -jar target/**.jar --spring.profiles.active=peer1 > peer1.log 2>&1 &

猜你喜欢

转载自eric-weitm.iteye.com/blog/2386134