elasticsearch中的絕大部分操作都是透過對應的action,這些action在action包中。它的架構如下圖所示:
這裡展示的是Action包的部分截圖,其中包含了各種不同功能對應的Action。各個action的包也都非常類似index。這些action都是從基礎的action繼承而來,因此它們的實作非常相似。下圖展示了indexaction的繼承關係
這些action只是一個代替品,沒有實作真正的功能,因此它們在實作上也非常容易。他們的主要功能是提供創建新的回應和請求的方法,並對應到相應的操作名稱。還拿indexaction為例,它的方法圖如下:
可以看到它只是提供了兩個新建response和request的方法,及一個字NAME字段,這個NAME欄位會用於後面action呼叫中。對應的功能實作在對應的transportAction中。
TransportAction介面被所有的tansportAction繼承。當客戶端呼叫client的相關介面時,client會將請求傳送到transportAction的execute上。每個功能的TransportAction實現了doExecute方法,功能的邏輯都在這個方法中實現,這裡先暫且不提,後面的功能分析中會看到對應的實現。
在client分析中有這樣一段程式碼:
TransportAction
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中文網其他相關文章!