献县网站建设价格,网站功能建设特点,电视云网站建设,电子商城网站建站客OpenFeign介绍OpenFeign是什么1.OpenFeign是个声明式WebService客户端#xff0c;使用OpenFeign让编写Web Service客户端更简单2.它的使用方法是定义一个服务接口然后在上面添加注解3.OpenFeign也支持可拔插式的编码器和解码器4.Spring Cloud对OpenFeign进行了封装使其支持了S…OpenFeign介绍OpenFeign是什么1.OpenFeign是个声明式WebService客户端使用OpenFeign让编写Web Service客户端更简单2.它的使用方法是定义一个服务接口然后在上面添加注解3.OpenFeign也支持可拔插式的编码器和解码器4.Spring Cloud对OpenFeign进行了封装使其支持了Spring MVC标准注解和HttpMessageConverters5.OpenFeign可以与Eureka和Ribbon组合使用以支持负载均衡官网github.com/spring-cloud/spring-cloud-openfeignFeign和OpenFeign区别Feign目前已弃用·Feign是Spring Cloud组件中的一个轻量级RESTful的HTTP服务客户端·Feign内置了Ribbon,用来做客户端负载均衡去调用服务注册中心的服务。·Feign的使用方式是使用Feign的注解定义接口调用服务注册中心的服务·Feign支持的注解和用法请参考官方文档https://github.com/OpenFeign/feign·Feign本身不支持Spring MVC的注解它有一套自己的注解引入依赖dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-feign/artifactId
/dependencyOpenFeign·OpenFeign是Spring Cloud在Feign的基础上支持了Spring MVC的注解如RequesMapping等等。·OpenFeign的FeignClient可以解析SpringMVC的RequestMapping注解下的接口·OpenFeign通过动态代理的方式产生实现类实现类中做负载均衡并调用其他服务精简一句话OpenFeign就是在Feign基础上做了加强有些程序员为了方便说Feign就是指的OpenFeign引入依赖dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-openfeign/artifactId
/dependencyOpenFeign-应用实例对于 获取服务负载均衡远程调用 这样的架构之前用的方案1现在来使用方案2方案1RibbonRestTemplate方案2OpenFeign创建新module: e-commerce-consumer-openfeign-80配置pom.xml文件参考原e-commerce-consumer-80在consumer的pom.xml基础上添加openfeign的依赖 !--引入openfeign场景启动器--dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-openfeign/artifactId/dependency配置application.yml文件server:port: 80 #配置端口
spring:application:name: e-commerce-consumer-openfeign-80 #配置在服务器显示的名字
eureka:client:register-with-eureka: true #将自己注册到服务端fetch-registry: true #从服务端抓取注册列表service-url: #注册到的服务器地址# 使用逗号分隔多个服务器地址defaultZone: http://eureka9001.com:9001/eureka,http://eureka9002.com:9002/eureka4. 创建主启动类EnableEurekaClient 启用Eureka客户端EnableFeignClients 启用OpenFeign客户端SpringBootApplication
EnableEurekaClient
EnableFeignClients
public class MemberConsumeOpenfeignApplication {public static void main(String[] args) {SpringApplication.run(MemberConsumeOpenfeignApplication.class,args);}
}5. 创建Service层接口感觉还是有点绕的理清一下思路。浏览器地址--Consumer(Controller.selectByIdTest-.Service.selectByIdTest-url)--openfeign--Provider(url-Controller.selectById-Service-DAO)这儿作为消费者consumer模块需要去--调用provider的模块需要对面的地址所以有GetMapping(/member/query/{id})要使用而注解下面的方法是给Controller层调用的这儿起到接口的作用来解耦。所以最好就是复制调用对象的方法当然方法名自己可以更改不建议下面加了Test进行测试确认可以更名。所以联系起来就是。Controller调用-Service接口方法通过该方法反射到注解的路径此时Feign来决定调用MEMBER-SERVICE-PROVIDER里面具体哪台服务器起到负载均衡的作用。个人理解这儿的Mapper是被方法所使用的provider的Mapper是用来定位方法的。/*** 1.远程调用的方式是get。跟随引用的provider一致,而它又是根据方法名来选择的比如“get”ForObject()* 2.远程调用url http://MEMBER-SERVICE-PROVIDER/member/get/{id}。* 经测试大小写都能用。无论从Eureka网页复制大写还是pom.xml复制的小写都行* 3.MEMBER-SERVICE-PROVIDER就是服务提供方在Eureka Server注册的服务* 4.openfeign会根据负载均衡来决定调用10000/10002,默认是轮询*/
Component
FeignClient(member-service-provider)
public interface MemberConsumerOpenfeignService {GetMapping(/member/query/{id})public Result selectByIdTest(PathVariable(id)Long id);
}6. 创建Controller/Mapper映射调用Service层RestController。因为返回类型的缘故需要使用Json格式所以使用ResponseBody的组合形式。RestController
public class MemberConsumerOpenfeignController {Resourceprivate MemberConsumerOpenfeignService feignService;GetMapping(/member/feign/query/{id})public Result getResultById(PathVariable Long id){return feignService.selectByIdTest(id);}测试启动各服务浏览器输入http://localhost/member/feign/query/1 。通过刷新查看返回的不同provider确定成功使用。注意事项·配Openfeign的使用特点是微服务调用接口FeignClient,使用接口进行解耦FeignClient(valueMEMBER-SERVICE-PROVIDER),这里MEMBER-SERVICE-PROVIDER就是Eureka提供注册的名称不要写错了·接口方法上value是不能乱写远程调用的url为http://MEMBER-SERVICE-PROVIDER/member/get/{id}GetMapping(value /member/get/(id))
public ResultMembergetMembertByld(PathVariable(id)Long id);OpenFeign日志配置基本介绍说明Feign提供了日志打印功能可以通过配置来调整日志级别从而对Feign接口的调用情况进行监控和输出。也便于调试。2.日志级别NONE:默认的不显示任何日志BASIC:仅记录请求方法、URL、响应状态码及执行时间HEADERS:除了BASIC中定义的信息之外还有请求和响应的头信息FULL:除了HEADERS中定义的信息之外还有请求和响应的正文及元数据。配置日志-应用实例配置类设置日志级别Configuration
public class OpenfeignConfiguration {Beanpublic Logger.Level setLevel(){return Logger.Level.FULL;}
}配置yml常见的日志级别有5种分别是error、warn、info、debug、traceerror:错误日志指比较严重的错误对正常业务有影响需要运维配置监控的warn:警告日志一般的错误对业务影响不大但是需要开发关注info:信息日志记录排查问题的关键信息如调用时间、出参入参等等debug:用于开发DEBUG的关键逻辑里面的运行时数据trace:最详细的信息一般这些信息只记录到日志文件中。注意level下面类的全路径指向Service差点写错了logging:level:com.stein.springcloud.service.MemberConsumerOpenfeignService: debug测试不使用可撤销测试日志配置OpenFeigni超时手动超时默认超过1s返回超时。在两个provider的controller.selectById()添加代码手动设置超时。不能使用线程休眠导致该provider无法使用 try {
// Thread.sleep(2000);TimeUnit.MILLISECONDS.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}设置多久超时在consumer-openfeign的yml设置超时时长ribbon:#1,设置Feign客户端超时时间(openfeign,默认支铆ibbon)#2.ReadTimeout:8000:建立连接从服务提供方获取可用资源的所用的全部时间#3.时间单位是毫秒ReadTimeout: 4000#连接超时时间ConnectionTimeout: 4000测试地址栏输入http://localhost/member/feign/query/1 查看设置前后是否超时。