首頁  >  文章  >  Java  >  elasticsearch java客戶端action怎麼實現

elasticsearch java客戶端action怎麼實現

WBOY
WBOY轉載
2023-05-22 08:43:501463瀏覽

elasticsearch中的絕大部分操作都是透過對應的action,這些action在action包中。它的架構如下圖所示:

elasticsearch java客戶端action怎麼實現

這裡展示的是Action包的部分截圖,其中包含了各種不同功能對應的Action。各個action的包也都非常類似index。這些action都是從基礎的action繼承而來,因此它們的實作非常相似。下圖展示了indexaction的繼承關係

elasticsearch java客戶端action怎麼實現

這些action只是一個代替品,沒有實作真正的功能,因此它們在實作上也非常容易。他們的主要功能是提供創建新的回應和請求的方法,並對應到相應的操作名稱。還拿indexaction為例,它的方法圖如下:

elasticsearch java客戶端action怎麼實現

可以看到它只是提供了兩個新建response和request的方法,及一個字NAME字段,這個NAME欄位會用於後面action呼叫中。對應的功能實作在對應的transportAction中。

elasticsearch java客戶端action怎麼實現

TransportAction介面被所有的tansportAction繼承。當客戶端呼叫client的相關介面時,client會將請求傳送到transportAction的execute上。每個功能的TransportAction實現了doExecute方法,功能的邏輯都在這個方法中實現,這裡先暫且不提,後面的功能分析中會看到對應的實現。

在client分析中有這樣一段程式碼:

TransportAction transportAction = actions.get((ClientAction)action)它的作用就是根據action取得TransportAction。因為action只是代理。 The implementation of these associations is carried out in the ActionModule, as demonstrated in the following code:

registerAction(NodesInfoAction.INSTANCE, TransportNodesInfoAction.class);
        registerAction(NodesStatsAction.INSTANCE, TransportNodesStatsAction.class);
        registerAction(NodesShutdownAction.INSTANCE, TransportNodesShutdownAction.class);
        registerAction(NodesRestartAction.INSTANCE, TransportNodesRestartAction.class);
        registerAction(NodesHotThreadsAction.INSTANCE, TransportNodesHotThreadsAction.class);
        registerAction(ClusterStatsAction.INSTANCE, TransportClusterStatsAction.class);
        registerAction(ClusterStateAction.INSTANCE, TransportClusterStateAction.class);
        registerAction(ClusterHealthAction.INSTANCE, TransportClusterHealthAction.class)

只有一部分內容展示在這裡,其中module會將相應的action和TransportAction綁定起來。這樣在client需要收到請求時會根據對於的action實例來尋找對應的tansportAction實例,最終請求在它們下面處理。

以上是elasticsearch java客戶端action怎麼實現的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除