Fork me on GitHub

SpringCloud

SpringCloud入门


服务注册中心Eureka


引入依赖
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>${spring-cloud.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
配置文件(此处用的是properties)
server:
  port: 1888
eureka:
  client:
    //设置不使用客户度,只用eureka提供服务注册中心
    register-with-eureka: false
    fetch-registry: false
    serviceUrl:
    defaultZone: http://localhost:1888/eureka/

服务提供者provider


引入依赖
同上,配置eureka的maven依赖
配置文件
server:
    port: 1990
//配置注册中心的url,将此服务注册到eureka
eureka:
    client:
        serviceUrl:
            defaultZone: http://127.0.0.1:1888/eureka/
//配置服务的名称
spring:
    application:
        name: provider

服务消费者consumer


引入依赖
同上,配置eureka的maven依赖
配置文件
server:
    port: 1990
//配置注册中心的url,将此服务注册到eureka
eureka:
    client:
        serviceUrl:
            defaultZone: http://127.0.0.1:1888/eureka/
//配置服务的名称
spring:
    application:
        name: consumer

ribbon实现负载均衡


添加依赖
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>
设置restTemplate的负载均衡
@Bean
@LoadBalanced // 注解开启均衡负载能力
public RestTemplate restTemplate(){
    return new RestTemplate();
}
配置文件(配置连接和处理超时)
ribbon:
    //连接超时
    ConnectTimeout: 10000
    //处理超时
    ReadTimeout: 30000

feign默认实现了负载均衡和断路器功能(这里我理解为整合了ribbon,hystrix和restTemplate)


添加依赖
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-feign</artifactId>
</dependency>
feign调用微服务
//配置需要调用的微服务的名称,配置断路器熔断后的默认方法
@FeignClient(value = "provider", fallback = HystrixDemo.class)
public interface FeignClientDemo {
    //配置调用的服务的方法
    @RequestMapping(method = RequestMethod.GET,value = "/plus")
    void plus();
}

//配置熔断的方法
public class HystrixDemo implements FeignClientDemo{
    @Override
    public void plus() {
        System.out.println(999);
        return;
    }
}
配置文件
feign:
    hystrix:
        enabled: true

配置swagger


添加依赖(注:这里如果是2.2以下的版本好像是会出空指针异常的)
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.7.0</version>
</dependency>

<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>2.7.0</version>
</dependency>
swagger配置文件
@Bean
public Docket buildDocket(){
    ParameterBuilder tokenPar = new ParameterBuilder();
    //配置除了参数以外的参数,这里是配置header
    tokenPar.name("X-CURRENT-USER-ID")
            .description("用户id").
            modelRef(new ModelRef("string"))
            .parameterType("header").required(false).build();
    List<Parameter> aParameters = new ArrayList<Parameter>();
    aParameters.add(tokenPar.build());
    return new Docket(DocumentationType.SWAGGER_2)
            .select()
            //配置扫描包
            .apis(RequestHandlerSelectors.basePackage("com.provider.provider.controller"))
            .paths(PathSelectors.any())
            .build()
            //添加设置的参数
            .globalOperationParameters(aParameters)
}

Ps:bootstrap.yml在application.yml之前加载
具体配置demo:https://github.com/fengshiweiit/springCloudStudy