使用Apache Ignite瘦客户端– Apache Ignite内部博客
從2.4.0版本開始,Apache Ignite引入了一種新的連接到Ignite群集的方法,該方法允許與Ignite群集進(jìn)行通信而無需啟動Ignite客戶端節(jié)點(diǎn)。 從歷史上看,Apache Ignite提供了客戶端和服務(wù)器節(jié)點(diǎn)兩個概念。 點(diǎn)燃旨在用作輕量級模式的客戶端節(jié)點(diǎn),該節(jié)點(diǎn)不存儲數(shù)據(jù)(但是它可以存儲在高速緩存附近),并且不執(zhí)行任何計(jì)算任務(wù)。 主要是,客戶端節(jié)點(diǎn)用于與服務(wù)器進(jìn)行遠(yuǎn)程通信,并允許使用整套Ignite API來操縱Ignite緩存。 Ignite客戶端節(jié)點(diǎn)有兩個主要缺點(diǎn):
- 只要Ignite客戶端節(jié)點(diǎn)連接到Ignite群集,它就會成為群集拓?fù)涞囊徊糠帧?拓?fù)湓酱?#xff0c;維護(hù)難度就越大。
- 在客戶端模式下,Apache Ignite節(jié)點(diǎn)會消耗大量資源來執(zhí)行緩存操作。
為了解決上述問題,Apache Ignite提供了一種新的二進(jìn)制客戶端協(xié)議,用于以任何編程語言或平臺實(shí)現(xiàn)瘦Ignite客戶端。
請注意,“瘦”一詞意味著它不會啟動任何與Ignite群集進(jìn)行通信的Ignite節(jié)點(diǎn),也不會實(shí)現(xiàn)任何發(fā)現(xiàn)/通信SPI邏輯。
瘦客戶端通過TCP套接字連接到Ignite群集,并使用定義明確的二進(jìn)制協(xié)議執(zhí)行CRUD操作。 該協(xié)議是完全基于套接字的請求-響應(yīng)樣式協(xié)議。 該協(xié)議被設(shè)計(jì)為足夠嚴(yán)格以確保通信中的標(biāo)準(zhǔn)化(例如連接握手,消息長度等),但仍然足夠靈活以使開發(fā)人員可以擴(kuò)展該協(xié)議以實(shí)現(xiàn)自定義功能。
Apache Ignite在以下內(nèi)容中提供了簡要的數(shù)據(jù)格式和通信詳細(xì)信息:
文檔使用二protocol.Ignite已經(jīng)支持.NET和Java瘦客戶機(jī)基礎(chǔ)上的協(xié)議,并計(jì)劃發(fā)布瘦客戶機(jī)主要語言,如goLang,Python等。但是,你可以實(shí)現(xiàn)你的瘦客戶機(jī)頂部通過使用二進(jìn)制協(xié)議,可以選擇任何您喜歡的編程語言。
還要注意,由于它通過中間節(jié)點(diǎn)工作,因此Apache Ignite瘦客戶端的性能略低于Ignite客戶端節(jié)點(diǎn)。 假設(shè)您有兩個Apache Ignite A,B節(jié)點(diǎn),并且您正在使用瘦客戶機(jī)C從集群中檢索數(shù)據(jù)。 使用瘦客戶端C,您已連接到節(jié)點(diǎn)B,并且每當(dāng)嘗試檢索屬于節(jié)點(diǎn)A的任何數(shù)據(jù)時,請求始終通過客戶端B。對于Ignite客戶端節(jié)點(diǎn),它將發(fā)送請求。直接到節(jié)點(diǎn)A。
在大多數(shù)情況下,您不必關(guān)心消息格式如何,或套接字握手如何執(zhí)行。 每種編程語言的瘦客戶端都為您封裝了艱苦的工作。 無論如何,如果您想深入研究Ignite二進(jìn)制協(xié)議或在創(chuàng)建自己的瘦客戶機(jī)時遇到任何問題,請參考Ignite文檔。
在繼續(xù)討論更高級的主題之前,讓我們看一個使用Ignite瘦客戶端的簡單應(yīng)用程序。 在這個簡單的應(yīng)用程序中,我向您展示了開始使用瘦客戶機(jī)所需的點(diǎn)點(diǎn)滴滴。 示例的源代碼可在GitHub存儲庫中找到 ,請參閱第2章。
步驟1 。 從GitHub存儲庫克隆或下載項(xiàng)目。 如果您打算從頭開始開發(fā)項(xiàng)目,請?jiān)趐om.xml文件中添加以下maven依賴項(xiàng)。 瘦客戶機(jī)唯一需要的ignite-core庫,其余庫僅用于日志記錄。
<dependency><groupId>org.apache.ignite</groupId><artifactId>ignite-core</artifactId><version>2.6.0</version> </dependency> <!-- Logging wih SLF4J --> <dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.6.1</version> </dependency> <dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.0.1</version> </dependency> <dependency><groupId>ch.qos.logback</groupId><artifactId>logback-core</artifactId><version>1.0.1</version> </dependency> 第二步 。 現(xiàn)在,讓我們創(chuàng)建一個名為HelloThinClient的新Java類。
第三步 。 復(fù)制并粘貼以下源代碼。 不要忘記保存文件。
步驟4.讓我們仔細(xì)看一下我們上面編寫的程序。
private static final Logger logger = LoggerFactory.getLogger(HelloThinClient.class);private static final String HOST = "127.0.0.1";private static final String PORT = "10800";private static final String CACHE_NAME = "thin-cache";首先,我們聲明了一些常量:記錄器,主機(jī)IP地址,端口和我們要創(chuàng)建的緩存名稱。 如果您使用其他IP地址,則應(yīng)在此處進(jìn)行更改。 端口10800是Ignite瘦客戶端的默認(rèn)端口。
СlientConfiguration cfg = new ClientConfiguration().setAddresses(HOST+":"+PORT); 這些是程序中下一個令人興奮的行。 我們創(chuàng)建了一個點(diǎn)燃實(shí)例
СlientConfiguration并傳遞了我們上面聲明的地址。 在下一個try-catch塊中,我們定義了一個新緩存,名稱為 精簡緩存并放置2個鍵值對。 我們還使用了Ignition.startClient方法來初始化與Ignite節(jié)點(diǎn)的連接。
后來,我們檢索了鍵Vladimir的值并將其打印在控制臺中。
步驟5 。 如果尚未啟動Apache Ignite單節(jié)點(diǎn)集群,請啟動它。 在您喜歡的終端中使用以下命令。
$ IGNITE_HOME/bin/ignite.sh步驟6 。 要生成項(xiàng)目,請發(fā)出以下命令。
$ mvn clean install 這將運(yùn)行Maven,告訴它執(zhí)行安裝目標(biāo)。 此目標(biāo)將編譯,測試和打包您的項(xiàng)目代碼,然后將其復(fù)制到本地依賴項(xiàng)存儲庫中。 成功編譯后,第一次構(gòu)建過程將花費(fèi)幾分鐘,名為的可執(zhí)行jar
HelloThinClient-runnable.jar將在目標(biāo)目錄中創(chuàng)建。
步驟7 。 通過鍵入以下命令來運(yùn)行應(yīng)用程序。
$ java -jar .\target\HelloThinClient-runnable.jar您應(yīng)該在終端中看到很多日志。 在日志末尾,您應(yīng)該會找到類似的內(nèi)容。
該應(yīng)用程序通過TCP套接字連接到Ignite節(jié)點(diǎn),并在緩存精簡緩存上執(zhí)行放置和獲取操作。 如果您查看Ignite節(jié)點(diǎn)控制臺,您應(yīng)該注意到Ignite群集拓?fù)渖形锤摹?
翻譯自: https://www.javacodegeeks.com/2019/01/apache-ignite-client-apache-ignite.html
總結(jié)
以上是生活随笔為你收集整理的使用Apache Ignite瘦客户端– Apache Ignite内部博客的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C#三打一网络扑克游戏软件开发(一)
- 下一篇: 关于代理服务器