1. 程式人生 > >第一個基於Apache Ignite的應用

第一個基於Apache Ignite的應用

翻譯:吳嘉俊,叩丁狼高階講師。

在本文中,我們會通過建立第一個Ignite應用,用於從分散式的快取中存放/獲取值,來進一步瞭解Ignite的使用。在第一個例子中,我們儘可能的用最簡單的程式碼來展示如何在Java應用中操作Apache Ignite叢集的資料。

本文的應用可以從GitHub中clone(https://github.com/srecon/the-apache-ignite-book/tree/master/chapters/chapter-2)

按照以下流程執行:

  1. 啟動你的Ignite節點。

  2. 建立一個Maven專案。

  3. 編譯應用。
  4. 執行應用。

我們一步一步來操作:

  • 第一步

啟動一個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的資料夾。在這個資料夾下,你可以看到如下的專案結構:

image.png

在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服務節點控制檯中,我們可以看到以下輸出:

image.png

接著,在我們的應用控制檯中,可以看到如下輸出:

image.png

我們通過Ignite visor管理太來驗證一下快取中的內容。Apache Ignite visor 命令臺工具提供了監控和管理Ignite叢集的功能。使用如下命令啟動visor控制檯:

$ IGNITE_HOME/bin/ignitevisorcmd.sh

使用如下命令驗證快取:

cache -a

我們可以在快取中看到我們的HelloWorld快取快的狀態:

image.png

在摘要資訊中可以很清楚的看到,快取的大小是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