啟動一個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了。