本文采用Spring cloud本文爲2.1.8RELEASE,version=Greenwich.SR3 java
本文基於前兩篇文章eureka-server和eureka-client的實現。 參考git
eureka-servergithub
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
複製代碼
spring:
application:
name: eureka-feign
server:
port: 8601
eureka:
instance:
hostname: localhost
lease-renewal-interval-in-seconds: 5
lease-expiration-duration-in-seconds: 10
client:
service-url:
defaultZone: http://eureka1.server.com:8701/eureka/,http://eureka2.server.com:8702/eureka/,http://eureka3.server.com:8703/eureka/
複製代碼
package spring.cloud.demo.eurekafeign;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.hystrix.EnableHystrix;
import org.springframework.cloud.openfeign.EnableFeignClients;
@EnableDiscoveryClient
@EnableFeignClients
@SpringBootApplication
public class EurekaFeignApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaFeignApplication.class, args);
}
}
複製代碼
@EnableDiscoveryClient:這裏使用EnableDiscoveryClient註解,在eureka-client已說明,這邊就不在闡述spring
@EnableFeignClients:啓用Feign客戶端瀏覽器
package spring.cloud.demo.eurekafeign.service;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;
/** * @auther: maomao * @DateT: 2019-09-17 */
@FeignClient(value = "eureka-client")
public interface EurekaFeignService {
@RequestMapping(value = "/info")
String syaHello();
}
複製代碼
@FeignClient:定義Feign客戶端,調用遠程client。eureka-client表明client的spring.application.name,調用遠程地址示例:http://eureka-client/info網絡
package spring.cloud.demo.eurekafeign.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import spring.cloud.demo.eurekafeign.service.EurekaFeignService;
import javax.annotation.Resource;
/** * @auther: maomao * @DateT: 2019-09-17 */
@RestController
@RequestMapping("/feign")
public class EurekaFeignController {
@Resource
private EurekaFeignService eurekaFeignService;
@RequestMapping("/sayHello")
public String sayHello() {
return "feign result: " + eurekaFeignService.syaHello();
}
}
複製代碼
能夠在eureka-server服務註冊中心看到eureka-feign是否註冊成功。app
紅框中內容表明eureka-feign已經正常啓動併成功註冊到eureka-server服務註冊中心。負載均衡
訪問http://localhost:8601/feign/sayHello,顯示以下:分佈式
Feign默認的負載均衡策略是輪詢方式。若是想修改Feign的負載均衡策略請參考eureka-ribbon中的配置
至此,一個簡單的單機Feign服務消費者工程就搭建完成了。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
複製代碼
feign:
hystrix:
enabled: true
複製代碼
在@FeignClient註解中增長fallback
package spring.cloud.demo.eurekafeign.service;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;
/** * @auther: maomao * @DateT: 2019-09-17 */
@FeignClient(value = "eureka-client", fallback = EurekaFeignServiceFailure.class)
public interface EurekaFeignService {
@RequestMapping(value = "/info")
String syaHello();
}
複製代碼
增長EurekaFeignServiceFailure類:
package spring.cloud.demo.eurekafeign.service;
import org.springframework.stereotype.Service;
/** * @auther: maomao * @DateT: 2019-09-17 */
@Service
public class EurekaFeignServiceFailure implements EurekaFeignService {
@Override
public String syaHello() {
return "網絡繁忙,請稍後在試";
}
}
複製代碼
首先在eureka-client全不啓動的狀況,訪問http://localhost:8601/feign/sayHello看是否全不正常,而後停掉其中一個eureka-client,在屢次刷新http://localhost:8601/feign/sayHello,顯示以下:
至此,Feign集成Hystrix熔斷機制所有完成。
本文主要簡單實現了feign做爲服務消費的簡單應用和Hystrix的集成。
轉載請註明出處,