问题描述: Omega客户端不执行Alpha服务端发出的命令
帮忙看下这个问题,Omega端能处理正常的调用,但是不执行Alpha服务端发送的指令, Alpha服务器没报错。 服务的调用参数如下:使用字符串或者基本类型,还有map来传参数。 我将参数涉及到的bean jar加入到Alpha中,Omega端还是报错,使用字符串或者基本类型,还有map来传参数,调用补偿方法都没问题。
报错信息:
2019-01-07 19:25:39.983 WARN 18736 --- [nio-6060-exec-2] .m.m.a.ExceptionHandlerExceptionResolver : Resolved exception caused by handler execution: cn.com.aiidc.hicloud.component.bean.exception.HicloudException
2019-01-07 19:25:40.351 INFO 18736 --- [ault-executor-4] s.p.o.c.g.s.GrpcCompensateStreamObserver : Received compensate command, global tx id: 31c67d8e-1ced-4f70-83b6-7c151186120f, local tx id: a5cc191d-e50b-4c69-bb53-bb61309a1049, compensation method: public boolean cn.com.aiidc.hicloud.demo.service.impl.OrderServiceImpl.cancelCreateOrder(cn.com.aiidc.hicloud.component.bean.vo.order.CreateOrderVo)
2019-01-07 19:25:40.357 ERROR 18736 --- [ault-executor-4] o.a.s.p.o.c.g.c.ReconnectStreamObserver : Failed to process grpc coordinate command.
io.grpc.StatusRuntimeException: CANCELLED: Failed to read message.
at io.grpc.Status.asRuntimeException(Status.java:526) ~[grpc-core-1.14.0.jar:1.14.0]
at io.grpc.stub.ClientCalls$StreamObserverToCallListenerAdapter.onClose(ClientCalls.java:420) [grpc-stub-1.14.0.jar:1.14.0]
A
解答:
因为Alpha不会做反序列化的操作,其实添加cn.com.aiidc.hicloud.component.bean.vo.order.CreateOrderVo 这个类到Alpha中意义不大。
经过交流发现引入如下的依赖后造成的问题
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
maven去掉这个之后补偿方法正常调用了。详情参考: https://docs.spring.io/spring-boot/docs/current/reference/html/using-boot-devtools.html#using-boot-devtools-known-restart-limitations
点评:引入spring-boot-devtools 会修改Omega对应的classloader,这样会造成omega寻找对应方法签名时出错。