sofa常见问题排查及处理方案


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反序列化的时候类型不⼀致导致的

解决方案:

建议修改序列化的代码参考以下的链接
https://blog.csdn.net/weixin_44142296/article/details/87884288?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.add_param_isCf&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.add_param_isCf

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值