ByteTCC icon indicating copy to clipboard operation
ByteTCC copied to clipboard

bytetcc使用,beanFactory.getCompensableCoordinator()报空指针

Open ningyu1 opened this issue 6 years ago • 3 comments

场景:

  1. A服务提供一个rpc接口,配置的TCC
  2. B服务提供一个rpc接口,配置了TCC
  3. C服务的Controller中注入了A服务和B服务的接口,进行调用,先调用A服务接口,再调用B服务接口 C服务不操作DB,只提供RestController 在调用过程遇到下列问题,如下是错误日志

java.lang.NullPointerException: null at org.bytesoft.bytetcc.supports.dubbo.spi.CompensableServiceFilter.consumerInvokeForSVC(CompensableServiceFilter.java:364) ~[classes/:na] at org.bytesoft.bytetcc.supports.dubbo.spi.CompensableServiceFilter.consumerInvoke(CompensableServiceFilter.java:330) ~[classes/:na] at org.bytesoft.bytetcc.supports.dubbo.spi.CompensableServiceFilter.invoke(CompensableServiceFilter.java:71) ~[classes/:na] at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91) ~[dubbo-2.5.3.jar:2.5.3] at com.alibaba.dubbo.rpc.protocol.dubbo.filter.FutureFilter.invoke(FutureFilter.java:53) ~[dubbo-2.5.3.jar:2.5.3] at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91) ~[dubbo-2.5.3.jar:2.5.3] at com.alibaba.dubbo.monitor.support.MonitorFilter.invoke(MonitorFilter.java:75) ~[dubbo-2.5.3.jar:2.5.3] at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91) ~[dubbo-2.5.3.jar:2.5.3] at com.alibaba.dubbo.rpc.filter.ConsumerContextFilter.invoke(ConsumerContextFilter.java:48) ~[dubbo-2.5.3.jar:2.5.3] at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91) ~[dubbo-2.5.3.jar:2.5.3] at com.alibaba.dubbo.rpc.proxy.InvokerInvocationHandler.invoke(InvokerInvocationHandler.java:52) ~[dubbo-2.5.3.jar:2.5.3] at com.alibaba.dubbo.common.bytecode.proxy4.create(proxy4.java) ~[na:2.5.3] at com.jiuyescm.account.controller.NotFoundController.tcc(NotFoundController.java:61) ~[classes/:na] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.7.0_45] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) ~[na:1.7.0_45] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.7.0_45] at java.lang.reflect.Method.invoke(Method.java:606) ~[na:1.7.0_45] at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:214) ~[spring-web-4.0.0.RELEASE.jar:4.0.0.RELEASE] at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132) ~[spring-web-4.0.0.RELEASE.jar:4.0.0.RELEASE] at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104) ~[spring-webmvc-4.0.0.RELEASE.jar:4.0.0.RELEASE] at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:748) ~[spring-webmvc-4.0.0.RELEASE.jar:4.0.0.RELEASE] at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:689) ~[spring-webmvc-4.0.0.RELEASE.jar:4.0.0.RELEASE] at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:83) ~[spring-webmvc-4.0.0.RELEASE.jar:4.0.0.RELEASE] at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:945) ~[spring-webmvc-4.0.0.RELEASE.jar:4.0.0.RELEASE] at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:876) ~[spring-webmvc-4.0.0.RELEASE.jar:4.0.0.RELEASE] at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:931) [spring-webmvc-4.0.0.RELEASE.jar:4.0.0.RELEASE] at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:822) [spring-webmvc-4.0.0.RELEASE.jar:4.0.0.RELEASE] at javax.servlet.http.HttpServlet.service(HttpServlet.java:735) [javax.servlet.jar:na] at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:807) [spring-webmvc-4.0.0.RELEASE.jar:4.0.0.RELEASE] at javax.servlet.http.HttpServlet.service(HttpServlet.java:848) [javax.servlet.jar:na] at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:684) [jetty-servlet.jar:8.1.14.v20131031] at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1496) [jetty-servlet.jar:8.1.14.v20131031] at com.jiuyescm.account.filter.CookieFilter.doFilter(CookieFilter.java:70) [classes/:na] at com.jiuyescm.account.filter.LoginFilter.doFilter(LoginFilter.java:97) [classes/:na] at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1484) [jetty-servlet.jar:8.1.14.v20131031] at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88) [spring-web-4.0.0.RELEASE.jar:4.0.0.RELEASE] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:108) [spring-web-4.0.0.RELEASE.jar:4.0.0.RELEASE] at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1476) [jetty-servlet.jar:8.1.14.v20131031] at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:499) [jetty-servlet.jar:8.1.14.v20131031] at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137) [jetty-server.jar:8.1.14.v20131031] at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:557) [jetty-security.jar:8.1.14.v20131031] at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231) [jetty-server.jar:8.1.14.v20131031] at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1086) [jetty-server.jar:8.1.14.v20131031] at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:428) [jetty-servlet.jar:8.1.14.v20131031] at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193) [jetty-server.jar:8.1.14.v20131031] at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1020) [jetty-server.jar:8.1.14.v20131031] at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135) [jetty-server.jar:8.1.14.v20131031] at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116) [jetty-server.jar:8.1.14.v20131031] at org.eclipse.jetty.server.Server.handle(Server.java:370) [jetty-server.jar:8.1.14.v20131031] at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:494) [jetty-server.jar:8.1.14.v20131031] at org.eclipse.jetty.server.AbstractHttpConnection.headerComplete(AbstractHttpConnection.java:971) [jetty-server.jar:8.1.14.v20131031] at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.java:1033) [jetty-server.jar:8.1.14.v20131031] at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:644) [jetty-http.jar:8.1.14.v20131031] at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235) [jetty-http.jar:8.1.14.v20131031] at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82) [jetty-server.jar:8.1.14.v20131031] at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:667) [jetty-io.jar:8.1.14.v20131031] at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:52) [jetty-io.jar:8.1.14.v20131031] at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608) [jetty-util.jar:8.1.14.v20131031] at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543) [jetty-util.jar:8.1.14.v20131031] at java.lang.Thread.run(Thread.java:744) [na:1.7.0_45]

ningyu1 avatar Jul 28 '17 07:07 ningyu1

请问上面是什么问题?

ningyu1 avatar Jul 28 '17 07:07 ningyu1

使用的bytetcc版本:0.4.0-beta3 使用的rpc是:dubbo 参与tcc服务的db中增加了bytetcc表

A服务和B服务的RPC服务方配置了,如下配置 <dubbo:protocol port="...." /> <dubbo:service interface="........." filter="compensable" loadbalance="compensable" cluster="failfast" retries="0" group="org.bytesoft.bytetcc"/>

C服务RPC服务消费方没有import bytetcc-supports-dubbo.xml 但是dubbo:reference配置了compensable参数 <dubbo:reference id="..." interface="......" filter="compensable" loadbalance="compensable" cluster="failfast" retries="0" group="org.bytesoft.bytetcc" />

ningyu1 avatar Jul 28 '17 07:07 ningyu1

CompensableBeanRegistry.beanFactory属性为空,可能是配置有问题。 所有的beanFactory都是由CompensableBeanFactoryPostProcessor在启动的时候统一注入的。跟一下这个类,看一看注入bean的情况吧。

liuyangming avatar Jul 28 '17 09:07 liuyangming