Skip to content

wangruigen/springcloud

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

springcloud技术栈

感谢此书《Spring Cloud与Docker微服务架构实战》(第二版)和作者,获益匪浅。

eureka服务中心
1.高可用eureka server,eureka server集群,见配置application-simple.yml
2.eureka用户认证,application.yml
1.用户微服务,做为服务提供者提供用户信息查询
2.jpa+h2构建数据源
#用户微服务自定义元数据
eureka:
   client:
     service-url:
       #将应用注册到注册中心,配置注册中心地址
       #这里的url服务端客户端和配置中心的单词必须完全一样
       #这里的url服务端客户端和配置中心的单词必须完全一样
       #这里的url服务端客户端和配置中心的单词必须完全一样
       defaultZone: http:https://127.0.0.1:8761/eureka
   instance:
     prefer-ip-address: true #将自己ip注册到eureka server,默认false,如果false,表示将系统所在的hostname注册到eureka server
     #自定义元数据
     metadata-map:
       #key:value形式
       my-metadata: 自定义的元数据 
微服务访问需要认证的eureka server
eureka:
  client:
    service-url:
      #将应用注册到注册中心,配置注册中心地址(也可以配置一个,注册中心会同步节点,最好是配置两个,避免极端情况,节点同步不了)
      #defaultZone: http:https://peer1:8761/eureka,http:https://peer2:8762/eureka
      defaultZone: http:https://admin:admin@peer1:8761/eureka,http:https://admin:admin@peer2:8762/eureka
      #defaultZone: http:https://localhost:8761/eureka
1.电影微服务,服务消费者,调用user-provider查询用户信息
2.RestTemplate调用http api
电影微服务-服务消费者-元数据配置
1.电影微服务-服务消费者-整合ribbon,实现客户端负载均衡
2.整合hystrix断路器@EnableCircuitBreaker
`电影微服务-服务消费者-整合ribbon-定制ribbon`
/**
 * Ribbon配置类,不在springboot扫描范围内
 */
@Configuration
public class RibbonConfiguration {

    /**
     * 定义一个负债均衡规则:随机访问
     * @return
     */
    @Bean
    public IRule ribbonRule(){
        return new RandomRule();
    }
}

/**
 * <p>使用RibbonClient,为特定name的Ribbon Client自定义配置</p>
 * <p>使用RibbonClient的configuretion属性,指定ribbon的配置类</p>
 *
 */
@Configuration
@RibbonClient(name = "user-provider-metadata",configuration = RibbonConfiguration.class)
public class TestRibbonConfiguration {
}
电影微服务-服务消费者-整合ribbon-使用属性自定义ribbon配置
###==============================使用属性自定义ribbon配置,配置文件配置的方式优先级高于代码编程配置的方式
#格式:RibbonClientName.ribbon.NF*className: classNameImpl (ribbon客户端名称.ribbon.NF*className: NF*classNameImpl)
#RibbonClientName:配置在eureka server的实例,serviceId,若不配置,则对全局client instance有效。
#NF*className: NFLoadBalancerCLassName:配置ILoadBalancer的实现类
#               NFLoadBalancerRuleClassName:配置IRule的实现类
#               NFLoadBalancerPingClassName:配置IPing的实现类
#               NIWSServerListClassName: 配置ServerList的实现类
#               NIWSServerListFilterClassName: 配置ServerListFilter的实现类
#下面是配置实例为user-provider-metadata实例的ribbon负载均衡策略为随机选择实例
user-provider-metadata:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
    #配置请求列表,可以从listOfServers的列表中选择user-provider-metadata的请求。不配置的话所有的user-provider-metadata实例根据负载均衡策略进行请求
    NIWSServerListClassName: com.netflix.loadbalancer.ConfigurationBasedServerList
  listOfServers: localhost:9001,localhost:9000 #user-provider-metadata实例只会从这里选择服务列表

#配置多个ribbon client负载均衡策略
user-provider-metadata1:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

user-provider-metadata2:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule


#对所有的ribbonClient实例使用RandomRule
#ribbon:
#  NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
ribbon:
  eager-load:
    clients: user-provider-metadata,user-provider-metadata2 #饥饿加载的ribbon client
    enabled: true #饥饿加载 默认是false(懒加载,只有在被使用时才执行初始化操作)
1.电影微服务-服务消费者-使用feign调用http api
2.feignClient默认集成了Ribbon,默认负载均衡策略是轮询
电影微服务-自定义feignCLients的configuration
/*
配置注解FeignClient,指定eureka server列表中的服务,这里是用户提供者服务实例名.path(Path prefix)表示的是应用名,可理解成tomcat root path
   里面还有很多参数,简单讲url,url指定服务端地址,这里配合eureka使用,自动从eureka获取服务,可以不写。
configuration:配置自己自定义的feign client
 */
@FeignClient(name = "user-provider",path = "/user-provider",configuration = MyFeignConfiguration.class)
public interface UserFeignClient {

    /*@RequestMapping(value = "/user/{id}",method = RequestMethod.GET)
    User findById(@PathVariable(value = "id") String id);*/

    /**
     * 使用feign自带的注解标识方法 @RequestLine
     * @param id
     * @return
     */
    @RequestLine("GET /user/{id}")
    User findById(@Param("id")String id);
}

/**
 * 该类是自定义的feign配置类,不在springboot扫描的范围内,不然配置类中的
 * feign.Decoder,feign.Encode,feign.Contract等配置会被所有的@feignClient共享。
 * 解决办法:要么不配置@Configuration注解,要么配置类不放在springboot扫描的范围上
 */
//@Configuration
public class MyFeignConfiguration {

    /**
     * 将契约修改成feign原生的默认契约,这样就可以使用feign自带的注解
     * @return 默认的feign契约
     */
    @Bean
    public Contract feignContract(){
        return new Contract.Default();
    }
}
 电影微服务,feign整合hystrix,实现feign回退
@FeignClient(name = "user-provider",path = "/user-provider",fallback = FeignClientFallBack.class)
public interface UserFeignClient {

    @RequestMapping(value = "/user/{id}",method = RequestMethod.GET)
    User findById(@PathVariable(value = "id") String id);

}
@Component
class FeignClientFallBack implements UserFeignClient {
    @Override
    public User findById(String id) {
        User user = new User();
        user.setId(10000L);
        user.setUsername("default_username");
        user.setName("defalut_name");
        user.setAge(0);
        user.setBalance(new BigDecimal(0));
        return user;
    }
}
1.电影微服务-服务消费者-使用feign调用http api,feign整合hystrix,实现feign回退。
2.启动类添加@EnableCircuitBreaker注解或@EnableHystrix(默认开启熔断支持),可以使用/hystrix.stream监控此服务
电影微服务-服务消费者-手动创建feignClient调用http api
hystrix可视化监控hystrix.stream
使用turbine监控多个微服务
1.微服务-网关zuul
2.路由配置见application.yml,需自己动手实践体验,才能理解。
1.微服务网关zuul-自定义zuulfilter
2.注解需细看
微服务网关zuul-zuul的容错与回退
1.springcloud config server 
2.http请求地址和资源文件映射如下:
  • /{application}/{profile}[/{label}]

  • /{application}-{profile}.yml

  • /{label}/{application}-{profile}.yml

  • /{application}-{profile}.properties

  • /{label}/{application}-{profile}.properties

    配置中心

spring cloud config-server

更新中。。。。。。

Releases

No releases published

Packages

No packages published

Languages