目录
- 1. 本地测试rpc报错误 RPC-02306:无法获取 RPC服务地址问题
- 2. 经典发布的时候在检查服务v2 这里报python run timeout
- 3. Cannot find invoke method:[validateUser],service:[com.scrcu.scoec.core.facade.LoginAuthapi:1.0
- 4. 使用rest的依赖发布服务报RESTEASY003210: Could not find resource for full path:http://localhost:8341/webapi/person/gaohq?userId=2324
- 5. 使用ob客户那里 sql 报错 java sql exception:different consistensy type in current trasaction not suppor
- 6. 限流成功但是获取不到页面上配置的返回信息
- 7. rpc调用的时候报com.alibaba.com.caucho.hessian.io.HessianProtocolException:XXXXX 类 could not be instantiated
1. 本地测试rpc报错误 RPC-02306:无法获取 RPC服务地址问题
排查思路:
- 1.1、看/home/admin/logs/health-check/common-error.log
- 1.2、看localRegistry.reg 有没有注册的信息 localRegistry.reg 这个⽂件存储了注册的信息.如下所示
- 1.3、/home/admin/logs/rpc/rpc-registry.log 有没有注册信息⽇志
> 1 com.alibaba.gts.sofa.rpc.provider.facade.PersonMFacade:1.0@rest rest://10.63.2.112:8348?serialization=hessian2
> 2 com.alibaba.gts.sofa.rpc.provider.facade.KeChengService:1.0@DEFAUL T bolt://10.63.2.112:12200?serialization=hessian2&dynamicAlias=drm
> 3 com.alibaba.gts.sofa.rpc.provider.facade.PersonMFacade:1.0@DEFAULT bolt://10.63.2.112:12200?serialization=hessian2&dynamicAlias=drm
> 4 com.alibaba.gts.sofa.rpc.provider.facade.UMCInterface:1.0@rest rest://10.63.2.112:8348?serialization=hessian2
> 5 com.alibaba.gts.sofa.rpc.provider.facade.KeChengService:1.0@rest rest://10.63.2.112:8348?serialization=hessian
2. 经典发布的时候在检查服务v2 这里报python run timeout
排查思路:
- 2.1、/home/admin/logs/healthcheck/comon-error.log
- 2.2、 在这个脚本⾥ /home/admin/resources/check_service.sh 加上 set -x,注意是脚本的第⼆行
- 2.3、 bash /home/admin/resources/check_service.sh 如果出现下⾯的报错,说明是换⾏符导致的健康 检查的链接不对导致的
原因分析:
因为windows和linux的换⾏符格式不⼀样,说明的链接如下
https://www.cnblogs.com/cnjavahome/p/8893813.html
解决方案:
设置换行符的编码格式
2.1 Eclipse
https://www.cnblogs.com/yangyawen/p/9564348.html
2.2 idea
File->Settings…(Ctrl+Alt+S)
Editor->Code Style ⾥⾯的Line separator(for new files): 选择Unix and macOS(\n)
3. Cannot find invoke method:[validateUser],service:[com.scrcu.scoec.core.facade.LoginAuthapi:1.0
排查思路:
泛化调⽤的时候报这个错误,泛化调⽤的时候涉及到四个参数: ⽅法名、参数的类型、参数值、返回值的类型
看进⾏泛化调⽤的时候这个四个参数的值是否缺失
4. 使用rest的依赖发布服务报RESTEASY003210: Could not find resource for full path:http://localhost:8341/webapi/person/gaohq?userId=2324
排查思路:
复现的时候是由于jar包冲突导致的由于引⼊了apigateway的依赖导致的,⽬前发现了同时引⼊rpc 的依赖和网关的依赖会报这样的错误
<dependency>
<groupId>com.alipay.sofa</groupId>
<artifactId>gateway-sdk</artifactId>
<version>2.0.3</version>
</dependency>
// 或者引⼊了下⾯的依赖
<dependency>
<groupId>com.alipay.sofa</groupId>
<artifactId>gateway-enterprise-sofa-boot-starter</artifactId>
</dependency>
解决方案:
rpc的依赖和⽹关的依赖不要放在⼀起
5. 使用ob客户那里 sql 报错 java sql exception:different consistensy type in current trasaction not suppor
问题描述:
使用ob客户端可以向业务表(IB_LOG_PRINTVOUCHER_LOG)插⼊数据,但是通过代码insert的时候报这样的错,发现⽤户在insert 之前 查询了另⼀张表,另⼀张表加了 hint(修改了表的读⼀致性 为 weak) hint的例⼦(select +READ_CONSISTENCY(WEAK),query_timeout(100000000)/ * from __all_zone)
原因分析:
1、事务里面跨库的话会出现这样的问题。
2、同⼀个表 加了弱读⼀致性,先查询在插入的时候也会报这样的错。
解决方案:
查询的表去掉了hint就可以了
6. 限流成功但是获取不到页面上配置的返回信息
排查思路:
rpc的框架抓取不到异常
解决方案:
在服务提供者的main⽅法⾥⾯添加下⾯的代码,SofaRestExceptionHandler 这个是⾃定义的
JAXRSProviderManager.registerCustomProviderInstance(new SofaRestExceptionHandler());
@Component
@Provider
public class SofaRestExceptionHandler implements ExceptionMapper<Throwable> {
private static final Logger logger = LoggerFactory.getLogger(SofaRestExceptionHandler.class);
public static final String ERROR_CODE_KEY = "code";
public static final String MESSAGES_KEY = "messages";
private static final int ERROR_STATUS = 451;
@Override
public Response toResponse(Throwable ex) {
String errorCode = "NO Common Error Code!!";
String message = "";
if (ex instanceof CommonException) {
CommonException casted = (CommonException) ex;
errorCode = StringUtil.isBlank(casted.getErrorCode())? errorCode : casted.getErrorCode();
message = casted.getMessage();
} else {
errorCode = "NO Common Error Code!!";
message = MessageFormat.format("Unknown Exception[{0}]", ex.getMessage());
}
logger.error("web api error!", ex);
logger.error("errorCode={0}, message={1}", errorCode, message);
Map errorMap = new HashMap<String, String>();
errorMap.put(ERROR_CODE_KEY, errorCode);
errorMap.put(MESSAGES_KEY, Arrays.asList(message));
return Response.status(ERROR_STATUS).entity(errorMap).type(MediaType.APPLICATION_JSON).build();
}
}
7. rpc调用的时候报com.alibaba.com.caucho.hessian.io.HessianProtocolException:XXXXX 类 could not be instantiated
问题描述:
进行rpc调⽤的时候出现了这样的问题,并且 rpc 的参数是对象,并且日志⾥⾯还提示空指针异常
原因分析:
rpc内部⽤的序列化协议是 hession,provider序列化的时候和consumer反序列化的时候类型不⼀致导致的
解决方案: