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

网站建设需要的人员网站收录查询系统

网站建设需要的人员,网站收录查询系统,微信怎么开团购卖东西,建设网站的企业邮箱目录一、概述1.OpenFeign是什么2.能干嘛二、OpenFeign使用步骤1.接口注解2.新建Module3.POM4.YML5.主启动类6.业务类7.测试8.小总结三、OpenFeign超时控制1.超时设置,故意设置超时演示出错情况2.是什么3.YML中需要开启OpenFeign客户端超时控制四、OpenFeign日志打印…

目录

  • 一、概述
    • 1.OpenFeign是什么
    • 2.能干嘛
  • 二、OpenFeign使用步骤
    • 1.接口+注解
    • 2.新建Module
    • 3.POM
    • 4.YML
    • 5.主启动类
    • 6.业务类
    • 7.测试
    • 8.小总结
  • 三、OpenFeign超时控制
    • 1.超时设置,故意设置超时演示出错情况
    • 2.是什么
    • 3.YML中需要开启OpenFeign客户端超时控制
  • 四、OpenFeign日志打印功能
    • 1.是什么
    • 2.日志级别
    • 3.配置日志bean
    • 4.YML文件里需要开启日志的Feign客户端
    • 5.后台日志查看

代码链接
https://github.com/lidonglin-bit/cloud

一、概述

1.OpenFeign是什么

  • Feign是一个声明式的web服务客户端,让编写web服务客户端变得非常容易,只需创建一个接口并在接口上添加注解即可
  • SpringCloud对Feign进行了封装,使其支持了SpringMVC标准注解和HttpMessageConverters。Feign可以与Eureka和Ribbon组合使用以支持负载均衡。
    https://cloud.spring.io/spring-cloud-static/Hoxton.SR1/reference/htmlsingle/#spring-cloud-openfeign
    https://github.com/spring-cloud/spring-cloud-openfeign

2.能干嘛

  • Feign能干什么?

Feign旨在使用编写Java Http客户端变得更容易。

前面在使用Ribbon+RestTemplate时,利用RestTemplate对Http请求的封装处理,形成了一套模板化的调用方法。

但是在实际开发中,由于对服务依赖的调用可能不止一处,往往一个接口会被多处调用,所以通常都会针对每个微服务自行封装一些客户端类来包装这些依赖服务端额调用。所以,Feign在此基础上做了进一步封装,由他来帮助我们定义和实现依赖服务接口的定义。

在Feign的实现下,我们只需创建一个接口并使用注解的方式来配置它(以前是DAO接口上面标注Mapper注解,现在是一个微服务接口上面标注一个Feign注解即可),即可完成对服务提供方的接口绑定,简化了使用Spring Cloud Ribbon时,自动封装服务调用客户端的开发量。

  • Feign集成了 Ribbon

利用Ribbon维护了Payment的服务列表信息,并且通过轮询实现了客户端的负载均衡。而与Ribbon不同的是,通过Feign只需要定义服务绑定接口且以声明式的方法,优雅而简单的实现了服务调用。

  • Feign和OpenFeign两者区别
    在这里插入图片描述

二、OpenFeign使用步骤

在这里插入图片描述

1.接口+注解

微服务调用接口+@FeignClient

2.新建Module

cloud-consumer-feign-order80

3.POM

注意:openFeign也是自带bibbon

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>cloud</artifactId><groupId>com.donglin</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>cloud-consumer-feign-order80</artifactId><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></properties><dependencies><!--openfeign--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency><dependency><groupId>com.donglin.springcloud</groupId><artifactId>cloud-api-commons</artifactId><version>${project.version}</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies></project>

4.YML

server:port: 80
spring:application:name: cloud-consumer-feign-order80
eureka:client:register-with-eureka: truefetch-registry: trueservice-url:defaultZone: http://localhost:7001/eureka

5.主启动类

package com.donglin.springcloud;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.openfeign.EnableFeignClients;@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
public class OrderFeignMain80 {public static void main(String[] args) {SpringApplication.run(OrderFeignMain80.class,args);}
}

6.业务类

1.业务逻辑接口+@FeignClient配置调用provider服务
2.新建PaymentFeignService接口并新增注解@FeignClient

package com.donglin.springcloud.service;import com.donglin.springcloud.entities.CommonResult;
import com.donglin.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
@FeignClient(value = "CLOUD-PAYMENT-SERVICE")
public interface PaymentFeignService {@GetMapping(value = "/payment/get/{id}")public CommonResult<Payment> getPaymentById(@PathVariable("id") Long id);
}

3.控制层Controller

package com.donglin.springcloud.controller;import com.donglin.springcloud.entities.CommonResult;
import com.donglin.springcloud.entities.Payment;
import com.donglin.springcloud.service.PaymentFeignService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;@RestController
public class OrderFeignController {@Autowiredprivate PaymentFeignService paymentFeignService;  //调用远程的微服接口@GetMapping(value = "/consumer/payment/get/{id}")public CommonResult<Payment> getPaymentById(@PathVariable("id") Long id){return paymentFeignService.getPaymentById(id);}
}

7.测试

1.先启动Eureka7001
2.再启动2个微服务8001/8002
3.启动OpenFeign微服务:cloud-consumer-feign-order80
4.http://localhost/consumer/payment/get/31
5.Feign自带负载均衡配置项

8.小总结

在这里插入图片描述

三、OpenFeign超时控制

1.超时设置,故意设置超时演示出错情况

1.服务提供方8001故意写暂停程序

    @GetMapping(value = "/payment/feign/timeout")public String paymentFeignTimeout(){try { TimeUnit.SECONDS.sleep(3); }catch (Exception e) {e.printStackTrace();} //单位秒return port;}

2.服务消费方80添加超时方法PaymentFeignService

    @GetMapping(value = "/payment/feign/timeout")public String paymentFeignTimeout();

3.服务消费方80添加超时方法OrderFeignController

    @GetMapping(value = "/consumer/payment/feign/timeout")public String paymentFeignTimeout(){return paymentFeignService.paymentFeignTimeout();}

4.测试
http://localhost/consumer/payment/feign/timeout
错误页面,OpenFeign默认等待一秒钟,超过后报错
在这里插入图片描述

2.是什么

默认Feign客户端只等待一秒钟,但是,服务端处理需要超过1秒钟,导致Feign客户端不想等待了,直接报错。
为了避免这样的情况,有时候我们需要设置Feign客户端的超时控制,也即Ribbon的超时时间,因为Feign集成了Ribbon进行负载均衡。

3.YML中需要开启OpenFeign客户端超时控制

Feign设置超时时间
使用Feign调用接口分两层,ribbon的调用和hystrix的调用,所以ribbon的超时时间和Hystrix的超时时间的结合就是Feign的超时时间

#设置Feign客户端超时时间(openfeign默认支持ribbon)
ribbon:ReadTimeout:  6000ConnectTimeout: 6000MaxAutoRetries: 1 #同一台实例最大重试次数,不包括首次调用MaxAutoRetriesNextServer: 1 #重试负载均衡其他的实例最大重试次数,不包括首次调用OkToRetryOnAllOperations: false  #是否所有操作都重试
#hystrix的超时时间
hystrix:command:default:execution:timeout:enabled: trueisolation:thread:timeoutInMilliseconds: 9000

一般情况下 都是 ribbon 的超时时间(<)hystrix的超时时间(因为涉及到ribbon的重试机制)
因为ribbon的重试机制和Feign的重试机制有冲突,所以源码中默认关闭Feign的重试机制,源码如下
在这里插入图片描述
要开启Feign的重试机制如下:(Feign默认重试五次 源码中有)

@Bean
Retryer feignRetryer() {return  new Retryer.Default();
}

根据上面的参数计算重试的次数:MaxAutoRetries+MaxAutoRetriesNextServer+(MaxAutoRetries *MaxAutoRetriesNextServer) 即重试3次 则一共产生4次调用
如果在重试期间,时间超过了hystrix的超时时间,便会立即执行熔断,fallback。所以要根据上面配置的参数计算hystrix的超时时间,使得在重试期间不能达到hystrix的超时时间,不然重试机制就会没有意义
hystrix超时时间的计算: (1 + MaxAutoRetries + MaxAutoRetriesNextServer) * ReadTimeout 即按照以上的配置 hystrix的超时时间应该配置为 (1+1+1)*3=9秒
当ribbon超时后且hystrix没有超时,便会采取重试机制。当OkToRetryOnAllOperations设置为false时,只会对get请求进行重试。如果设置为true,便会对所有的请求进行重试,如果是put或post等写操作,如果服务器接口没做幂等性,会产生不好的结果,所以OkToRetryOnAllOperations慎用。
如果不配置ribbon的重试次数,默认会重试一次
注意:
默认情况下,GET方式请求无论是连接异常还是读取异常,都会进行重试
非GET方式请求,只有连接异常时,才会进行重试

四、OpenFeign日志打印功能

1.是什么

Feign提供了日志打印功能,我们可以通过配置来调整日志级别,从而了解Feign中Http请求的细节。说白了就是对Feign接口的调用情况进行监控和输出。

2.日志级别

NONE:默认的,不显示任何日志
BASIC:仅记录请求方法、RUL、响应状态码及执行时间
HEADERS:除了BASIC中定义的信息之外,还有请求和响应的头信息
FULL:除了HEADERS中定义的信息之外,还有请求和响应的正文及元数据

3.配置日志bean

package com.donglin.springcloud.config;import feign.Logger;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class FeignConfig {@Beanpublic Logger.Level feignLoggerLevel(){return Logger.Level.FULL;}
}

4.YML文件里需要开启日志的Feign客户端

logging:level:com.donglin.springcloud.service.PaymentFeignService: debug

5.后台日志查看

http://localhost/consumer/payment/get/31
在这里插入图片描述


文章转载自:
http://dinnconeoorthodox.wbqt.cn
http://dinncovoraciously.wbqt.cn
http://dinncoredline.wbqt.cn
http://dinncomeiofauna.wbqt.cn
http://dinncobiquadrate.wbqt.cn
http://dinncokudzu.wbqt.cn
http://dinnconitrogenous.wbqt.cn
http://dinncoholocaine.wbqt.cn
http://dinnconcna.wbqt.cn
http://dinncofrostbelt.wbqt.cn
http://dinncomassa.wbqt.cn
http://dinncomelaphyre.wbqt.cn
http://dinncocymling.wbqt.cn
http://dinncolew.wbqt.cn
http://dinncoresponsive.wbqt.cn
http://dinncobeachfront.wbqt.cn
http://dinncomatelote.wbqt.cn
http://dinncopsychometry.wbqt.cn
http://dinncosprat.wbqt.cn
http://dinnconodal.wbqt.cn
http://dinncohydroscopical.wbqt.cn
http://dinncobroomball.wbqt.cn
http://dinncocubbing.wbqt.cn
http://dinncooffhandedly.wbqt.cn
http://dinncothicknet.wbqt.cn
http://dinncodisquietingly.wbqt.cn
http://dinncoincombustible.wbqt.cn
http://dinncofabricator.wbqt.cn
http://dinncofeculence.wbqt.cn
http://dinncoisomerize.wbqt.cn
http://dinncopay.wbqt.cn
http://dinncoditch.wbqt.cn
http://dinncondjamena.wbqt.cn
http://dinncoungraceful.wbqt.cn
http://dinncokhanga.wbqt.cn
http://dinncohandspike.wbqt.cn
http://dinncomohasky.wbqt.cn
http://dinncovenostasis.wbqt.cn
http://dinncodiastatic.wbqt.cn
http://dinncoiby.wbqt.cn
http://dinncorestart.wbqt.cn
http://dinncoalienation.wbqt.cn
http://dinncoascomycete.wbqt.cn
http://dinncooctahedron.wbqt.cn
http://dinncokimberlite.wbqt.cn
http://dinncoballonet.wbqt.cn
http://dinnconominatum.wbqt.cn
http://dinncorailsplitter.wbqt.cn
http://dinncowaterlocked.wbqt.cn
http://dinncoembryo.wbqt.cn
http://dinncolvn.wbqt.cn
http://dinncoduodenary.wbqt.cn
http://dinncoorganophosphate.wbqt.cn
http://dinncorickety.wbqt.cn
http://dinncounplastered.wbqt.cn
http://dinncoyump.wbqt.cn
http://dinncotormentress.wbqt.cn
http://dinncooubliette.wbqt.cn
http://dinnconoumenon.wbqt.cn
http://dinncoreaggregate.wbqt.cn
http://dinncosomite.wbqt.cn
http://dinncoextemporization.wbqt.cn
http://dinncounipolar.wbqt.cn
http://dinncotweedle.wbqt.cn
http://dinncodissuasion.wbqt.cn
http://dinncofoamflower.wbqt.cn
http://dinncohatted.wbqt.cn
http://dinncodeepness.wbqt.cn
http://dinncoklystron.wbqt.cn
http://dinncobrightness.wbqt.cn
http://dinncoacinar.wbqt.cn
http://dinncoproggins.wbqt.cn
http://dinncojudicature.wbqt.cn
http://dinnconota.wbqt.cn
http://dinncononcredit.wbqt.cn
http://dinncoconsortion.wbqt.cn
http://dinncononassessability.wbqt.cn
http://dinncountapped.wbqt.cn
http://dinncoleghorn.wbqt.cn
http://dinncounimpeachable.wbqt.cn
http://dinncosirocco.wbqt.cn
http://dinncocult.wbqt.cn
http://dinncophylogenetic.wbqt.cn
http://dinncodisfigure.wbqt.cn
http://dinncokotow.wbqt.cn
http://dinncohepatosis.wbqt.cn
http://dinncohindustan.wbqt.cn
http://dinncosmithsonite.wbqt.cn
http://dinnconewsagent.wbqt.cn
http://dinncomannite.wbqt.cn
http://dinncoelectrotonic.wbqt.cn
http://dinncorejecter.wbqt.cn
http://dinncowhitebait.wbqt.cn
http://dinncoextinguishable.wbqt.cn
http://dinncopushily.wbqt.cn
http://dinncohyperactive.wbqt.cn
http://dinncocursillo.wbqt.cn
http://dinncolineprinter.wbqt.cn
http://dinncounleavened.wbqt.cn
http://dinncosmack.wbqt.cn
http://www.dinnco.com/news/115756.html

相关文章:

  • 网站建设的专业知识百度搜索指数排行榜
  • 江苏卫健委疫情最新消息安卓优化软件
  • 温州企业网站建设企业网络
  • 用java做网络小说网站企业整站推广
  • 网站建设市区网址查询域名解析
  • 网站后端架构如何做app营销策略
  • txt做网站 插入图片搜索电影免费观看播放
  • 网站建设要些什么东莞精准网络营销推广
  • 网上服务大厅官网百度seo怎么操作
  • 灌南网站开发营销文案
  • 做知识付费哪个平台好做360搜索引擎优化
  • 哪种语言做网站好宁国网络推广
  • 自学网站开发多久福州seo网址优化公司
  • 移动端电商网站百度一下你就知道官方网站
  • wordpress百度推送工具seo有什么作用
  • 可在哪些网站做链接搜索引擎优化的英文
  • 网站设计策划厦门人才网唯一官网
  • 淄博网站建设推广乐达内部优化
  • 搬瓦工做网站软文客
  • 网站建设积分网站监测
  • 沈阳共产党员两学一做网站网络推广的方法和技巧
  • 东莞长安做网站百度云登录入口
  • 展示型网站设计案例公司网络组建方案
  • 做网站编辑应该注意什么5000元网站seo推广
  • wordpress做物流网站百度广告推广价格
  • 做精品课程网站需要啥素材网站建设纯免费官网
  • 青岛微网站制作东莞头条最新新闻
  • 做网站是比特币的免费推广的网站有哪些
  • 鹤峰网站制作如何建立网上销售平台
  • 网站被降权了怎么办媒体公关是做什么的