ServiceComb/CSE常见问题处理(1812)

一、什么时机可以使用DynamicPropertyFactory.getInstance()读取配置

如果用spring,在place holder加载之后就可以使用,加载bean的过程中就可以读。 CSE初始化,是使用place holder来初始化的。 果要在更加之前读取, 只能使用local configuration, 具体可以参考java-chassis的config-cc代码实现:

https://github.com/apache/servicecomb-java-chassis/blob/master/dynamic-config/config-cc/src/main/java/org/apache/servicecomb/config/client/ConfigCenterConfig.java

二、io.vertx.core.VertxException: Connection was closed 可能原因

在做超时测试的时候,发现抛出如下异常:

2018-12-06 16:12:02,005 [ERROR] invoke failed, invocation=CONSUMER rest AutoProvider.serverMvc.SayHello org.apache.servicecomb.swagger.invocation.exception.DefaultExceptionToProducerResponseConverter.convert(DefaultExceptionToProducerResponseConverter.java:35)
io.vertx.core.VertxException: Connection was closed
2018-12-06 16:12:02,005 [WARN] bizkeeper command CONSUMER rest AutoProvider.serverMvc.SayHello failed due to InvocationException: code=490;msg=CommonExceptionData [message=Cse Internal Bad Request] org.apache.servicecomb.bizkeeper.BizkeeperCommand.lambda$null$1(BizkeeperCommand.java:82)
2018-12-06 16:12:02,005 [WARN] bizkeeper execution error, info=cause:InvocationException,message:InvocationException: code=490;msg=CommonExceptionData [message=Cse Internal Bad Request];cause:VertxException,message:Connection was closed org.apache.servicecomb.bizkeeper.BizkeeperHandler$1.onExecutionError(BizkeeperHandler.java:55)
2018-12-06 16:12:02,006 [WARN] catch error in bizkeeper:Consumer.AutoProvider.serverMvc.SayHello failed and fallback disabled. org.apache.servicecomb.bizkeeper.BizkeeperHandler.lambda$handle$0(BizkeeperHandler.java:79)

预期是客户端得到超时异常,但是实际捕获到了Connection was closed异常。 

最后检查是服务端配置了如下配置项:

servicecomb.rest.server.connection.idleTimeoutInSeconds = 1

由于服务端设置了连接限制时间,关闭了连接。 当处理时间超过1秒的时候,就会出现这个异常了。

三、InvocationException: code=500;msg={message=Timeout when processing the request.}

2018-12-11 13:58:53,387|ERROR|pool-2-thread-5|1zcbErzhtZP7Lv4Im9m|httpclient.CBCHttpClientUtils 484|Failed to execute http request. Exception
InvocationException: code=500;msg={message=Timeout when processing the request.}
       at org.apache.servicecomb.swagger.invocation.exception.ExceptionFactory.d**ate(ExceptionFactory.java:74)
       at org.apache.servicecomb.swagger.invocation.exception.ExceptionFactory.create(ExceptionFactory.java:61)
       at org.apache.servicecomb.swagger.invocation.Response.create(Response.java:93)
       at org.apache.servicecomb.transport.rest.client.http.DefaultHttpClientFilter.extractResponse(DefaultHttpClientFilter.java:105)
       at org.apache.servicecomb.transport.rest.client.http.DefaultHttpClientFilter.afterReceiveResponse(DefaultHttpClientFilter.java:128)
       at org.apache.servicecomb.transport.rest.client.http.RestClientInvocation.lambda$processResponseBody$7(RestClientInvocation.java:200)
       at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
       at java.util.concurrent.FutureTask.run(FutureTask.java:266)
       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
       at java.lang.Thread.run(Thread.java:748)

这个异常发生在客户端。 和客户端请求超时不同,这个异常是服务端返回的错误,代表一个请求在服务端队列里面排队超过了设置的超时时间,服务端丢弃这个请求,不再处理。 可以通过servicecomb.rest.server.requestWaitInPoolTimeout设置这个排队时间,默认是30s。

但是通常30s已经是非常长的时间了,设置的太长, 还会触发客户端超时等。 需要做一系列其他配置。 所以一般这种情况发生的时候,需要考虑优化服务端性能。如果已经达到设计的系统上限,那么可以忽略这个错误。

四、Key/certificate is mandatory for SSL

启动CSE的服务的时候,报告:Key/certificate is mandatory for SSL

报告这个错误,是因为启用ssl的情况下需要配置证书。 可以参考这里https://docs.servicecomb.io/java-chassis/zh_CN/security/tls.html进行配置。 

配置项里面的路径受ssl.sslCustomClass: org.apache.servicecomb.demo.DemoSSLCustom这个实现类的影响,可以定制他的实现。 缺省情况从当前工作目录查找配置的文件名。 

五、Thread[transport-vert.x-eventloop-thread-4,5,main] has been blocked for 30711 ms, time limit is 2000

这个错误代表evenloop线程被阻塞,超过了缺省的2000ms限制,会打印阻塞堆栈。 从下面的堆栈有个核心行:

at org.apache.servicecomb.core.executor.ReactiveExecutor.execute(ReactiveExecutor.java:30)

可以看出,业务逻辑和处理链逻辑是采用reactive模式执行的。如果是edge service(网关服务),缺省就是reactive模式。当在网关出现这个错误的时候,很多时候就需要调整代码实现,将阻塞代码改为异步的方

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值