写点什么

springcloud 实战:服务间通信—,java 系统开发教程

用户头像
极客good
关注
发布于: 刚刚

由于每个工程的基础包名都不一致,如 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 工程的控制器提供的接口一致(参数名、返回值和


【一线大厂Java面试题解析+核心总结学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 免费领取
复制代码


接口地址)即可,需要注意的是,@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)


public interface TestServiceFeign {

用户头像

极客good

关注

还未添加个人签名 2021.03.18 加入

还未添加个人简介

评论

发布
暂无评论
springcloud实战:服务间通信—,java系统开发教程