使用Feign可以完成服務(wù)間調(diào)用,但是總存在一種情況:服務(wù)提供方?jīng)]有注冊(cè)到注冊(cè)中心、服務(wù)提供方還沒(méi)開(kāi)發(fā)完成(因此也就無(wú)法調(diào)用)等等。此時(shí)如果我們需要完成服務(wù)之間調(diào)用該如何做呢?
Feign提供了fallback機(jī)制,也就是當(dāng)對(duì)方服務(wù)還沒(méi)ready(一般情況是服務(wù)提供方在注冊(cè)中心上沒(méi)有可用的實(shí)例),可以返回一些信息供服務(wù)進(jìn)行下,也就是服務(wù)降級(jí)。
openFeign特性
1、實(shí)現(xiàn)服務(wù)之間的調(diào)用,并且底層封裝了ribbon插件,可以實(shí)現(xiàn)負(fù)載均衡
2、可以實(shí)現(xiàn)服務(wù)降級(jí)
服務(wù)搭建
- 添加依賴包
<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、請(qǐng)求方:
@Bean
@ConditionalOnMissingBean
public HttpMessageConverters messageConverters(ObjectProvider<HttpMessageConverter<?>> converters) {
return new HttpMessageConverters(converters.orderedStream().collect(Collectors.toList()));
}
5、請(qǐng)求測(cè)試
@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);
}