PowerJob的TransportServiceAware工作流程源码解读
序
本文主要研究一下PowerJob的TransportServiceAware
TransportServiceAware
tech/powerjob/server/remote/aware/TransportServiceAware.java
public interface TransportServiceAware extends PowerJobAware {
void setTransportService(TransportService transportService);
}TransportServiceAware继承了PowerJobAware,它定义了setTransportService方法
FriendActor
tech/powerjob/server/remote/server/FriendActor.java
@Slf4j
@Component
@Actor(path = S4S_PATH)
public class FriendActor implements TransportServiceAware {
private TransportService transportService;
/**
* 处理存活检测的请求
*/
@Handler(path = S4S_HANDLER_PING, processType = ProcessType.NO_BLOCKING)
public AskResponse onReceivePing(Ping ping) {
return AskResponse.succeed(transportService.allProtocols());
}
@Handler(path = S4S_HANDLER_PROCESS, processType = ProcessType.BLOCKING)
public AskResponse onReceiveRemoteProcessReq(RemoteProcessReq req) {
AskResponse response = new AskResponse();
response.setSuccess(true);
try {
response.setData(JsonUtils.toBytes(RemoteRequestProcessor.processRemoteRequest(req)));
} catch (Throwable t) {
log.error("[FriendActor] process remote request[{}] failed!", req, t);
response.setSuccess(false);
response.setMessage(ExceptionUtils.getMessage(t));
}
return response;
}
@Override
public void setTransportService(TransportService transportService) {
this.transportService = transportService;
}
}FriendActor用于处理服务器之间的通讯,它定义了onReceivePing、onReceiveRemoteProcessReq这两个handler,其中onReceivePing返回transportService.allProtocols(),onReceiveRemoteProcessReq则执行RemoteRequestProcessor.processRemoteRequest(req)
RemoteProcessReq
tech/powerjob/server/remote/server/redirector/RemoteProcessReq.java
@Getter
@Setter
@Accessors(chain = true)
public class RemoteProcessReq implements PowerSerializable {
private String className;
private String methodName;
private String[] parameterTypes;
private Object[] args;
}RemoteProcessReq定义了className、methodName、parameterTypes、args属性
RemoteRequestProcessor
tech/powerjob/server/remote/server/redirector/RemoteRequestProcessor.java
public class RemoteRequestProcessor {
public static Object processRemoteRequest(RemoteProcessReq req) throws ClassNotFoundException {
Object[] args = req.getArgs();
String[] parameterTypes = req.getParameterTypes();
Class<?>[] parameters = new Class[parameterTypes.length];
for (int i = 0; i < parameterTypes.length; i++) {
parameters[i] = Class.forName(parameterTypes[i]);
Object arg = args[i];
if (arg != null) {
args[i] = JSONObject.parseObject(JSONObject.toJSONBytes(arg), parameters[i]);
}
}
Class<?> clz = Class.forName(req.getClassName());
Object bean = SpringUtils.getBean(clz);
Method method = ReflectionUtils.findMethod(clz, req.getMethodName(), parameters);
assert method != null;
return ReflectionUtils.invokeMethod(method, bean, args);
}
}RemoteRequestProcessor的processRemoteRequest主要是通过Class.forName加载对应的类,然后从spring中获取对应的bean,再通过ReflectionUtils查找方法,最后执行invoke
小结
TransportServiceAware继承了PowerJobAware,它定义了setTransportService方法;FriendActor用于处理服务器之间的通讯,它定义了onReceivePing、onReceiveRemoteProcessReq这两个handler,其中onReceivePing返回transportService.allProtocols(),onReceiveRemoteProcessReq则执行RemoteRequestProcessor.processRemoteRequest(req)。
以上就是PowerJob的TransportServiceAware工作流程源码解读的详细内容,更多关于PowerJob TransportServiceAware的资料请关注脚本之家其它相关文章!
相关文章
idea2020.1最新版永久破解/pycharm也可用(步骤详解)
这篇文章主要介绍了idea2020.1最新版永久破解/pycharm也可用,本文给大家分享简单实现步骤,通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2020-04-04
新版本IntelliJ IDEA 构建maven,并用Maven创建一个web项目(图文教程)
这篇文章主要介绍了新版本IntelliJ IDEA 构建maven,并用Maven创建一个web项目的图文教程,需要的朋友可以参考下2018-01-01
Springboot获取bean实例之SpringContextUtil详解
这篇文章主要介绍了Springboot获取bean实例之SpringContextUtil使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2025-03-03
Java使用Spire.XLS for Java实现Excel的行列冻结与解除
这篇文章主要为大家详细介绍了Java如何使用Spire.XLS for Java实现Excel的行列冻结与解除,文中的示例代码讲解详细,有需要的小伙伴可以了解下2025-10-10
Spring中使用Async进行异步功能开发实战示例(大文件上传为例)
本文以大文件上传为例,首先讲解在未进行程序异步化时,程序的运行机制和具体表现,然后讲解如何进行异步化的改造,让程序进行异步执行,通过本文不仅能让你掌握如何进行Event的事件开发,同时还能掌握在Spring中如何进行异步开发,熟悉@Async的具体用法,感兴趣的朋友一起看看吧2024-08-08


最新评论