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

做分销网站真正免费的网站建站平台

做分销网站,真正免费的网站建站平台,泰安电视台在线直播,创建网站站点代码地址&#xff1a;springcloud系列: springcloud 组件分析拆解 1.FeignClient的集成 springboot版本&#xff1a;3.1.5 springcloud组件版本&#xff1a;2022.0.4 nacos客户端的版本&#xff1a;2.3.2 1.引pom 这里引入了nacos和feginclient的版本 <dependency>…

代码地址:springcloud系列: springcloud 组件分析拆解

1.FeignClient的集成

springboot版本:3.1.5

springcloud组件版本:2022.0.4

nacos客户端的版本:2.3.2

1.引pom

这里引入了nacos和feginclient的版本

            <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><!--openfeign--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency><!--nacos-discovery--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId></dependency>

2.加注解

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class UserServiceApplication {public static void main(String[] args) {SpringApplication.run(UserServiceApplication.class, args);}}

3.使用

feignclient支持按照springmvc的框架,按照mvc的接口形式,将接口通过代理的方式解析成httpclient,发送请求。

一个最简单的使用示例

我现在有一个用户服务和一个订单服务,需要用户通过订单号查询订单

定一个FeginClient

@FeignClient(name = "order-service")
public interface UserFeignClient {@GetMapping("order/get")String  get(@RequestParam String orderNo);}

@Feginclient 注解

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//package org.springframework.cloud.openfeign;import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.springframework.core.annotation.AliasFor;@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface FeignClient {@AliasFor("name")String value() default "";/** @deprecated */@DeprecatedString serviceId() default "";@AliasFor("value")String name() default "";String qualifier() default "";String url() default "";boolean decode404() default false;Class<?>[] configuration() default {};Class<?> fallback() default void.class;Class<?> fallbackFactory() default void.class;String path() default "";boolean primary() default true;
}

参数详细说明

url:目标服务的基础url

value:同name属性,指定Feign客户端的名称。当两者都存在时,value优先级高于name

path:客户端接口中所有方法的基础路径前缀,如果不设置,默认为空字符串。

configuration:指定一个或多个配置类,这些配置类可以用来定制Feign的行为,比如设置日志级别、错误解码器等。

decode404:布尔值,默认为false。如果设为true,Feign会在接收到404响应时尝试解码响应体,而不是抛出异常。

fallback 和 fallbackFactory:分别用于指定回退类和回退工厂类,当远程服务调用失败时,提供降级逻辑。

在订单服务定义一个接口

@GetMapping("order/get")public String get(@RequestParam String orderNo) {try {System.out.println("开始休眠");Thread.sleep(6000);System.out.println("休眠结束");} catch (Exception e) {}System.out.println(orderNo);return "ok";}

在用户服务发起请求

    @Resourceprivate UserFeginClient userFeginClient;@GetMapping("test")public String get() {userFeginClient.get("sdfdsf");return "test";}

在实际项目中,定义client分为两种情况

1.内部服务的调用。这种情况feginclient会将代码写字自己对应的服务种,提供api模供项目内部的服务去依赖。

2.调用外部的接口

调用外部的接口,可以将外部接口理解为普通的http请求即可,在自己的服务内部定义feginclient,按照springmvc的接口定义即可

使用feignclient注意事项

1.feignclient对于get请求,不支持使用对象的传参

使用对象传参会默认解析为post请求,会抛异常405状态码,不支持的请求

4.feignclient的超时时间配置

1.超时时间概念

1.连接超时

客户端和服务端之间建立tcp连接的时间,一般很短

2.读取超时时间

服务端接收到请求,执行自己的业务,加入在指定时间内服务端没有返回,将超时

2.支持全局的和局部client的超时时间配置

示例:

   # application.yml 示例feign:client:config:default:          # 默认配置,适用于所有Feign客户端connectTimeout: 5000  # 连接超时时间,单位为毫秒readTimeout: 5000    # 读取超时时间,单位为毫秒

在application.properties中:

   # application.properties 示例feign.client.config.default.connectTimeout=5000feign.client.config.default.readTimeout=5000

真的特定的client超时间配置

   feign:client:config:myCustomClient:    # 替换为你的Feign客户端接口名connectTimeout: 8000readTimeout: 6000

5.openfeign 的重试机制

openfeign默认是不走重试机制的

配置重试:

@Configuration
public class FeignConfig {@Beanpublic Retryer myRetryer() {//默认不开启重试 NEVER_RETRY//最大请求次数// 100 失败多少毫秒之后执行  1最大间隔   1秒 一秒一次   //最大重复次数3次(1+2) 第一次请求+重试两次return new Retryer.Default(100, 1, 3);}
}

代码验证

controller

 @Resourceprivate OrderClient orderClient;@RequestMapping("getUser")public String  getUser() {var user = new UserVo();user.setName("test");user.setPassword("123456");var l1 = System.currentTimeMillis();System.out.println("调用开始---------------");try {orderClient.getOrder();}catch (Exception e){}var l = System.currentTimeMillis();System.out.println("调用结束----------------"+(l-l1)/1000+"s");return "feign调用 订单服务success";}

配置文件

server:port: 8080spring:application:name: user-service1cloud:openfeign:client:config:default:#连接超时时间connectTimeout: 2000#读取超时时间readTimeout: 4000

 日志

调用开始---------------
2024-07-06T15:52:13.392+08:00  INFO 22140 --- [nio-8080-exec-1] com.alibaba.nacos.client.naming          : [SUBSCRIBE-SERVICE] service:order-service, group:DEFAULT_GROUP, clusters: 
2024-07-06T15:52:13.400+08:00  INFO 22140 --- [nio-8080-exec-1] com.alibaba.nacos.client.naming          : init new ips(1) service: DEFAULT_GROUP@@order-service -> [{"instanceId":"192.168.137.1#8081#DEFAULT#DEFAULT_GROUP@@order-service","ip":"192.168.137.1","port":8081,"weight":1.0,"healthy":true,"enabled":true,"ephemeral":true,"clusterName":"DEFAULT","serviceName":"DEFAULT_GROUP@@order-service","metadata":{"preserved.register.source":"SPRING_CLOUD","IPv6":"[2408:8220:364:ddc1:82a:8136:409c:ca0a]"},"ipDeleteTimeout":30000,"instanceHeartBeatInterval":5000,"instanceHeartBeatTimeOut":15000}]
2024-07-06T15:52:13.414+08:00  INFO 22140 --- [nio-8080-exec-1] com.alibaba.nacos.client.naming          : current ips:(1) service: DEFAULT_GROUP@@order-service -> [{"instanceId":"192.168.137.1#8081#DEFAULT#DEFAULT_GROUP@@order-service","ip":"192.168.137.1","port":8081,"weight":1.0,"healthy":true,"enabled":true,"ephemeral":true,"clusterName":"DEFAULT","serviceName":"DEFAULT_GROUP@@order-service","metadata":{"preserved.register.source":"SPRING_CLOUD","IPv6":"[2408:8220:364:ddc1:82a:8136:409c:ca0a]"},"ipDeleteTimeout":30000,"instanceHeartBeatInterval":5000,"instanceHeartBeatTimeOut":15000}]
2024-07-06T15:52:13.966+08:00  INFO 22140 --- [or-127.0.0.1-13] com.alibaba.nacos.common.remote.client   : [b2df3a7f-c8da-49d8-8f39-0f980088e6d5] Receive server push request, request = NotifySubscriberRequest, requestId = 9
2024-07-06T15:52:13.967+08:00  INFO 22140 --- [or-127.0.0.1-13] com.alibaba.nacos.common.remote.client   : [b2df3a7f-c8da-49d8-8f39-0f980088e6d5] Ack server push request, request = NotifySubscriberRequest, requestId = 9
调用结束----------------12s

如果想要每次重试都打印,需要开启feign的日志功能

6.openfeign集成httpclient5

openfeign默认使用的是HttpUrlConnection 做的连接,该方式性能和httpclient5有很大的差距

生产使用这个会舒服很多

集成

引入依赖

    <!-- httpclient5--><dependency><groupId>org.apache.httpcomponents.client5</groupId><artifactId>httpclient5</artifactId><version>5.3</version></dependency><!-- feign-hc5--><dependency><groupId>io.github.openfeign</groupId><artifactId>feign-hc5</artifactId><version>13.1</version></dependency>

开启开关

7.请求回应压缩

官网截图

对请求和响应进行gzip压缩。以减少通信过程中的性能损耗

通过两个参数就能开启

细粒度压缩

8.openfeign 的日志打印功能

默认不显示任何日志

NONE,默认的不显示

BASIC, 仅记录请求方法,url,响应状态码和响应头的信息

HEADERS,多了请求和响应头信息

FULL 多了请求和响应的正文及元数据

代码配置

   @Beanpublic Logger.Level feginLoggerLevel() {//开启之后重试次数每次重试请求都可以打印return Logger.Level.FULL;}

http://www.hkea.cn/news/414578/

相关文章:

  • 河北建设银行石家庄分行招聘网站怎么申请自己的网络平台
  • vs2008 做网站搜索引擎的工作原理是什么
  • 东莞常平做网站公司app营销策划方案
  • 爱用建站 小程序重庆网站制作公司
  • 网站建设小企业案例漯河网络推广哪家好
  • wordpress 清空回收站合肥网站优化软件
  • 电站建设招聘网站智推教育seo课程
  • 做静态网站选用什么服务器站长素材网站
  • 网站建设先做前台还是后台百度认证是什么
  • 广州专业做crm系统的供应商seo网站培训班
  • 景安建网站企业网站seo方案案例
  • 山东滕州疫情最新消息今天i长沙官网seo
  • 公司做网站买域名之后做什么百度一下你就知道手机版
  • 北京婚恋网站哪家最好企业推广宣传方式
  • 国发网站建设西安做网站公司
  • 网站推广服务合同简述网络营销的主要方法
  • 信息门户网站是什么成人计算机培训机构哪个最好
  • 网站建设公司 中企动力公司东莞商城网站建设
  • b2c的电子商务网站自己想做个网站怎么做
  • 京东pc网站用什么做的如何注册网站怎么注册
  • 长沙商城网站制作seo线下培训课程
  • web网站开发公司网站制作优化排名
  • 这么做3d网站企业邮箱网页版
  • 瑞安网站建设公司关键词排名网络推广
  • 南京学做网站友情链接检查工具
  • 参考文献网站开发百度重庆营销中心
  • 如何做微信ppt模板下载网站企业网页设计公司
  • 做b2b网站百度点击快速排名
  • 网站怎么做移动图片不显示不出来吗芭嘞seo
  • 旅游网站建设服务器ip域名解析