zoukankan      html  css  js  c++  java
  • AbstractMethodError: com.alibaba.cloud.sentinel.feign.SentinelContractHolder.parseAndValidateMetadata(Ljava/lang/Class;)Ljava/util/List;

    在整合sentinel和服务的时候,报标题这个错,也是由版本原因导致的

    feign的Contract接口,
    2.2.0.RELEASE:

    // TODO: break this and correct spelling at some point
    List<MethodMetadata> parseAndValidatateMetadata(Class<?> targetType);
    

    2.2.2.RELEASE:

    List<MethodMetadata> parseAndValidateMetadata(Class<?> targetType);
    

    在2.2.0.RELEASE里有一行注释描述,接口方法名拼写错误,在2.2.2.RELEASE方法已修正了,即方法名发生了改变。
    在spring-cloud-alibaba-sentinel中的SentinelContractHolder类,用到了该接口的这个方法(feign2.2.0.RELEASE版本):

    @Override
    public List<MethodMetadata> parseAndValidatateMetadata(Class<?> targetType) {
    	List<MethodMetadata> metadatas = delegate.parseAndValidatateMetadata(targetType);
    	metadatas.forEach(metadata -> METADATA_MAP
    			.put(targetType.getName() + metadata.configKey(), metadata));
    	return metadatas;
    }
    

    解决办法,要不修改版本,要不就是在工程合适的地方,新建包com.alibaba.cloud.sentinel.feign。重新修改一下SentinelContractHolder即可

    /**
     * @author WGR
     * @create 2020/8/21 -- 0:27
     */
    public class SentinelContractHolder implements Contract {
        private final Contract delegate;
    
        /**
         * map key is constructed by ClassFullName + configKey. configKey is constructed by
         * {@link feign.Feign#configKey}
         */
        public final static Map<String, MethodMetadata> METADATA_MAP = new HashMap<>();
    
        public SentinelContractHolder(Contract delegate) {
            this.delegate = delegate;
        }
    
        @Override
        public List<MethodMetadata> parseAndValidateMetadata(Class<?> targetType) {
            List<MethodMetadata> metadatas = delegate.parseAndValidateMetadata(targetType);
            metadatas.forEach(metadata -> METADATA_MAP
                    .put(targetType.getName() + metadata.configKey(), metadata));
            return metadatas;
        }
    }
    
  • 相关阅读:
    MySQL Replication主从复制
    使用Amoeba 实现MySQL DB 读写分离
    Amoeba For MySQL入门:实现数据库水平切分
    11条理由告诉你,为什么你的网站不卖座
    很有用的观察者设计模式
    Apache + Tomcat集群配置详解 (1)
    Nginx+tomcat配置负载均衡
    JSON-RPC轻量级远程调用协议介绍及使用
    nginx的upstream目前支持5种方式的分配
    rpc远程过程协议调用
  • 原文地址:https://www.cnblogs.com/dalianpai/p/13538867.html
Copyright © 2011-2022 走看看