我是靠谱客的博主 乐观紫菜,最近开发中收集的这篇文章主要介绍feign与dubbo,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1 feign
1.1 原理
Feign远程调用原理,这篇文章写得比较好。
1

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所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(68)

评论列表共有 0 条评论

立即
投稿
返回
顶部