当前位置: 首页 > news >正文

宁波网站推广网站优化深圳家具网站建设

宁波网站推广网站优化,深圳家具网站建设,深圳网络营销招聘,宁波seo网络推广渠道介绍前提介绍 Feign是SpringCloud中服务消费端的调用框架#xff0c;通常与ribbon#xff0c;hystrix等组合使用。由于遗留原因#xff0c;某些项目中#xff0c;整个系统并不是SpringCloud项目#xff0c;甚至不是Spring项目#xff0c;而使用者关注的重点仅仅是简化http调…前提介绍 Feign是SpringCloud中服务消费端的调用框架通常与ribbonhystrix等组合使用。由于遗留原因某些项目中整个系统并不是SpringCloud项目甚至不是Spring项目而使用者关注的重点仅仅是简化http调用代码的编写。*如果采用httpclient或者okhttp这样相对较重的框架对初学者来说编码量与学习曲线都会是一个挑战而使用spring中RestTemplate又没有配置化的解决方案由此想到是否可以脱离Spring cloud独立使用Feign。 内容简介 Feign使得 Java HTTP 客户端编写更方便。Feign 灵感来源于Retrofit、JAXRS-2.0和WebSocket。Feign最初是为了降低统一绑定Denominator到HTTP API的复杂度不区分是否支持Restful。Feign旨在通过最少的资源和代码来实现和HTTP API的连接。通过可定制的解码器和错误处理可以编写任意的HTTP API。 maven依赖 dependencygroupIdcom.netflix.feigngroupIdartifactIdfeign-coreartifactIdversion8.18.0versiondependencydependencygroupIdcom.netflix.feigngroupIdartifactIdfeign-jacksonartifactIdversion8.18.0versiondependencydependencygroupIdio.github.lukehutchgroupIdartifactIdfast-classpath-scannerartifactIdversion2.18.1versiondependencydependencygroupIdcom.netflix.feigngroupIdartifactIdfeign-jacksonartifactIdversion8.18.0versiondependency 复制代码定义配置类 RemoteService service Feign.builder().options(new Options(1000, 3500)).retryer(new Retryer.Default(5000, 5000, 3)).encoder(new JacksonEncoder()).decoder(new JacksonDecoder()).target(RemoteService.class, http://127.0.0.1:8085); 复制代码options方法指定连接超时时长及响应超时时长retryer方法指定重试策略target方法绑定接口与服务端地址。返回类型为绑定的接口类型。 自定义接口 随机定义一个远程调用的服务接口并且声明相关的接口参数和请求地址。 通过RequestLine指定HTTP协议及URL地址 public class User{String userName; }public interface RemoteService {User getOwner(User user);public User getOwner( User user,String requestToken,Long userId,String userName); } 复制代码服务提供者 import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody;public class UserController {public User list( User user) throws InterruptedException{System.out.println(user.getUsername());user.setId(100L);user.setUsername(user.getUsername().toUpperCase());return user;} } 复制代码调用 与调用本地方法相同的方式调用feign包装的接口直接获取远程服务提供的返回值。 String result service.getOwner(new User(scott)); 复制代码原生Feign的两个问题 原生Feign只能一次解析一个接口生成对应的请求代理对象如果一个包里有多个调用接口就要多次解析非常麻烦。Feign生成的调用代理只是一个普通对象该如何注册到Spring中以便于我们可以使用Autowired随时注入。 解决方案 针对多次解析的问题可以通过指定扫描包路径然后对包中的类依次解析。实现BeanFactoryPostProcessor接口扩展Spring容器功能。 定义一个注解类 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;public FeignApi {String serviceUrl(); } 复制代码生成Feign代理并注册到Spring实现类 import feign.Feign; import feign.Request; import feign.Retryer; import feign.jackson.JacksonDecoder; import feign.jackson.JacksonEncoder; import io.github.lukehutch.fastclasspathscanner.FastClasspathScanner; import io.github.lukehutch.fastclasspathscanner.scanner.ScanResult; import org.springframework.beans.factory.config.BeanFactoryPostProcessor; import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; import org.springframework.stereotype.Component; import java.util.List;public class FeignClientRegister implements BeanFactoryPostProcessor{private String scanPathcom.xxx.api;public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) {List classes scan(scanPath);if(classesnull){return ;}System.out.println(classes);Feign.Builder builder getFeignBuilder();if(classes.size()0){for (String claz : classes) {Class targetClass null;try {targetClass Class.forName(claz);String urltargetClass.getAnnotation(FeignApi.class).serviceUrl();if(url.indexOf(http://)!0){urlhttp://url;}Object target builder.target(targetClass, url);beanFactory.registerSingleton(targetClass.getName(), target);} catch (Exception e) {throw new RuntimeException(e.getMessage());}}}}public Feign.Builder getFeignBuilder(){Feign.Builder builder Feign.builder().encoder(new JacksonEncoder()).decoder(new JacksonDecoder()).options(new Request.Options(1000, 3500)).retryer(new Retryer.Default(5000, 5000, 3));return builder;}public List scan(String path){ScanResult result new FastClasspathScanner(path).matchClassesWithAnnotation(FeignApi.class, (Class aClass) - {}).scan();if(result!null){return result.getNamesOfAllInterfaceClasses();}return null;} } 复制代码调用接口编写示例 import com.xiaokong.core.base.Result; import com.xiaokong.domain.DO.DeptRoom; import feign.Headers; import feign.Param; import feign.RequestLine; import com.xiaokong.register.FeignApi;import java.util.List;public interface RoomApi {Result selectById( String id);Result selectList(); } 复制代码接口使用示例 public class ServiceImpl{private RoomApi roomApi;public void demo(){Result result roomApi.selectById(1);System.out.println(result);} } 复制代码注意事项 如果接口返回的是一个复杂的嵌套对象那么一定要明确的指定泛型因为Feign在解析复杂对象的时候需要通过反射获取接口返回对象内部的泛型类型才能正确使用Jackson解析。如果不明确的指明类型Jackson会将json对象转换成一个LinkedHashMap类型。如果你使用的是的Spring又需要通过http调用别人的接口都可以使用这个工具来简化调用与解析的操作。 分享资源 获取以上资源请访问开源项目 点击跳转
http://www.pierceye.com/news/839415/

相关文章:

  • 重庆专业网站建设公司哪家好seo的中文意思是什么
  • 做品牌折扣微信推广的网站网站换主机换域名
  • 营销型网站有哪些建设流程怎样制作免费的网站
  • 天津建设工程计价网站手工加工网
  • 温州做美食网站网站建设的方案模板下载
  • 如何快速网站备案以用户为中心 建设学校网站
  • 宣传型网站有哪些宁波建设信息港网站
  • php网站开发是做什么的phpcms v9企业网站模板(简洁利于优化)
  • 什么是网站和网页wordpress启用插件出错
  • asp网站制作工具怎么样做国际网站生意
  • 签订网站建设合同山东建设工程招标网官方网站
  • 迅速建设企业网站外贸网站服务器选择
  • 建设网站详细流程wordpress建站数据库
  • 贵阳建立网站聊城网站建设设计
  • 网站怎么设置关键词百度网址大全首页设为首页
  • 中企动力网站怎么样怎么做公司内网网站
  • 求职网站网页模板一个网站可以做多少个小程序
  • 深圳市住房和建设局网站登录怎样在百度建网站
  • 外国做视频在线观看网站asp简单网站开发
  • 介绍移动互联网的网站有哪些做网站时怎么选择数据库类型
  • 工厂的网站在哪里做的免费建站的软件
  • 中国电子系统建设三公司网站网站建设上如何提高市场竞争力
  • 青海住房和建设厅网站电子商务网站建设与管理教案
  • 免费在线自助建站搬瓦工可以长期做网站
  • 建设外贸网站报价外贸网站制作推广公司
  • 网站开发人员工作内容白沟做网站
  • 产品展示网站模板源码产品宣传
  • 国内wordpress有名的网站河南住房和城乡建设厅网站资质
  • 湛江seo建站wordpress5.1更新
  • 泊头公司做网站做网站价格差异很大