由于每个工程的基础包名都不一致,如user 工程包名为com.lynn.blog.user,public工程包名为com.lynn.blog.pub,这里需要指定basePackages为 com. lynn.blog,以保证Spring容器可以扫描到OpenFeign注入的类(如果不指定basePackages,则默认扫描加入该注解的类所在包及其子包)。
(3)创建TestserviceFeign接口,并编写以下代码:
@FeignClient(value = “test”)
public interface TestServiceFeign {
@RequestMapping(“/test”)
String test();
}
其中,@Feignclient(“test”)表示该接口是一个OpenFeign的HTTP客户端,注解内指定服务名,本示例指定test,即 test工程下spring.application.name配置的值。接口定义只需和 test工程的控制器提供的接口一致(参数名、返回值和接口地址)即可,需要注意的是,@RequestMapping指定的地址为接口地址全路径。
(4)创建控制器验证 OpenFeign的正确性。
@RequestMapping(“feign”)
@RestController
public class TestControllerFeign {
@Autowired
TestServiceFeign testServiceFeign;@RequestMapping( “test”)
private String test(){
return testServiceFeign.test();
}
}
(5)重启 comment工程,浏览器多次访问地址 http://localhost:8203/feign/test,可以看到分别打印了9999和9998端口。
通过上述示例,我们发现 OpenFeign 使代码变得更加优雅,无须使用 RestTemplate 显式地调用HTTP服务,只需要指定想要调用的服务名即可。由于OpenFeign 内部集成了Ribbon,所以它也默认拥有了负载均衡能力。
自定义OpenFeign 配置
===============
OpenFeign提供了默认的配置类FeignclientsConfiguration,该类使用了默认的编码器( encoder )、解码器( decoder )、合约( contract)等。因为OpenFeign 的核心是HTTP客户端,HTTP传输是通过数据包(流)进行的,所以在发送请求、接受响应的过程中,有必要对数据进行编码和解码。而OpenFeign默认使用的合约是SpringMvcContrace,它表示OpenFeign可以使用Spring MVC的注解,即上一节代码编写的@RequestMapping。
Spring Cloud OpenFeign 允许通过@Feignclient注解的configuration属性编写自定义配置,自定义配置会覆盖默认的配置。
接下来,我们以覆盖合约为例,讲解自定义配置的编写。
创建一个 OpenFeign的配置类MyFeignconfiguration,其代码如下:
@SpringBootConfiguration
public class MyFeignConfiguration {
@Bean
public Contract feigncontract()i
return new feign.contract.Default();
}
}
上述代码定义了一个Bean方法,返回Contract,即 OpenFeign合约,该合约返回的是OpenFeign的默认合约,这样我们就可以使用OpenFeign的注解而不用Spring MVC注解。
修改TestServiceFeign接口,将@RequestMapping 注解替换成@RequestLine 注解,并通过configuration属性指定自定义配置,如:
@Feignclient(value = “test”,fallback = TestserviceErrorFeign.class,configuration =
MyFeignConfiguration.class)
结语
小编也是很有感触,如果一直都是在中小公司,没有接触过大型的互联网架构设计的话,只靠自己看书去提升可能一辈子都很难达到高级架构师的技术和认知高度。向厉害的人去学习是最有效减少时间摸索、精力浪费的方式。
我们选择的这个行业就一直要持续的学习,又很吃青春饭。
虽然大家可能经常见到说程序员年薪几十万,但这样的人毕竟不是大部份,要么是有名校光环,要么是在阿里华为这样的大企业。年龄一大,更有可能被裁。
送给每一位想学习Java小伙伴,用来提升自己。
本文到这里就结束了,喜欢的朋友可以帮忙点赞和评论一下,感谢支持!
名校光环,要么是在阿里华为这样的大企业。年龄一大,更有可能被裁。
送给每一位想学习Java小伙伴,用来提升自己。
[外链图片转存中…(img-sySLLvS8-1714468751238)]
本文到这里就结束了,喜欢的朋友可以帮忙点赞和评论一下,感谢支持!