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用于處理服務(wù)器之間的通訊,它定義了onReceivePing、onReceiveRemoteProcessReq這兩個handler,其中onReceivePing返回transportService.allProtocols(),onReceiveRemoteProcessReq則執(zhí)行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加載對應(yīng)的類,然后從spring中獲取對應(yīng)的bean,再通過ReflectionUtils查找方法,最后執(zhí)行invoke
小結(jié)
TransportServiceAware繼承了PowerJobAware,它定義了setTransportService方法;FriendActor用于處理服務(wù)器之間的通訊,它定義了onReceivePing、onReceiveRemoteProcessReq這兩個handler,其中onReceivePing返回transportService.allProtocols(),onReceiveRemoteProcessReq則執(zhí)行RemoteRequestProcessor.processRemoteRequest(req)。
以上就是PowerJob的TransportServiceAware工作流程源碼解讀的詳細內(nèi)容,更多關(guān)于PowerJob TransportServiceAware的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
如何使用IDEA的groovy腳本文件生成帶JPA注解的實體類(圖文詳解)
這篇文章主要介紹了如何使用IDEA的groovy腳本文件生成帶JPA注解的實體類,本文通過圖文并茂實例相結(jié)合給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-07-07SpringBoot快速構(gòu)建應(yīng)用程序方法介紹
這篇文章主要介紹了SpringBoot快速構(gòu)建應(yīng)用程序方法介紹,涉及SpringBoot默認(rèn)的錯誤頁面,嵌入式Web容器層面的約定和定制等相關(guān)內(nèi)容,具有一定借鑒價值,需要的朋友可以參考下。2017-11-11java實現(xiàn)數(shù)據(jù)庫的數(shù)據(jù)寫入到txt的方法
這篇文章主要為大家詳細介紹了java實現(xiàn)數(shù)據(jù)庫的數(shù)據(jù)寫入到txt的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-07-07Spring關(guān)于@Configuration配置處理流程
這篇文章主要介紹了Spring關(guān)于@Configuration配置處理流程,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-06-06