接口 InvokeModuleContext
- 所有已知子接口:
CommunicationAggregationContext
- 所有已知实现类:
BrokerClientItem
public interface InvokeModuleContext
内部模块通讯上下文,内部模块指的是游戏逻辑服
单个逻辑服与单个逻辑服通信请求-有响应值(可跨进程)
单个逻辑服与单个逻辑服通信请求-无响应值(可跨进程)
单个逻辑服与同类型多个逻辑服通信请求(可跨进程)
获取内部模块通讯上下文
// 游戏逻辑服通讯上下文
InvokeModuleContext invokeModuleContext = BrokerClientHelper.getInvokeModuleContext();
默认情况下,跨服且有返回值的 action 调用,则都是同步的;
如果想要使用异步的方式,可以通过 CompletableFuture 或虚拟线程来实现。
example async : 通过 CompletableFuture 实现;
CompletableFuture<YourMsg> future = CompletableFuture.supplyAsync(() -> {
// 路由:这个路由是将要访问逻辑服的路由(表示你将要去的地方)
CmdInfo cmdInfo = ...
// 游戏逻辑服通讯上下文
InvokeModuleContext invokeModuleContext = ...
// 根据路由信息来请求其他子服务器(其他逻辑服)的数据
return invokeModuleContext.invokeModuleMessageData(cmdInfo, YourMsg.class);
});
... 你的其他逻辑
var msg = future.get();
log.info("message : {} ", msg);
example async : 通过 CompletableFuture 实现的回调写法;
CompletableFuture<YourMsg> future = CompletableFuture.supplyAsync(() -> {
// 路由:这个路由是将要访问逻辑服的路由(表示你将要去的地方)
CmdInfo cmdInfo = ...
// 游戏逻辑服通讯上下文
InvokeModuleContext invokeModuleContext = ...
// 根据路由信息来请求其他子服务器(其他逻辑服)的数据
return invokeModuleContext.invokeModuleMessageData(cmdInfo, YourMsg.class);
}).thenAccept(msg -> {
// 回调写法
log.info("message : {}", msg);
});
- 作者:
- 渔民小镇
- 日期:
- 2022-06-07
-
方法概要
修饰符和类型方法说明default ResponseCollectMessageinvokeModuleCollectMessage(CmdInfo cmdInfo) 模块之间的访问,访问【同类型】的多个逻辑服default ResponseCollectMessageinvokeModuleCollectMessage(CmdInfo cmdInfo, Object data) 模块之间的访问,访问【同类型】的多个逻辑服 exampleinvokeModuleCollectMessage(RequestMessage requestMessage) 模块之间的访问,访问【同类型】的多个逻辑服default ResponseMessageinvokeModuleMessage(CmdInfo cmdInfo) 根据路由信息来请求其他子服务器(其他逻辑服)的数据 exampledefault ResponseMessageinvokeModuleMessage(CmdInfo cmdInfo, Object data) 根据路由信息来请求其他子服务器(其他逻辑服)的数据 exampleinvokeModuleMessage(RequestMessage requestMessage) 根据路由信息来请求其他子服务器(其他逻辑服)的数据 exampledefault <T> TinvokeModuleMessageData(CmdInfo cmdInfo, Class<T> clazz) 根据路由信息来请求其他子服务器(其他逻辑服)的数据 exampledefault <T> TinvokeModuleMessageData(CmdInfo cmdInfo, Object data, Class<T> clazz) 根据路由信息来请求其他子服务器(其他逻辑服)的数据 exampledefault <T> TinvokeModuleMessageData(RequestMessage requestMessage, Class<T> clazz) 根据 RequestMessage 来请求其他子服务器(其他逻辑服)的数据 exampledefault voidinvokeModuleVoidMessage(CmdInfo cmdInfo) 根据路由信息来请求其他子服务器(其他逻辑服)的方法,并且不需要返回值 exampledefault voidinvokeModuleVoidMessage(CmdInfo cmdInfo, Object data) 根据路由信息来请求其他子服务器(其他逻辑服)的方法,并且不需要返回值 examplevoidinvokeModuleVoidMessage(RequestMessage requestMessage) 根据路由信息来请求其他子服务器(其他逻辑服)的方法,并且不需要返回值 example
-
方法详细资料
-
invokeModuleVoidMessage
根据路由信息来请求其他子服务器(其他逻辑服)的方法,并且不需要返回值 example// 内部模块通讯上下文,内部模块指的是游戏逻辑服 InvokeModuleContext invokeModuleContext = ... // 请求房间逻辑服来创建房间,并且不需要返回值 // 路由、业务参数 invokeModuleContext.invokeModuleVoidMessage(cmdInfo, data);- 参数:
cmdInfo- cmdInfodata- 请求参数
-
invokeModuleVoidMessage
根据路由信息来请求其他子服务器(其他逻辑服)的方法,并且不需要返回值 example// 内部模块通讯上下文,内部模块指的是游戏逻辑服 InvokeModuleContext invokeModuleContext = ... // 请求房间逻辑服来创建房间,并且不需要返回值 // 路由、业务参数 invokeModuleContext.invokeModuleVoidMessage(cmdInfo);- 参数:
cmdInfo- cmdInfo
-
invokeModuleVoidMessage
根据路由信息来请求其他子服务器(其他逻辑服)的方法,并且不需要返回值 example// 内部模块通讯上下文,内部模块指的是游戏逻辑服 InvokeModuleContext invokeModuleContext = ... // 请求房间逻辑服来创建房间,并且不需要返回值 // 路由、业务参数 invokeModuleContext.invokeModuleVoidMessage(requestMessage);- 参数:
requestMessage- requestMessage
-
invokeModuleMessageData
根据路由信息来请求其他子服务器(其他逻辑服)的数据 examplepublic void count() { // 路由:这个路由是将要访问逻辑服的路由(表示你将要去的地方) CmdInfo cmdInfo = ... YourData data = ... // 模块通讯上下文 InvokeModuleContext invokeModuleContext = ... // 根据路由信息来请求其他子服务器(其他逻辑服)的数据 YourMsg msg = invokeModuleContext.invokeModuleMessageData(cmdInfo, data, YourMsg.class); log.info("message : {} ", msg); }- 类型参数:
T- t- 参数:
cmdInfo- 路由信息data- 请求参数clazz- response data class- 返回:
- pb 对象
-
invokeModuleMessageData
根据路由信息来请求其他子服务器(其他逻辑服)的数据 examplepublic void count() { // 路由:这个路由是将要访问逻辑服的路由(表示你将要去的地方) CmdInfo cmdInfo = ... // 模块通讯上下文 InvokeModuleContext invokeModuleContext = ... // 根据路由信息来请求其他子服务器(其他逻辑服)的数据 YourMsg msg = invokeModuleContext.invokeModuleMessageData(cmdInfo, YourMsg.class); log.info("message : {} ", msg); }- 类型参数:
T- t- 参数:
cmdInfo- 路由信息clazz- response data class- 返回:
- response data 解析后的数据
-
invokeModuleMessageData
根据 RequestMessage 来请求其他子服务器(其他逻辑服)的数据 examplepublic void count() { RequestMessage request = ... // 模块通讯上下文 InvokeModuleContext invokeModuleContext = ... // 根据路由信息来请求其他子服务器(其他逻辑服)的数据 YourMsg msg = invokeModuleContext.invokeModuleMessageData(request, YourMsg.class); log.info("message : {} ", msg); }- 类型参数:
T- t- 参数:
requestMessage- RequestMessageclazz- response data class- 返回:
- response data 解析后的数据
-
invokeModuleMessage
根据路由信息来请求其他子服务器(其他逻辑服)的数据 examplepublic void count() { // 路由:这个路由是将要访问逻辑服的路由(表示你将要去的地方) CmdInfo cmdInfo = ... YourData data = ... // 模块通讯上下文 InvokeModuleContext invokeModuleContext = ... // 根据路由信息来请求其他子服务器(其他逻辑服)的数据 ResponseMessage responseMessage = invokeModuleContext.invokeModuleMessage(cmdInfo, data); // 得到逻辑服返回的业务数据 YourMsg msg = responseMessage.getData(YourMsg.class); log.info("message : {} ", msg); }- 参数:
cmdInfo- cmdInfodata- 请求参数- 返回:
- ResponseMessage
-
invokeModuleMessage
根据路由信息来请求其他子服务器(其他逻辑服)的数据 examplepublic void count() { // 路由:这个路由是将要访问逻辑服的路由(表示你将要去的地方) CmdInfo cmdInfo = ... // 模块通讯上下文 InvokeModuleContext invokeModuleContext = ... // 根据路由信息来请求其他子服务器(其他逻辑服)的数据 ResponseMessage responseMessage = invokeModuleContext.invokeModuleMessage(cmdInfo); // 得到逻辑服返回的业务数据 YourMsg msg = responseMessage.getData(YourMsg.class); log.info("message : {} ", msg); }- 参数:
cmdInfo- cmdInfo- 返回:
- ResponseMessage
-
invokeModuleMessage
根据路由信息来请求其他子服务器(其他逻辑服)的数据 examplepublic void count() { RequestMessage request = ... // 模块通讯上下文 InvokeModuleContext invokeModuleContext = ... // 根据路由信息来请求其他子服务器(其他逻辑服)的数据 ResponseMessage responseMessage = invokeModuleContext.invokeModuleMessage(request); // 得到逻辑服返回的业务数据 YourMsg msg = responseMessage.getData(YourMsg.class); log.info("message : {} ", msg); }- 参数:
requestMessage- requestMessage- 返回:
- ResponseMessage
-
invokeModuleCollectMessage
模块之间的访问,访问【同类型】的多个逻辑服 examplepublic void count() { // 路由:这个路由是将要访问逻辑服的路由(表示你将要去的地方) CmdInfo cmdInfo = ... YourData data = ... // 模块通讯上下文 InvokeModuleContext invokeModuleContext = ... // 根据路由信息来请求其他【同类型】的多个子服务器(其他逻辑服)数据 var responseCollectMessage = invokeModuleContext.invokeModuleCollectMessage(cmdInfo, data); // 每个逻辑服返回的数据集合 List<ResponseCollectItemMessage> messageList = responseCollectMessage.getMessageList(); for (ResponseCollectItemMessage responseCollectItemMessage : messageList) { ResponseMessage responseMessage = responseCollectItemMessage.getResponseMessage(); // 得到逻辑服返回的业务数据 YourMsg msg = responseMessage.getData(YourMsg.class); log.info("message : {} ", msg); } }- 参数:
cmdInfo- 路由信息data- 业务数据- 返回:
- ResponseCollectMessage
-
invokeModuleCollectMessage
模块之间的访问,访问【同类型】的多个逻辑服模块A 访问 模块B 的某个方法,因为只有模块B持有这些数据,这里的模块指的是逻辑服。 假设启动了多个模块B,分别是:模块B-1、模块B-2、模块B-3、模块B-4 等。框架支持访问【同类型】的多个逻辑服,并把多个相同逻辑服结果收集到一起。examplepublic void count() { // 模块通讯上下文 InvokeModuleContext invokeModuleContext = ... // 路由:这个路由是将要访问逻辑服的路由(表示你将要去的地方) CmdInfo cmdInfo = ... // 根据路由信息来请求其他【同类型】的多个子服务器(其他逻辑服)数据 ResponseCollectMessage responseCollectMessage = invokeModuleContext.invokeModuleCollectMessage(cmdInfo); // 每个逻辑服返回的数据集合 List<ResponseCollectItemMessage> messageList = responseCollectMessage.getMessageList(); for (ResponseCollectItemMessage responseCollectItemMessage : messageList) { ResponseMessage responseMessage = responseCollectItemMessage.getResponseMessage(); // 得到逻辑服返回的业务数据 YourMsg msg = responseMessage.getData(YourMsg.class); log.info("message : {} ", msg); } }- 参数:
cmdInfo- 路由信息- 返回:
- ResponseCollectMessage
-
invokeModuleCollectMessage
模块之间的访问,访问【同类型】的多个逻辑服模块A 访问 模块B 的某个方法,因为只有模块B持有这些数据,这里的模块指的是逻辑服。 假设启动了多个模块B,分别是:模块B-1、模块B-2、模块B-3、模块B-4 等。 框架支持访问【同类型】的多个逻辑服,并把多个相同逻辑服结果收集到一起。examplepublic void count() { RequestMessage request = ... // 模块通讯上下文 InvokeModuleContext invokeModuleContext = ... // 根据路由信息来请求其他【同类型】的多个子服务器(其他逻辑服)数据 ResponseCollectMessage responseCollectMessage = invokeModuleContext.invokeModuleCollectMessage(request); // 每个逻辑服返回的数据集合 List<ResponseCollectItemMessage> messageList = responseCollectMessage.getMessageList(); for (ResponseCollectItemMessage responseCollectItemMessage : messageList) { ResponseMessage responseMessage = responseCollectItemMessage.getResponseMessage(); // 得到逻辑服返回的业务数据 YourMsg msg = responseMessage.getData(YourMsg.class); log.info("message : {} ", msg); } }- 参数:
requestMessage- requestMessage- 返回:
- ResponseAggregationMessage
-