Ignite實戰(zhàn)之二 第一個Data Grid應用

啟動一個Ignite實例

bin/ignite.sh

[17:10:44] Ignite node started OK (id=c44bebb1)
[17:10:44] Topology snapshot [ver=1, servers=1, clients=0, CPUs=4, heap=1.8GB]

創(chuàng)建maven工程,并加入相關依賴

<properties>
    <ignite.version>2.2.0</ignite.version>
</properties>
<dependencies>
    <dependency>
        <groupId>org.apache.ignite</groupId>
        <artifactId>ignite-core</artifactId>
        <version>${ignite.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.ignite</groupId>
        <artifactId>ignite-spring</artifactId>
        <version>${ignite.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.ignite</groupId>
        <artifactId>ignite-indexing</artifactId>
        <version>${ignite.version}</version>
    </dependency>
</dependencies>

創(chuàng)建Data Grid應用FirstCacheDemo


public class FirstCacheDemo {
    public static void main(String[] args) throws IgniteException {
        Ignite ignite = Ignition.start();
        IgniteCache<Integer, Object> cache = ignite.getOrCreateCache("c1");
        cache.clear();

        int keyCnt = 10;
        System.out.println("Synchronously put records ...");
        for (int i = 0; i < keyCnt; i++)
            cache.put(i, Integer.toString(i));

        for (int i = 0; i < keyCnt; i++)
            System.out.println("Got [key=" + i + ", val=" + cache.get(i) + "] ");

    }
}

運行后輸出為

[17:18:48] Ignite node started OK (id=0957a691)
[17:18:48] Topology snapshot [ver=12, servers=2, clients=0, CPUs=4, heap=3.6GB]
Synchronously put records ...
Got [key=0, val=0]
Got [key=1, val=1]
Got [key=2, val=2]
Got [key=3, val=3]
Got [key=4, val=4]
Got [key=5, val=5]
Got [key=6, val=6]

Got [key=7, val=7]
Got [key=8, val=8]
Got [key=9, val=9]

可以看出,put 是一個同步方法,其相對應的異步方法為 putAsync, 這也是Ignite大多數(shù)異步方法的命名規(guī)則。 我們將 put 改為 putAsync

System.out.println("Asynchronously put records ...");
for (int i = 0; i < keyCnt; i++)
    cache.putAsync(i, Integer.toString(i));

for (int i = 0; i < keyCnt; i++)
    System.out.println("Got [key=" + i + ", val=" + cache.get(i) + "] ");

輸出結果為

Asynchronously put records ...
Got [key=0, val=null]
Got [key=1, val=1]
Got [key=2, val=2]
Got [key=3, val=3]
Got [key=4, val=4]
Got [key=5, val=5]
Got [key=6, val=6]
Got [key=7, val=7]
Got [key=8, val=8]
Got [key=9, val=9]

可以看出,簡單的 get 方法不能保證數(shù)據(jù)能正常讀出,需要配合使用 IgniteFuture,等待所有 future 結束。

System.out.println("Asynchronously put records ...");
Collection<IgniteFuture<?>> futs = new ArrayList<>();
for (int i = 0; i < keyCnt; i++)
    futs.add(cache.putAsync(i, Integer.toString(i)));

// Wait for completion of all futures.
for (IgniteFuture<?> fut : futs)
    fut.get();

for (int i = 0; i < keyCnt; i++)
    System.out.println("Got [key=" + i + ", val=" + cache.get(i) + "] ");

在執(zhí)行就一切正常了

Asynchronously put records ...
Got [key=0, val=0]
Got [key=1, val=1]
Got [key=2, val=2]
Got [key=3, val=3]
Got [key=4, val=4]
Got [key=5, val=5]
Got [key=6, val=6]
Got [key=7, val=7]
Got [key=8, val=8]
Got [key=9, val=9]

Configure Ignite

之前我們使用了Ignite的默認配置,直接調(diào)用 Ignition.start() 就啟動了實例,同樣我們可以對所啟動的實例做特殊配置,一般有兩種方法

  • 通過code進行配置
 TcpDiscoverySpi spi = new TcpDiscoverySpi();
 TcpDiscoveryVmIpFinder ipFinder = new TcpDiscoveryVmIpFinder();
 ipFinder.setAddresses(Arrays.asList("10.xxx.xxx.xxx:47500..47509"));
 spi.setIpFinder(ipFinder);
 IgniteConfiguration cfg = new IgniteConfiguration();
 cfg.setDiscoverySpi(spi);
 // Enable client mode.
 cfg.setClientMode(true);
 Ignite ignite = Ignition.start(cfg);
  • 通過配置文件導入
  Ignite ignite = Ignition.start("config/xxx.xml");

直接這么寫會出錯,網(wǎng)上有人說在IDE里需要設置JVM變量 -DIGNITE_HOME 即可,但仍然失敗, 最終發(fā)現(xiàn)如下寫法是OK的

  Ignite ignite = Ignition.start("file:///D:\Work\ignitedemo\resource\example-cache.xml");

至此,一個比較完整的First Data Grid應用就算是OK了。

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容