第一個基於Apache Ignite的應用
翻譯:吳嘉俊,叩丁狼高階講師。
在本文中,我們會通過建立第一個Ignite應用,用於從分散式的快取中存放/獲取值,來進一步瞭解Ignite的使用。在第一個例子中,我們儘可能的用最簡單的程式碼來展示如何在Java應用中操作Apache Ignite叢集的資料。
本文的應用可以從GitHub中clone(https://github.com/srecon/the-apache-ignite-book/tree/master/chapters/chapter-2)
按照以下流程執行:
-
啟動你的Ignite節點。
-
建立一個Maven專案。
- 編譯應用。
- 執行應用。
我們一步一步來操作:
- 第一步
啟動一個Apache Ignite節點。使用以下命令:
$ IGNITE_HOME/bin/ignite.sh
- 第二步
建立一個Maven專案,當然可以從你熟悉的IDE建立,或者執行以下命令:
mvn archetype:generate -DartifactId=chapter-two -DgroupId=com.blu.imdg -DarchetypeArtifac\ tId=maven-archetype-quickstart -DinteractiveMode=false
上面的命令建立了一個charpter-two的資料夾。在這個資料夾下,你可以看到如下的專案結構:
在src/main/java資料夾下是專案的程式碼檔案,src/test/java下包含了專案的測試程式碼,pom.xml檔案是maven的配置管理檔案。在pom.xml檔案中包含了專案的依賴,構建等關鍵配置資訊。pom.xml檔案是很複雜的,但是對我們接下來要做的事情,不是必須理解的。
- 第三步
在pom.xml檔案中新增一下專案依賴:
<dependency> <groupId>org.apache.ignite</groupId> <artifactId>ignite-core</artifactId> <version>${ignite.version}</version> </dependency>
在pom.xml檔案中的properties節點中新增定義的變數值:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<ignite.version>2.4.0</ignite.version>
</properties>
你可以通過maven的命令來啟動應用。當然,你也可以構建一個可執行的jar檔案,包含應用所需的類,依賴,程式碼等等,這種方式對於在不同環境下部署,執行應用是非常方便的。為了構建jar包,我們需要在pom.xml中新增一些外掛:
<build>
<plugins>
<plugin>
<groupId>com.jolira</groupId>
<artifactId>onejar-maven-plugin</artifactId>
<version>1.4.4</version>
<executions>
<execution>
<id>build-query</id>
<configuration>
<mainClass>com.blu.imdg.HelloIgnite</mainClass>
<attachToBuild>true</attachToBuild>
<classifier>onejar</classifier>
<filename>HelloIgnite-runnable.jar</filename>
</configuration>
<goals>
<goal>one-jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
- 第四步
在src/main/java/com/blu/imdg資料夾下,新增我們的程式碼:
package com.blu.imdg;
import org.apache.ignite.Ignite;
import org.apache.ignite.IgniteCache;
import org.apache.ignite.Ignition;
import org.apache.ignite.configuration.IgniteConfiguration;
import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
import org.apache.ignite.spi.discovery.tcp.ipfinder.multicast.TcpDiscoveryMulticastIpFinder
public class HelloIgnite {
public static void main(String[] args) {
System.out.println("Hello Ignite");
// create a new instance of TCP Discovery SPI
TcpDiscoverySpi spi = new TcpDiscoverySpi();
// create a new instance of tcp discovery multicast ip finder TcpDiscoveryMulticastIpFinder tcMp = new TcpDiscoveryMulticastIpFinder(); tcMp.setAddresses(Arrays.asList("localhost")); // change your IP address here // set the multi cast ip finder for spi
spi.setIpFinder(tcMp);
// create new ignite configuration
IgniteConfiguration cfg = new IgniteConfiguration(); cfg.setClientMode(true);
// set the discovery spi to ignite configuration
cfg.setDiscoverySpi(spi);
// Start ignite
Ignite ignite = Ignition.start(cfg);
// get or create cache
IgniteCache < Integer, String > cache = ignite.getOrCreateCache("HelloWorld"); // put some cache elements
for (int i = 1; i <= 100; i++) {
cache.put(i, Integer.toString(i)); }
// get them from the cache and write to the console
for (int i = 1; i <= 100; i++) { System.out.println("Cache get:" + cache.get(i));
}
// close ignite instance
ignite.close();
}
}
程式碼非常簡單。我們來看看這個程式碼的每個部分。在main方法中,首先我們建立了一個TCP Discovery SPI,並且設定了一個廣播IP地址;
緊接著,我們將multi-cast IP finder傳給了SPI。當TCP發現啟動的時候,這個finder會發送一個請求廣播,並等待其他節點接受到這個請求,並把節點自身的地址響應返回。接下來我們建立了一個Ignite配置物件,並將我們的discoverySPI設定給配置物件。
在呼叫了start方法啟動Ignite例項之後,他把自己作為一個客戶端加入到了一個Ignite叢集中,接著我們建立了一個快取區域,名字叫做”HelloWorld”,並且放入了100個數字。在接下來的for迴圈中,我們依次從快取區域中讀取了這100個數字,並列印到控制檯。
最後,我們關閉了Ignite客戶端例項。
程式碼完成之後,接下來構建並執行應用。
- 第五步
執行構建命令:
$ mvn clean install
這個maven命令會執行clean命令,清除以前的構建內容,並重新編譯,測試,打包。命令完成之後,我們可以再target資料夾中找到我們的jar包。
- 第六步
執行jar檔案:
$ java -jar .\target\HelloIgnite-runnable.jar
首先,我們建立了一個新的Ignite客戶端例項,他會連線我們叢集中的隨機一個節點,在Ignite服務節點控制檯中,我們可以看到以下輸出:
接著,在我們的應用控制檯中,可以看到如下輸出:
我們通過Ignite visor管理太來驗證一下快取中的內容。Apache Ignite visor 命令臺工具提供了監控和管理Ignite叢集的功能。使用如下命令啟動visor控制檯:
$ IGNITE_HOME/bin/ignitevisorcmd.sh
使用如下命令驗證快取:
cache -a
我們可以在快取中看到我們的HelloWorld快取快的狀態:
在摘要資訊中可以很清楚的看到,快取的大小是100,堆外記憶體(off-heap)大小也是100.從2.0.1開始,預設情況下,Apache Ignite會將快取例項都存入堆外記憶體中。在後面的文章中,我們會更深入的來研究堆外記憶體和堆內記憶體(on-heap)的區別。注意一點,為了保證我們的第一個應用足夠簡單,我們並沒有介紹任何Spring對Ignite的支援。
原文:https://www.javacodegeeks.com/2018/10/apache-ignite-easy-java-application.html