Closed molin7596 closed 5 months ago
逻辑服之间通过路由调用超时 返回null(ResponseMessage is null),为什么不是返回超时异常信息
远程调用失败返回 null,比如超时。其他异常参考 RemotingException, InterruptedException
其他不相关的问题,另开 issue 吧。
请求超时时 再次请求怎么样才能访问到上次同一个逻辑服(除开逻辑服只有一个这种情况)
这个我之前看过了 都是先绑定 在调用,有没有能够不先绑定也可以获取上次请求的的逻辑服id,是我这个想法不符合常理吗。通常不会这样做嘛
偏特定业务的需要自己处理,因为默认的实现是调用方不需要关心同类型逻辑服启动了多少个;只需要发送请求,其他游戏逻辑服能处理就行。
一般需要固定某个游戏逻辑服请求的,且频繁的;可以事先绑定好。如果是突然性的,不频繁的,可以参考下面的。
这个我之前看过了 都是先绑定 在调用,有没有能够不先绑定也可以获取上次请求的的逻辑服id
可以指定需要访问的游戏逻辑服 id,设置到 HeadMetadata 中,下面是两个示例代码
public void invokeModuleMessage(FlowContext flowContext) {
// 设置 FlowContext 中的 HeadMetadata
HeadMetadata headMetadata = flowContext.getHeadMetadata();
int[] bindingLogicServerIds = new int[]{
HashKit.hash32("指定访问的游戏逻辑服 id")
};
// 设置需要指定访问的游戏逻辑服 id
headMetadata.setBindingLogicServerIds(bindingLogicServerIds);
CmdInfo cmdInfo = ...
ResponseMessage responseMessage = flowContext.invokeModuleMessage(cmdInfo);
}
public void invokeModuleMessage(CmdInfo cmdInfo, Object data) {
// 创建一个模拟请求
RequestMessage requestMessage = BarMessageKit.createRequestMessage(cmdInfo, data);
HeadMetadata headMetadata = requestMessage.getHeadMetadata();
// 设置需要模拟的 userId
headMetadata.setUserId(100);
int[] bindingLogicServerIds = new int[]{
HashKit.hash32("指定访问的游戏逻辑服 id")
};
// 设置需要指定访问的游戏逻辑服 id
headMetadata.setBindingLogicServerIds(bindingLogicServerIds);
// 发起 action 调用
InvokeModuleContext invokeModuleContext = BrokerClientHelper.getInvokeModuleContext();
ResponseMessage responseMessage = invokeModuleContext.invokeModuleMessage(requestMessage);
}
好的,明白了 只能先设置逻辑服id 或者绑定
你的问题 | 使用场景