在spring cloud ribbon中我們用RestTemplate實現(xiàn)了服務(wù)調(diào)用林艘,可以看到我們還是需要配置服務(wù)名稱恃疯,調(diào)用的方法 等等识窿,其實spring cloud提供了更優(yōu)雅的服務(wù)調(diào)用方式,就是這篇文章要講解的spring cloud feign悉稠,feign內(nèi)部已經(jīng)集成了ribbon校焦,所以不用再單獨引用赊抖,只需要引用spring cloud feign即可。
(一) 版本說明
a) Spring boot 2.0.6.RELEASE
b) Spring cloud Finchley.SR2
c) Java version 1.8
(二) 項目配置
1. 服務(wù)端項目配置
a) 服務(wù)端主要是提供服務(wù)功能寨典,這里是把當(dāng)前的端口返回給調(diào)用者氛雪,同時把自己注冊到服務(wù)中心,調(diào)用者通過服務(wù)中心調(diào)用耸成。
b) POM設(shè)置
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
c) 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
d) 主要參數(shù)說明
i. eureka.instance.prefer-ip-address 使用IP顯示注冊信息
ii. eureka.instance.ip-address 實例IP地址报亩,
iii. eureka.instance.instance-id 自定義實例id,服務(wù)之間調(diào)用就是使用該配置墓猎,多個實例必須保證唯一性
iv. eureka.client.service-url.defaultZone 注冊中心地址
e) 服務(wù)提供者API
@Value("${server.port}")
private String getPort;
@GetMapping(name = "index", value = "/index")
public String Index() {
return getPort;
}
- feign消費端項目配置
a) POM設(shè)置
<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. 這里把服務(wù)消費端也注冊到了服務(wù)治理中心,消費者同時也是其它服務(wù)的提供者赚楚。
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服務(wù)消費者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客戶端配置毙沾,這里配置了服務(wù)名稱、重試規(guī)則宠页、失敗回調(diào)左胞。
3. 重點提示
a) 為了演示負載寇仓,3個服務(wù)提供者必須設(shè)置3個不同的端口,并且其它相同烤宙,不然會被認為是不同的服務(wù)遍烦,起不到均衡的作用,這里跟ribbon一樣躺枕。
4. 項目運行
a) 運行服務(wù)提供者
i. 運行3個服務(wù)者實例后服猪,會在服務(wù)中心看到如下效果,服務(wù)提供者已經(jīng)注冊成功
b) feign運行服務(wù)消費者
i. 運行消費者拐云,如下圖所示
c) 打開PostMan罢猪,輸入消費者地址,多刷新幾次叉瘩,即可看到負載效果
這樣spring cloud feign就介紹完了膳帕,如果在開發(fā)中遇到問題,也可以留言共同探討共同進步薇缅。