【从0开始】Spring Cloud + Ignite教程
Ignite
就是一个K-V的分布式缓存框架
官方文档
官方文档:https://www.ignite-service.cn/doc/java/,本文主要手把手对Spring Cloud+Apache Ignite实现一个简单实例便于理解,具体Ignite的细节学习请参考文档。
序
新电脑,因此我一切也是从0开始。
零、JDK
0.1 下载
网址: https://www.oracle.com/java/technologies/downloads/#java8
注册登录Oracle账户后,开始下载
由于网速太慢,改为在此下载:http://www.winwin7.com/soft/50828.html
0.2 安装
下载后一直点下一步安装就行
0.3 配置
打开【系统属性】界面,点击【高级】--》【环境变量】,在【系统变量】下点击【新建】
变量名输入:JAVA_HOME
,变量值输入:C:\Program Files\Java\jdk1.8.0_131
继续新建系统变量
变量名:CLASSPATH
变量值:.;%JAVA_HOME%\lib;
点击系统变量中的Path,点击编辑,输入:%JAVA_HOME%\bin
并保存
打开cmd窗口输入java -version
进行测试
一、IDEA
1.1 下载
网址: https://www.jetbrains.com/idea/download/#section=windows,记得要下载专业版
1.2 安装
打开后选择Start trial,注册账号并登录
二、MySQL
2.1 下载
网址:https://www.mysql.com/
输入之前注册的Oracle账户进行下载,这次网速很快
2.2 安装
下载后,解压到了C盘
2.3 配置
创建一个txt文件,输入以下内容,然后命名为my.ini
[mysql] # 设置mysql客户端默认字符集 default-character-set=utf8 [mysqld] # 设置3306端口 port = 3306 # 设置mysql的安装目录 basedir = C:\mysql-8.0.30-winx64 # 设置mysql数据库的数据的存放目录 datadir = C:\mysql-8.0.30-winx64\data # 允许最大连接数 max_connections=20 # 服务端使用的字符集默认为8比特编码的latin1字符集 character-set-server=utf8 # 创建新表时将使用的默认存储引擎 default-storage-engine=INNODB # 创建模式 sql_mode = NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
进入该目录进行初始化
.err文件里有初始账号密码
以管理员身份进行服务安装
启动
2.4 MySQL可视化客户端
下载链接:http://www.navicat.com.cn/download/navicat-premium
一路下一步安装即可,输入root和密码
创建了一个数据库叫ignite
三、EurekaServer
3.1 创建一个空的maven工程
将其pom.xml修改如下:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.example</groupId> <artifactId>demo</artifactId> <packaging>pom</packaging> <version>1.0-SNAPSHOT</version> <modules> <module>eureka-server</module> </modules> <properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.7.RELEASE</version> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Finchley.SR2</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> </project>
3.2 创建eureka-server
在当前模块下创建一个子module
引入eureka-server的依赖
<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> <version>2.0.2.RELEASE</version> </dependency> </dependencies>
在 eurekaserver 子工程的 resources 目录下创建 application.yml 配置如下:
server: port: 8761 #当前eureka server 服务端口 eureka: client: register-with-eureka: false #是否将当前的 eureka server 服务作为客户端进行注册 fetch-registry: false #是否获取其他 eureka server 服务的数据 service-url: defaultZone: http://localhost:8761/eureka/ #注册中心的访问地址
创建启动类:
@SpringBootApplication //SpringBoot 服务的入口 @EnableEurekaServer public class EurekaServer { public static void main(String[] args) { SpringApplication.run(EurekaServer.class,args); } }
四、部署Ignite
4.1 创建一个module
4.2 引入依赖
在父工程的pom.xml引入ignite的依赖,此时刚才的子项目ignite-server由于继承了父工程的pom,已经可以开发ignite
除此之外,还需要引入mysql所需的依赖
4.3 创建数据库表
本例使用JDBC作为ignite集群间通信的实现方式,根据Ignite的JDBC探测器相关源码发现,存储ip地址的数据库表名为tbl_addrs,因此我们需要创建一个这样的数据库表。以及两个字段:hostname、port。
使用navicat创建这样的数据库表:
4.4 编写服务器程序
服务器程序如下,直接使用main方法即可:
public static void main(String[] args) { MysqlDataSource dataSource = new MysqlDataSource(); dataSource.setURL("jdbc:mysql://localhost:3306/ignite"); dataSource.setUser("root"); dataSource.setPassword("/QMdpls8Zseg"); // 创建一个Ignite配置 IgniteConfiguration cfg = new IgniteConfiguration(); // 创建一个基于TCP的发现其他Ignite实例的Spi对象 TcpDiscoverySpi discoverySpi = new TcpDiscoverySpi(); // 创建一个基于JDBC的IP探测器 TcpDiscoveryJdbcIpFinder ipFinder = new TcpDiscoveryJdbcIpFinder(); ipFinder.setDataSource(dataSource);//设置数据源 discoverySpi.setIpFinder(ipFinder);//设置IP探测器 cfg.setDiscoverySpi(discoverySpi);//设置Spi //启动Ignite服务器 Ignition.start(cfg); }
五、EurekaConsumer
5.1 创建eureka-consumer
接下来,我们需要编写eureka客户端程序,调用ignite的客户端程序来进行操作。
在其pom文件中添加:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> <version>2.0.2.RELEASE</version> </dependency>
创建启动类:
在 eureka-consumer子工程的 resources 目录下创建 application.yml 配置如下:
5.2 配置数据源
创建一个数据源配置类,代码和ignite-server里一样
5.3 编写客户端程序
代码和服务器端一样,只是多了一行设置客户端模式
六、测试
6.1 启动eureka-server
6.2 启动eureka-consumer
6.3 启动Ignite服务器程序
启动后观察控制台,目前已连接一台服务器,0台客户端(Ignite节点默认是服务器模式)。
可以观察到tbl_addrs中增加了当前服务器的IP地址:
6.4 测试
在浏览器输入:localhost:8080/ignite/test
观察服务器程序,客户端已经成功链接
接下来就可以参考官方文档调用Ignite实例进行其他操作了。