2024-07-25 10:51:14.911[alarm-1-thread-2]ERROR mesLog -企业微信推送失败:当前上下文token内容为空,不支持远程调用!
com.sie.snest.engine.exception.ModelException:当前上下文token内容为空,不支持远程调用!
at com.sie.snest.engine.model.MethodMeta.invoke(MethodMeta.java:190)
at com.sie.snest.engine.api.distributed.RpcInvocation.invoke(RpcInvocation.java:184)
at com.sie.snest.engine.data.Recordset.call(Recordset.java:295)
at com.sie.pip.mes.alarm.service.AlarmwebSocketclientHandlerService.sendMes(AlarmwebSocketclientHandlerService.java:1219)
at com.sie.pip.mes.alarm.service.AlarmwebSocketclientHandlerService.lambda$getUserPushProcessings$16(AlarmwebSocketclientHandlerService.java:1106)
at com.sie.pip.mes.common.utils.ThreadPoolUtil.lambda$executeSo$0(ThreadPoolUtil.java:50)
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)
Caused by:com.sie.snest.engine.exception.CallException:当前上下文token内容为空,不支持远程调用!
at com.sie.snest.engine.api.distributed.RpcInvocation.getToken(RpcInvocation.java:64)
at com.sie.snest.engine.api.distributed.RpcInvocation.getHeaderAndBody(RpcInvocation.java:51)
at com.sie.snest.engine.api.distributed.RpcInvocation.invoke(RpcInvocation.java:125)
at com.sie.snest.engine.data.Recordset.call(Recordset.java:295)
at com.sie.snest.engine.data.Recordset.search(Recordset.java:185)
at com.sie.pip.mes.qywx.service.MobileSenderService.obtainChannelInfo(MobileSenderService.java:217)
at com.sie.pip.mes.qywx.service.MobileSenderService.sender(MobileSenderService.java:65)
at com.sie.pip.mes.qywx.service.MobileSenderService$$EnhancerByCGLIB$$93162c76.CGLIB$sender$0(<generated>)
at com.sie.pip.mes.qywx.service.MobileSenderService$$EnhancerByCGLIB$$93162c76$$FastClassByCGLIB$$93a581f.invoke(<generated>)
at net.sf.cglib.proxy.MethodProxy.invokesuper(MethodProxy.java:228)
at com.sie.snest.engine.model.ModelInterceptor.intercept(ModelInterceptor.java:84)
at com.sie.pip.mes.qywx.service.MobileSenderService$$EnhancerByCGLIB$$93162c76.sender(<generated>)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.sie.snest.engine.model.MethodMeta.execute(MethodMeta.java:226)
at com.sie.snest.engine.model.MethodMeta.invoke(MethodMeta.java:179)

解决方案

检查如下示例代码:

 try (Meta meta1 = new Meta(null, new HashMap<>())){


}

new HashMap() 需要调整如下所示:

try (Meta meta1 = new Meta(null, BaseContextHandler.getMeta().getContext())){
            
}

为什么需要自己new Meta()

场景1 : 服务是异步的情况,不是通过页面的API接口,以及启动事件触发!

平台提供了执行异步服务

示例代码如下所示:

  @MethodService(description = "发送消息")
  public void sendMsg(RecordSet rs){
      rs.callAsync("openWebSocket", 9999 );
  }
  
  @MethodService(description = "打开websocket端口")
  public void openWebSocket(int port){
      
  }

场景2: 消费事件执行服务的情况!

异步服务并不是通过引擎触发,提供如下代码所示:

BaseContextHandler.getMeta().getContext() 需要把同步的数据传递给新创建的Meta类。 如果实在没有,可以通过查库获取token内容。



try (Meta meta1 = new Meta(null, BaseContextHandler.getMeta().getContext())){
            
}