微服務架構之spring cloud feign

在spring cloud ribbon中咱們用RestTemplate實現了服務調用,能夠看到咱們仍是須要配置服務名稱,調用的方法 等等,其實spring cloud提供了更優雅的服務調用方式,就是這篇文章要講解的spring cloud feign,feign內部已經集成了ribbon,因此不用再單獨引用,只須要引用spring cloud feign便可。spring

(一) 版本說明app

a) Spring boot 2.0.6.RELEASEide

b) Spring cloud Finchley.SR2fetch

c) Java version 1.8url

(二) 項目配置spa

1. 服務端項目配置code

a) 服務端主要是提供服務功能,這裏是把當前的端口返回給調用者,同時把本身註冊到服務中心,調用者經過服務中心調用。server

b) POM設置blog

<dependency>

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

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

</dependency>

c) application.yml配置文件ip

eureka: datacenter: ctm environment: dev instance: hostname: 192.168.1.78 prefer-ip-address: true ip-address: 192.168.1.129 lease-renewal-interval-in-seconds: 10 lease-expiration-duration-in-seconds: 30 instance-id: ${eureka.instance.ip-address}:${server.port} client: service-url: defaultZone: http://${eureka.instance.hostname}:1001/eureka/,http://${eureka.instance.hostname}:1002/eureka/,http://${eureka.instance.hostname}:1003/eureka/ fetch-registry: true register-with-eureka: true healthcheck: enabled: true

d) 主要參數說明

i. eureka.instance.prefer-ip-address 使用IP顯示註冊信息

ii. eureka.instance.ip-address 實例IP地址,

iii. eureka.instance.instance-id 自定義實例id,服務之間調用就是使用該配置,多個實例必須保證惟一性

iv. eureka.client.service-url.defaultZone 註冊中心地址

e) 服務提供者API

@Value("${server.port}") private String getPort; @GetMapping(name = "index", value = "/index") public String Index() { return getPort; }

2. feign消費端項目配置

a) POM設置

<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-feign</artifactId>

</dependency>

i. 這裏把服務消費端也註冊到了服務治理中心,消費者同時也是其它服務的提供者。

b) application.yml配置文件

eureka: datacenter: ctm environment: dev instance: hostname: 192.168.1.78 prefer-ip-address: true ip-address: 192.168.1.129 lease-renewal-interval-in-seconds: 10 lease-expiration-duration-in-seconds: 30 instance-id: ${eureka.instance.ip-address}:${server.port} client: service-url: defaultZone: http://${eureka.instance.hostname}:1001/eureka/,http://${eureka.instance.hostname}:1002/eureka/,http://${eureka.instance.hostname}:1003/eureka/ fetch-registry: true register-with-eureka: true healthcheck: enabled: true

c) feign服務消費者API

@Configuration public class FeignConfig { @Bean public Retryer feignRetryer(){ return new Retryer.Default(100, TimeUnit.SECONDS.toMillis(1),3); } } @Component public class FallBackService implements FeignService { @Override public String Index() { return "hi,feign,error!"; } } @Component @FeignClient(name = "DEMOSERVICEIMPL",configuration = FeignConfig.class,fallback = FallBackService.class) public interface FeignService { @GetMapping(value = "/index") String Index(); }

i. FeignClient feign客戶端配置,這裏配置了服務名稱、重試規則、失敗回調。

3. 重點提示

a) 爲了演示負載,3個服務提供者必須設置3個不一樣的端口,而且其它相同,否則會被認爲是不一樣的服務,起不到均衡的做用,這裏跟ribbon同樣

4. 項目運行

a) 運行服務提供者

i. 運行3個服務者實例後,會在服務中心看到以下效果,服務提供者已經註冊成功

image

b) feign運行服務消費者

i. 運行消費者,以下圖所示

clip_image004

c) 打開PostMan,輸入消費者地址,多刷新幾回,便可看到負載效果

clip_image006

clip_image007clip_image008

  這樣spring cloud feign就介紹完了,若是在開發中遇到問題,也能夠留言共同探討共同進步。

相關文章
相關標籤/搜索