1.官方文档
https://apacheignite.readme.io/docs
2.下载igntie
https://ignite.apache.org/download.cgi#binaries
http://mirrors.tuna.tsinghua.edu.cn/apache//ignite/2.6.0/apache-ignite-fabric-2.6.0-bin.zip
3.运行ignite
解压apache-ignite-fabric-2.6.0-bin.zip
将IGNITE_HOME/lib/optional下的ignite-rest-http和ignite-urideploy放到IGNITE_HOME/lib下
默认配置文件是 IGNITE_HOME/config/default-config.xml
<bean id="grid.cfg" class="org.apache.ignite.configuration.IgniteConfiguration">
<property name="deploymentSpi">
<bean class="org.apache.ignite.spi.deployment.uri.UriDeploymentSpi">
<property name="temporaryDirectoryPath" value="G:/apache-ignite-fabric-2.6.0-bin/tmp"/>
<property name="uriList">
<list>
<value>file://freq=20000@localhost/G:/apache-ignite-fabric-2.6.0-bin/work</value>
</list>
</property>
</bean>
</property>
</bean>
进入到IGNITE_HOME/bin/ignite.bat(ignite.sh)
4.新建一个maven(quickstart)项目
5.pom引入maven包
依赖包
<dependency>
<groupId>org.apache.ignite</groupId>
<artifactId>ignite-core</artifactId>
<version>2.6.0</version>
</dependency>
<dependency>
<groupId>org.apache.ignite</groupId>
<artifactId>ignite-spring</artifactId>
<version>2.6.0</version>
</dependency>
<dependency>
<groupId>org.apache.ignite</groupId>
<artifactId>ignite-tools</artifactId>
<version>2.6.0</version>
</dependency>
插件
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.eclipse.m2e</groupId>
<artifactId>lifecycle-mapping</artifactId>
<version>1.0.0</version>
<configuration>
<lifecycleMappingMetadata>
<pluginExecutions>
<pluginExecution>
<pluginExecutionFilter>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<versionRange>[2.0,)</versionRange>
<goals>
<goal>copy-dependencies</goal>
</goals>
</pluginExecutionFilter>
<action>
<ignore />
</action>
</pluginExecution>
</pluginExecutions>
</lifecycleMappingMetadata>
</configuration>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>${project.build.sourceEncoding}</encoding>
<showWarnings>true</showWarnings>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.8</version>
<dependencies>
<dependency>
<groupId>org.apache.ignite</groupId>
<artifactId>ignite-tools</artifactId>
<version>2.6.0</version>
</dependency>
</dependencies>
<executions>
<execution>
<id>gar</id>
<phase>package</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<target>
<taskdef name="gar"
classname="org.apache.ignite.util.antgar.IgniteDeploymentGarAntTask" />
<gar
destfile="G:/apache-ignite-fabric-2.6.0-bin/work/demo-ignite.gar"
descrdir="${basedir}/META-INF"
basedir="${basedir}/target/classes" />
</target>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-lib</id>
<phase>prepare-package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<regenerateFile>true</regenerateFile>
<excludeGroupIds>org.apache.ignite,junit,commons-logging</excludeGroupIds>
<excludeArtifactIds>spring-test,hamcrest-core</excludeArtifactIds>
<outputDirectory>${basedir}/target/classes/lib</outputDirectory>
<excludeTransitive>false</excludeTransitive>
<stripVersion>true</stripVersion>
<includeScope>runtime</includeScope>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
私服
<repositories>
<repository>
<id>releases</id>
<url>http://www.gridgainsystems.com/nexus/content/repositories/external/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
6.创建自定义task
package com.example.ignite.task;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.apache.ignite.IgniteException;
import org.apache.ignite.compute.ComputeJob;
import org.apache.ignite.compute.ComputeJobAdapter;
import org.apache.ignite.compute.ComputeJobResult;
import org.apache.ignite.compute.ComputeTaskName;
import org.apache.ignite.compute.ComputeTaskNoResultCache;
import org.apache.ignite.compute.ComputeTaskSplitAdapter;
@ComputeTaskName(value = "myComputeTaskSplitAdapter")
@ComputeTaskNoResultCache
public class MyComputeTaskSplitAdapter extends ComputeTaskSplitAdapter<String,Integer> {
private static final long serialVersionUID = -7974337800633463190L;
private long task_start_time;
private long task_end_time;
@Override
protected Collection<? extends ComputeJob> split(int gridSize, String arg) throws IgniteException {
task_start_time = System.currentTimeMillis();
List<ComputeJobAdapter> list = new ArrayList<>(10);
for(int i =0;i<10;i++) {
final int num = i;
list.add(new MyComputeJobAdapter(num));
}
return list;
}
@Override
public Integer reduce(List<ComputeJobResult> results) throws IgniteException {
task_end_time = System.currentTimeMillis();
System.out.println("任务执行时间"+(task_end_time - task_start_time)/1000 +"秒");
return 0;
}
}
7.创建自定义job
package com.example.ignite.task;
import org.apache.ignite.IgniteException;
import org.apache.ignite.compute.ComputeJobAdapter;
public class MyComputeJobAdapter extends ComputeJobAdapter {
private static final long serialVersionUID = 1L;
private int num;
public MyComputeJobAdapter() {
super();
}
public MyComputeJobAdapter(int num) {
super();
this.num = num;
}
@Override
public Object execute() throws IgniteException {
System.out.println("i am in "+num+"thread");
return num;
}
}
8.在project/META-INF/创建ignite.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.1.xsd">
<util:list id="tasks">
<value>com.example.ignite.task.MyComputeTaskSplitAdapter</value>
</util:list>
</beans>
9打包、部署
run as install
10.等20秒执行任务
http://localhost:8080/ignite?cmd=exe&name=myComputeTaskSplitAdapter&p1=param1
11.项目中使用spring
package com.example.demo.spring;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class DemoIgniteAppSpringContext {
private static ApplicationContext ctx = null;
static {
ctx = new ClassPathXmlApplicationContext(new String[] { "applicationContext.xml" });
}
@SuppressWarnings("unchecked")
public static <T extends Object> T getBean(String beanName) {
return (T) ctx.getBean(beanName);
}
}
package com.example.demo.spring;
import java.io.Serializable;
import com.example.demo.receiveMail.service.ReceiveMailService;
public class DemoIgniteAppLocal implements Serializable {
private static final long serialVersionUID = 1L;
public static final ThreadLocal<ReceiveMailService> receiveMailService = new ThreadLocal<ReceiveMailService>() {
@Override
protected ReceiveMailService initialValue() {
super.initialValue();
return DemoIgniteAppSpringContext.getBean("receiveMailService");
}
@Override
public ReceiveMailService get() {
return super.get();
}
};
}
使用
DemoIgniteAppLocal.receiveMailService.get()