Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

游戏服偶尔会报 RPC 超时的错误: com.alipay.remoting.rpc.exception.InvokeTimeoutException: Rpc invocation timeout[responseCommand TIMEOUT]!, #374

Open
mycorn opened this issue Sep 27, 2024 · 1 comment
Labels
Q&A;提问与交流 Question and Answer、exchange trick;使用技巧 trick;使用技巧

Comments

@mycorn
Copy link

mycorn commented Sep 27, 2024

你的问题

描述你遇到的问题
游戏服偶尔会报 RPC 超时的错误: com.alipay.remoting.rpc.exception.InvokeTimeoutException: Rpc invocation timeout[responseCommand TIMEOUT]!,
使用场景:
server服, 通过invokeModuleContext.invokeModuleMessage调用server服自己的cmd, 这样rpc的过程就是: server 通过rpc client 连接到 broker网关, broker网关 又转回给 这个server,然后将结果返回给 broker网关,broker网关返回给 server。

预期值

期望的预期值
可以和跨服调用一样,返回正常的结果

实际值

实际值
偶尔会报 RPC 超时的错误: com.alipay.remoting.rpc.exception.InvokeTimeoutException: Rpc invocation timeout[responseCommand TIMEOUT]!,

复现步骤

描述复现步骤,并提供复现 demo
游戏服通过 BrokerClientHelper.getInvokeModuleContext().invokeModuleMessage(cmdInfo, data)调用其他子服务器的请求,其实这个cmdInfo对应的cmd还是这个游戏服自己的。
同时在创建请求的时候,有设置了这个服务器的id:

  public RequestMessage createRequestMessage(CmdInfo cmdInfo, Object data, String logicServerId) {
        RequestMessage requestMessage = new RequestMessage();
        employ(requestMessage, cmdInfo, data);
        if (StringUtils.isNotEmpty(logicServerId)) {
            // 设置服务器id
            requestMessage.getHeadMetadata().setEndPointClientId(HashKit.hash32(logicServerId));
        }
        return requestMessage;
    }

版本

  • ioGame version:
    17.1.61
@mycorn mycorn changed the title 游戏服运行过程中,偶尔出出现 游戏服偶尔会报 RPC 超时的错误: com.alipay.remoting.rpc.exception.InvokeTimeoutException: Rpc invocation timeout[responseCommand TIMEOUT]!, Sep 27, 2024
@iohao
Copy link
Owner

iohao commented Sep 27, 2024

为了保证线程安全,默认情况下不支持调用本服 action 的,因为线程已经被当前 action 所占用。建议将被调用的逻辑放到一个 service 中,或将被调用方的 action 注入到当前 action 中调用。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Q&A;提问与交流 Question and Answer、exchange trick;使用技巧 trick;使用技巧
Projects
None yet
Development

No branches or pull requests

2 participants