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

职工之家网站开发新闻稿教育培训机构网站模板

职工之家网站开发新闻稿,教育培训机构网站模板,免费做网站平台,成立公司需要多少费用一、前言 接下来是开展一系列的 SpringCloud 的学习之旅#xff0c;从传统的模块之间调用#xff0c;一步步的升级为 SpringCloud 模块之间的调用#xff0c;此篇文章为第四篇#xff0c;即介绍 Feign 和 OpenFeign 服务接口调用。 二、概述 2.1 Feign 是什么 Feign 是一…一、前言 接下来是开展一系列的 SpringCloud 的学习之旅从传统的模块之间调用一步步的升级为 SpringCloud 模块之间的调用此篇文章为第四篇即介绍 Feign 和 OpenFeign 服务接口调用。 二、概述 2.1 Feign 是什么 Feign 是一个声明式的 Web 服务客户端让编写 Web 服务客户端变得非常容易只需创建一个接口并在接口上添加注解即可。 2.2 Feign 用途 2.2.1 Feign 能干什么 Feign 旨在使编写 Java Http 客户端变得更容易。前面在使用 Ribbon RestTemplate 时利用 RestTemplate 对 http 请求的封装处理形成了一套模版化的调用方法。但是在实际开发中由于对服务依赖的调用可能不止一处往往一个接口会被多处调用所以通常都会针对每个微服务自行封装一些客户端类来包装这些依赖服务的调用。 所以Feign 在此基础上做了进一步封装由他来帮助我们定义和实现依赖服务接口的定义。在 Feign 的实现下我们只需创建一个接口并使用注解的方式来配置它以前是 Dao 接口上面标注 Mapper 注解现在是一个微服务接口上面标注一个 Feign 注解即可即可完成对服务提供方的接口绑定简化了使用 Spring cloud Ribbon 时自动封装服务调用客户端的开发量。 2.2.2 Feign 集成了 Ribbon Feign 集成了 Ribbon 利用 Ribbon 维护了 Payment 的服务列表信息并且通过轮询实现了客户端的负载均衡。而与 Ribbon 不同的是通过 feign 只需要定义服务绑定接口且以声明式的方法优雅而简单的实现了服务调用。 2.3 Feign 和 OpenFeign 区别 Feign 是 Spring Cloud 组件中的一个轻量级 RESTful 的 HTTP 服务客户端Feign 内置了 Ribbon用来做客户端负载均衡去调用服务注册中心的服务。 Feign 的使用方式是使用 Feign 的注解定义接口调用这个接口就可以调用服务注册中心的服务。需要引入的依赖如下 dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-feign/artifactId /dependency OpenFeign 是 Spring Cloud 在 Feign 的基础上支持了 SpringMVC 的注解如 RequesMapping 等等。OpenFeign 的 FeignClient 可以解析 SpringMVC 的 RequestMapping 注解下的接口并通过动态代理的方式产生实现类实现类中做负载均衡并调用其他服务。需要引入的依赖如下 dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-openfeign/artifactId /dependency 三、OpenFeign 使用步骤 3.1 新建工程 新建一个子模块工程 cloud-consumer-feign-order80用于展示 OpenFeign 的使用步骤。 3.2 添加依赖 在 pom.xml 中添加如下的依赖 ?xml version1.0 encodingUTF-8? project xmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersionparentgroupIdcom.springcloud/groupIdartifactIdSpringCloud/artifactIdversion1.0-SNAPSHOT/version/parentartifactIdcloud-consumer-feign-order80/artifactIdpropertiesmaven.compiler.source8/maven.compiler.sourcemaven.compiler.target8/maven.compiler.targetproject.build.sourceEncodingUTF-8/project.build.sourceEncoding/propertiesdependencies!--openfeign--dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-openfeign/artifactId/dependency!--eureka client--dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-netflix-eureka-client/artifactId/dependency!-- 引入自己定义的api通用包可以使用Payment支付Entity --dependencygroupIdcom.springcloud/groupIdartifactIdcloud-api-commons/artifactIdversion${project.version}/version/dependency!--web--dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-actuator/artifactId/dependency!--一般基础通用配置--dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-devtools/artifactIdscoperuntime/scopeoptionaltrue/optional/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdoptionaltrue/optional/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependency/dependencies /project 3.3 添加配置文件 在 application.yml 中添加如下的配置信息 server:port: 80eureka:client:register-with-eureka: falseservice-url:defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/ 3.3 修改启动类 需要在启动类上添加 EnableFeignClients 注解用于开启 OpenFeign 的使用代码如下 package com.springcloud;import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.openfeign.EnableFeignClients;SpringBootApplication // 开启 OpenFeign EnableFeignClients public class OrderFeignMain80 {public static void main(String[] args){SpringApplication.run(OrderFeignMain80.class,args);} } 3.4 创建业务类 创建业务逻辑接口 PaymentFeignService并在接口上添加 FeignClient 注解代码如下所示 package com.springcloud.service;import com.springcloud.entities.CommonResult; import com.springcloud.entities.Payment; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.stereotype.Component; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable;Component // value 值是对外暴露的服务名称 FeignClient(value CLOUD-PAYMENT-SERVICE) public interface PaymentFeignService {GetMapping(value /payment/get/{id})CommonResultPayment getPaymentById(PathVariable(id) Long id);}创建控制层代码 OrderFeignController用于对外提供服务代码如下 package com.springcloud.controller;import com.springcloud.entities.CommonResult; import com.springcloud.entities.Payment; import com.springcloud.service.PaymentFeignService; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController;import javax.annotation.Resource;RestController public class OrderFeignController {Resourceprivate PaymentFeignService paymentFeignService;GetMapping(value /consumer/payment/get/{id})public CommonResultPayment getPaymentById(PathVariable(id) Long id){return paymentFeignService.getPaymentById(id);} } 3.5 测试 分别启动 cloud-eureka-server7001、cloud-eureka-server7002、cloud-provider-payment8001、cloud-provider-payment8002 和 cloud-consumer-feign-order80 模块然后在浏览器输入 http://localhost/consumer/payment/get/1进行测试不断刷新界面如下图可以看到OpenFeign 还默认实现了负载均衡。 3.6 小结 四、OpenFeign 超时控制 4.1 简介 默认 Feign 客户端只等待一秒钟但是服务端处理需要超过 1 秒钟导致 Feign 客户端不想等待了直接返回报错。 4.2 现象演示 在 cloud-provider-payment8001 模块的 PaymentController 中添加一个测试方法如下 GetMapping(value /payment/feign/timeout) public String paymentFeignTimeOut() {System.out.println(*****paymentFeignTimeOut from port: serverPort);//暂停几秒钟线程try { TimeUnit.SECONDS.sleep(3); } catch (InterruptedException e) { e.printStackTrace(); }return serverPort; } 在 cloud-consumer-feign-order80 模块的 PaymentFeignService 中添加一个调用方法代码如下 Component FeignClient(value CLOUD-PAYMENT-SERVICE) public interface PaymentFeignService {GetMapping(value /payment/get/{id})CommonResultPayment getPaymentById(PathVariable(id) Long id);GetMapping(value /payment/feign/timeout)String paymentFeignTimeOut();} 在 cloud-consumer-feign-order80 模块的 OrderFeignController 中添加一个调用方法代码如下 RestController public class OrderFeignController {Resourceprivate PaymentFeignService paymentFeignService;GetMapping(value /consumer/payment/get/{id})public CommonResultPayment getPaymentById(PathVariable(id) Long id){return paymentFeignService.getPaymentById(id);}GetMapping(value /consumer/payment/feign/timeout)public String paymentFeignTimeOut(){return paymentFeignService.paymentFeignTimeOut();} } 分别启动 cloud-eureka-server7001、cloud-eureka-server7002、cloud-provider-payment8001 和 cloud-consumer-feign-order80 服务然后在浏览器输入 http://localhost/consumer/payment/feign/timeout进行测试如下图可以看到出现了超时的错误。 4.3 问题解决 由于 OpenFeign 默认支持 Ribbon所以只需要在 cloud-consumer-feign-order80 模块的 application.yml 中开启并配置 OpenFeign 的客户端超时控制即可如下 # 设置feign客户端超时时间(OpenFeign默认支持ribbon) ribbon:#指的是建立连接所用的时间适用于网络状况正常的情况下,两端连接所用的时间ReadTimeout: 5000#指的是建立连接后从服务器读取到可用资源所用的时间ConnectTimeout: 5000 重启 cloud-consumer-feign-order80 模块重新调用测试的 url 如下图 五、OpenFeign 日志打印功能 5.1 简介 Feign 提供了日志打印功能我们可以通过配置来调整日志级别从而了解 Feign 中 Http 请求的细节。说白了就是对 Feign 接口的调用情况进行监控和输出。 5.2 日志级别 1、NONE默认的不显示任何日志           2、BASIC仅记录请求方法、URL、响应状态码及执行时间           3、HEADERS除了 BASIC 中定义的信息之外还有请求和响应的头信息           4、FULL除了 HEADERS 中定义的信息之外还有请求和响应的正文及元数据。 5.3 配置 在 cloud-consumer-feign-order80 模块中新建一个配置类 FeignConfig 代码如下 package com.springcloud.config;import feign.Logger; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;Configuration public class FeignConfig {BeanLogger.Level feignLoggerLevel() {return Logger.Level.FULL;} }在 application.yml 中配置日志的 Feign 客户端因为 spring 的默认日志级别是 info而 openFegin 打印日志需要 debug所以需要将 spring 日志级别改为 debug在 application.yml 中为了只打印 openFegin 日志可以只将 openFegin 接口的包路径设置为 dubug。 logging:level:# feign日志以什么级别监控哪个接口com.springcloud.service.PaymentFeignService: debug 5.4 测试 随便调用一个测试方法后台输出的日志如下
http://www.ho-use.cn/article/10824204.html

相关文章:

  • 用云空间制作网站百度推广助手手机版
  • 用h5做网站是什么意思深互动平台网站
  • 辛集建设网站用dw怎么做登录页面的网站
  • 济南济南网站建设公司个人网站 名称
  • 广州网站开发定制需要多少钱网页版qq音乐在线登录
  • 信息发布网站推广技巧从化网站建设方案
  • 做一个大型网站番禺人才网官网
  • 电子商务网站建设的作用wordpress留言板代码
  • 网站收缩栏杭州定制网站制作
  • 空间放两个网站vi设计公司简介
  • 百色市右江区了建设局网站麦云短链接
  • 网站建设的总结100字运城哪里做网站
  • 电子商务专业网站设计wordpress登录开发文档
  • 网站主机的类型中国建筑股份有限公司
  • 即墨专业医院网站制作公司wordpress 封禁账号
  • 仿站工具教程昆明网站建设是什么意思
  • 新型h5网站建设贵阳网站开发推荐
  • 凡科网站内容怎么做效果好河北seo
  • 男孩子怎么做网站推广北京网站制作设计与开发服务
  • 一级a做爰片拍网站大庆网站建设公司
  • 济南正宗网站建设报价wordpress网盘搜索引擎插件
  • 阜阳网站制作公司报价什么网站可以发布广告
  • 网站建设内存可以自己企业网站制作
  • 网站模板中文乱码做论坛网站如何赚钱的
  • 如果一个网站没有备案建设管理网站首页
  • 自己怎么做彩票网站吗网站建设流费用
  • 网站短信验证码接口怎么做wordpress上传到服务器发布
  • 电子商务网站建设实训个人总结苏州注册公司网上申请入口
  • 网站怎么加ico中国嘉兴门户网站
  • 营销型网站建设的五力原则新网站如何被快速收录