概述
1 feign
1.1 原理
Feign远程调用原理,这篇文章写得比较好。
1.2 优化策略
既然feign的通讯协议是http的,那么http的优化策略同样适用于feign
常规配置如下
feign:
hystrix:
enabled: true
client:
config:
default:
connectTimeout: 10000
readTimeout: 10000
- gzip压缩
数据传输需要时间,gzip压缩可以减少微服务之间通讯数据传输的字节大小。
- http请求
Http持久连接与HttpClient连接池
因为http是无状态协议,请求处理完毕连接会被断开,而http建立连接的3次握手和关闭连接的4次握手,资源开销还是很大,于是1996年之后HTTP/1.0+协议,增加了Connection:Keep-Alive
keep-alive 就是浏览器和服务端之间保持长连接,这个连接是可以复用的。在HTTP1.1中是默认开启的
Feign默认采用的是HttpURLConnection,这个是jdk自带的httpclient技术,并不支持连接池,吞吐量存量问题。
feign:
httpclient:
enabled: false
okhttp:
enabled: true
那么HttpClient和okhttp的区别呢?HttpClient和OkHttp对比
HTTP连接客户端,选 HttpClient 还是 OkHttp ?
这两文章都说httpclient在单例模式下要比okhttp性能要好一些,而非单例模式下okhttp要超过。
那么feign配置的okhttp和httpclient是什么模式呢?
okhttp连接池复用机制
SpringCloudFeign引入feign-httpclient导致的坑
1 Feign 客户端实现 类型
Feign切换client到okhttp无法生效天坑!(附带发生的原因)
SpringCloud feign的http请求组件优化
基于springboot的RestTemplate、okhttp和HttpClient对比
2 dubbo
微服务中远程调用Dubbo与Feign对比
curator2.x兼容zk3.4.x和zk3.5.x,这就是为啥用低版本了
<!-- dubbo -->
<dubbo.version>2.7.2</dubbo.version>
<zookeeper.version>3.4.6</zookeeper.version>
<zkclient.version>0.1</zkclient.version>
<curator.version>2.12.0</curator.version>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>${dubbo.version}</version>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>${zookeeper.version}</version>
</dependency>
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>${zkclient.version}</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>${curator.version}</version>
</dependency>
Caused by: java.lang.NoClassDefFoundError: org/apache/curator/RetryPolicy
at org.apache.dubbo.remoting.zookeeper.curator.CuratorZookeeperTransporter.createZookeeperClient (CuratorZookeeperTransporter.java:26)
at org.apache.dubbo.remoting.zookeeper.support.AbstractZookeeperTransporter.connect (AbstractZookeeperTransporter.java:68)
at org.apache.dubbo.remoting.zookeeper.ZookeeperTransporter$Adaptive.connect (ZookeeperTransporter$Adaptive.java)
at org.apache.dubbo.configcenter.support.zookeeper.ZookeeperDynamicConfiguration.<init> (ZookeeperDynamicConfiguration.java:60)
at org.apache.dubbo.configcenter.support.zookeeper.ZookeeperDynamicConfigurationFactory.createDynamicConfig
有的喜欢在接口中Hibernate validator
做校验,这样做带来的问题是spring版本升级,接口还得跟着变,Hibernate validator 4.3.0.Final版本校验框架是JSR-303,而Hibernate validator 5.1.0.Final版本校验框架是JSR-349,spring-context-4.2.5.RELEASE.jar框架采用新的校验框架JSR-349。
Caused by: java.lang.AbstractMethodError: org.hibernate.validator.engine.ConfigurationImpl.getDefaultParameterNameProvider()Ljavax/validation/ParameterNameProvider;
at org.springframework.validation.beanvalidation.LocalValidatorFactoryBean.configureParameterNameProvider (LocalValidatorFactoryBean.java:327)
at org.springframework.validation.beanvalidation.LocalValidatorFactoryBean.afterPropertiesSet (LocalValidatorFactoryBean.java:293)
at org.springframework.validation.beanvalidation.OptionalValidatorFactoryBean.afterPropertiesSet (OptionalValidatorFactoryBean.java:40)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods (AbstractAutowi
如果有这种情况,先排除,再升级
<hibernate-validator.version>6.1.7.Final</hibernate-validator.version>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>${hibernate-validator.version}</version>
</dependency>
最后
以上就是乐观紫菜为你收集整理的feign与dubbo的全部内容,希望文章能够帮你解决feign与dubbo所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复