天天看點

spring-cloud 微服務建構

提供端:

api:

@FeignClient(value = "${template.feign.client.value}", configuration = SourceTemplateConfiguration.class)

public interface SourceTemplateFeignClient {

    @RequestMapping(value = "/template/manager/detail/1.0", method = RequestMethod.POST)

    Result<SourceTemplateDetailDTO> detailTemplate(@RequestBody SourceTemplateDetailParam param);

}

configuration:

@Configuration

public class SourceTemplateConfiguration {

    @Value("${service.feign.connectTimeout:10000}")

    private int connectTimeout;

    @Value("${service.feign.readTimeOut:60000}")

    private int readTimeout;

    @Bean

    public Request.Options options() {

        return new Request.Options(connectTimeout, readTimeout);

    }

}

啟動類:

加注解@EnableDiscoveryClient

pom:

        <dependency>

            <groupId>com.netflix.hystrix</groupId>

            <artifactId>hystrix-javanica</artifactId>

        </dependency>

        <dependency>

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

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

        </dependency>

        <dependency>

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

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

<version>1.3.0.RELEASE</version>

</dependency>

配置項:

ribbon:

  ReadTimeout: 60000

  ConnectTimeout: 60000

rpc接口(消費端)

@Autowired

    private SourceTemplateFeignClient sourceTemplate;

    @HystrixCommand(commandKey = "detail", commandProperties = { @HystrixProperty(name = "requestCache.enabled", value = "true"),

                                                                 @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "10000") })

    public Result<SourceTemplateDetailDTO> detail(SourceTemplateDetailParam param) {

        return sourceTemplate.detailTemplate(param);

    }

啟動類:

@EnableDiscoveryClient

@EnableEurekaClient

@EnableFeignClients(basePackages = { "xxx" }) // 使用feignclient封裝接口

@ComponentScan(basePackages = { "xxx", "xxx", "xxx" })

配置項:

eureka.client.serviceUrl.defaultZone=http\://url\:8180/eureka/

hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds= 30000

eureka.instance.hostname=xxxx

template.feign.client.value=xxx

pom:

<dependency>

    <groupId>com.netflix.archaius</groupId>

    <artifactId>archaius-core</artifactId>

    <version>0.7.4</version>

</dependency>

        <dependency>

            <groupId>com.netflix.hystrix</groupId>

            <artifactId>hystrix-javanica</artifactId>

<version>1.5.2</version>

        </dependency>

<dependency>

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

<artifactId>spring-cloud-commons</artifactId>

<version>1.2.0.RELEASE</version>

</dependency>

如果遇到無法加載bean類,檢查spring-boot-dependencies版本和spring-cloud是否比對