亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

PowerJob的TransportServiceAware工作流程源碼解讀

 更新時間:2024年01月18日 10:36:48   作者:codecraft  
這篇文章主要介紹了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)文章

  • Vert-x-通過異步的方式使用JDBC連接SQL

    Vert-x-通過異步的方式使用JDBC連接SQL

    在這篇文章中,我們將會看到怎樣在vert.x應(yīng)用中使用HSQL,當(dāng)然也可以使用任意JDBC,以及使用vertx-jdbc-client提供的異步的API,這篇文章的代碼在github
    2016-01-01
  • 如何使用IDEA的groovy腳本文件生成帶JPA注解的實體類(圖文詳解)

    如何使用IDEA的groovy腳本文件生成帶JPA注解的實體類(圖文詳解)

    這篇文章主要介紹了如何使用IDEA的groovy腳本文件生成帶JPA注解的實體類,本文通過圖文并茂實例相結(jié)合給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • Java中MyBatis的動態(tài)語句詳解

    Java中MyBatis的動態(tài)語句詳解

    這篇文章主要介紹了Java中MyBatis的動態(tài)語句詳解,動態(tài) SQL 是 MyBatis 的強大特性之一,通過不同參數(shù)生成不同的 SQL,可以動態(tài)地對數(shù)據(jù)持久層進行操作,而不需要每個數(shù)據(jù)訪問操作都要進行手動地拼接 SQL 語句,需要的朋友可以參考下
    2023-08-08
  • SpringBoot快速構(gòu)建應(yīng)用程序方法介紹

    SpringBoot快速構(gòu)建應(yīng)用程序方法介紹

    這篇文章主要介紹了SpringBoot快速構(gòu)建應(yīng)用程序方法介紹,涉及SpringBoot默認(rèn)的錯誤頁面,嵌入式Web容器層面的約定和定制等相關(guān)內(nèi)容,具有一定借鑒價值,需要的朋友可以參考下。
    2017-11-11
  • java實現(xiàn)數(shù)據(jù)庫的數(shù)據(jù)寫入到txt的方法

    java實現(xiàn)數(shù)據(jù)庫的數(shù)據(jù)寫入到txt的方法

    這篇文章主要為大家詳細介紹了java實現(xiàn)數(shù)據(jù)庫的數(shù)據(jù)寫入到txt的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • Spring關(guān)于@Configuration配置處理流程

    Spring關(guān)于@Configuration配置處理流程

    這篇文章主要介紹了Spring關(guān)于@Configuration配置處理流程,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-06-06
  • java創(chuàng)建多級目錄文件的實例講解

    java創(chuàng)建多級目錄文件的實例講解

    下面小編就為大家分享一篇java創(chuàng)建多級目錄文件的實例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-01-01
  • spring jpa ManyToMany原理及用法詳解

    spring jpa ManyToMany原理及用法詳解

    這篇文章主要介紹了spring jpa ManyToMany原理及用法詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-10-10
  • Java8 Optional原理及用法解析

    Java8 Optional原理及用法解析

    這篇文章主要介紹了Java8 Optional原理及用法解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-09-09
  • java中關(guān)于控件JTextArea的幾個方法

    java中關(guān)于控件JTextArea的幾個方法

    這篇文章主要介紹了java中關(guān)于控件JTextArea的幾個方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08

最新評論