使用Feign可以完成服務間調用,但是總存在一種情況:服務提供方沒有注冊到注冊中心、服務提供方還沒開發完成(因此也就無法調用)等等。此時如果我們需要完成服務之間調用該如何做呢?
Feign提供了fallback機制,也就是當對方服務還沒ready(一般情況是服務提供方在注冊中心上沒有可用的實例),可以返回一些信息供服務進行下,也就是服務降級。
openFeign特性
1、實現服務之間的調用,并且底層封裝了ribbon插件,可以實現負載均衡
2、可以實現服務降級
服務搭建
- 添加依賴包
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-openfeign-core</artifactId>
</dependency>
2、
@FeignClient(contextId = "remoteAdminOutService", value = ServiceNameConstants.VIDEO_GATEWAY_ADMIN_OUT
, fallbackFactory = RemoteAdminOutFallbackFactory.class)
public interface RemoteAdminOutService {
}
3、
@Component
@Slf4j
public class RemoteAdminOutFallbackFactory implements FallbackFactory<RemoteAdminOutService> {
@Override
public RemoteAdminOutService create(Throwable throwable) {
return null;
}
}
4、請求方:
@Bean
@ConditionalOnMissingBean
public HttpMessageConverters messageConverters(ObjectProvider<HttpMessageConverter<?>> converters) {
return new HttpMessageConverters(converters.orderedStream().collect(Collectors.toList()));
}
5、請求測試
@GetMApping("test1")
public void test1() {
ResponseEntity<String> forEntity = restTemplate.getForEntity("http://video-gateway-dispose-inner/test1", String.class);
log.info("test1 ---- {}", forEntity.getBody());
String test = remoteDisposeInnerService.test();
System.out.println(test);
}