利用eureka构建一个简单的springCloud分布式集群
前言:了解eureka的服务端和客户端
Eureka是Netflix开发的服务发现框架,SpringCloud将它集成在自己的子项目
spring-cloud-netflix中,实现SpringCloud的服务发现功能。Eureka包含两个组件:
Eureka Server和Eureka Client。
Eureka Server提供服务注册服务,各个节点启动后,会在Eureka Server中进行注
册,这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息,服务节点
的信息可以在界面中直观的看到。
Eureka Client是一个java客户端,用于简化与Eureka Server的交互,客户端同时也
有一个内置的、使用轮询(round-robin)负载算法的负载均衡器。在应用启动后,将会
向Eureka Server发送心跳,默认周期为30秒,如果Eureka Server在多个心跳周期内没有
接收到某个节点的心跳,Eureka Server将会从服务注册表中把这个服务节点移除(默认90
秒)。
一、创建一个父工程
1、父工程主要用来管理子模块的jar包依赖
pom文件如下:
<?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>com.offcn</groupId> <artifactId>microservice_cloud_01</artifactId> <version>1.0-SNAPSHOT</version> <modules> <module>microservice_cloud_02_api</module> <module>microservice_cloud_03_provider_product_8001</module> <module>microservice_cloud_04_consumer_product_80</module> <module>microservice_cloud_06_eureka_6002</module> <module>microservice_cloud_06_eureka_6001</module> </modules> <!--父工程 手动指定pom--> <packaging>pom</packaging> <!----> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.7.RELEASE</version> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <!--jdk版本1.8--> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <!--junit版本--> <junit.version>4.12</junit.version> <!--SpringCloud版本--> <spring-cloud.version>Finchley.SR2</spring-cloud.version> </properties> <!--父工程只做依赖管理,不做实际依赖--> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <!--maven项目只能单继承,因此这里使用 import--> <scope>import</scope> </dependency> <!--mybatis整合springboot--> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.2</version> </dependency> <!--druid--> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.12</version> </dependency> <!--mysql驱动--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.13</version> </dependency> <!--junit测试--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.version}</version> <scope>test</scope> </dependency> </dependencies> </dependencyManagement> </project>
二、创建一个子模块作为第一个eureka服务端
1、pom文件
<?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"> <parent> <artifactId>microservice_cloud_01</artifactId> <groupId>com.offcn</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>microservice_cloud_06_eureka_6001</artifactId> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> </dependencies> </project>
2、配置文件
#内置的tomcat服务启动监听端口号
server:
port: 6001
#EurekaServer配置
eureka:
instance:
hostname: eureka6001.com
client:
register-with-eureka: false #此EurekaServer不在注册到其他的注册中心
fetch-registry: false #不在从其他中心中心拉取服务器信息
service-url:
defaultZone: http://eureka6002.com:6002/eureka #注册中心访问地址,两个eureka之间相互注册,构建集群,当某一个服务端瘫痪,另外一个还能用
3、主启动类
1 package com.offcn.springcloud; 2 3 import org.springframework.boot.SpringApplication; 4 import org.springframework.boot.autoconfigure.SpringBootApplication; 5 import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; 6 import org.springframework.context.annotation.Configuration; 7 8 @SpringBootApplication 9 @EnableEurekaServer 10 public class EurekaServer_6001 { 11 12 public static void main(String[] args) { 13 SpringApplication.run(EurekaServer_6001.class,args); 14 } 15 }
三、创建一个子模块作为第二个euraka服务端,构建集群
1、pom依赖
<?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"> <parent> <artifactId>microservice_cloud_01</artifactId> <groupId>com.offcn</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>microservice_cloud_06_eureka_6002</artifactId> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> </dependencies> </project>
2、配置文件
#内置的tomcat服务启动监听端口号
server:
port: 6002
#EurekaServer配置
eureka:
instance:
hostname: eureka6002.com
client:
register-with-eureka: false #此EurekaServer不在注册到其他的注册中心
fetch-registry: false #不在从其他中心中心拉取服务器信息
service-url:
defaultZone: http://eureka6001.com:6001/eureka #注册中心访问地址,两台euraka服务端相互注册
3、主启动类
1 package com.offcn.springcloud; 2 3 import org.springframework.boot.SpringApplication; 4 import org.springframework.boot.autoconfigure.SpringBootApplication; 5 import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; 6 7 @SpringBootApplication 8 @EnableEurekaServer 9 public class EurekaServer_6002 { 10 public static void main(String[] args) { 11 SpringApplication.run(EurekaServer_6002.class,args); 12 } 13 }
四、创建两个euraka服务端遇到的问题
由于是在同一台电脑上,因此主机ip相同,为了更好的显示效果,上面将主机ip 和域名映射
步骤1:找到C:\Windows\System32\drivers\etc下的hosts文件
步骤2:将主机ip和域名进行映射
此时我们就可以用映射的域名来代替主机ip了,可以更好的演示效果
五、创建一个子模块作为euraka客户端
1、pom依赖
<?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"> <parent> <artifactId>microservice_cloud_01</artifactId> <groupId>com.offcn</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>microservice_cloud_03_provider_product_8001</artifactId> <dependencies> <!--microservice_cloud_02_apixian--> <dependency> <groupId>com.offcn</groupId> <artifactId>microservice_cloud_02_api</artifactId> <version>1.0-SNAPSHOT</version> </dependency> <!--web启动器--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--test--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> </dependency> <!--SpringBoot整合Mybatis--> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> </dependency> <!--druid--> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> </dependency> <!--mysql驱动--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <!--eureka-client--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> </dependencies> </project>
2、配置文件
server:
port: 8001
spring:
application:
name: microservice-product #这个很重要,这在以后的服务与服务之间相互调用一般都是根据这个name
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/springcloud?serverTimezone=UTC
username: root
password: ROOT
dbcp2:
min-idle: 5 #最小连接数
initial-size: 5 #初始化连接数
max-total: 20 #最大连接数
max-wait-millis: 150 #等待连接获取的最大超时时间
mybatis:
config-location: classpath:mybatis/mybatis-config.xml
type-aliases-package: com.offcn.springcloud.entities # 所有Entity别名类所在包,因私在mapper映射文件中,就不需要写全类名了,只用写类名就行
#指定mapper映射文件的位置,当mapper映射文件和mapper接口不同包的情况下,配置这个就会生效
mapper-locations: classpath:mybatis/mapper/**/*.xml
eureka:
client:
register-with-eureka: true #此EurekaServer注册到其他的注册中心
fetch-registry: true #从其他中心中心拉取服务器信息
service-url:
defaultZone: http://eureka6002.com:6002/eureka,http:///eureka6001.com:6001/eureka #注册中心访问地址
3、主启动类
1 package com.offcn.springcloud; 2 3 import org.mybatis.spring.annotation.MapperScan; 4 import org.springframework.boot.SpringApplication; 5 import org.springframework.boot.autoconfigure.SpringBootApplication; 6 import org.springframework.cloud.netflix.eureka.EnableEurekaClient; 7 8 @SpringBootApplication 9 @MapperScan("com.offcn.springcloud.mapper") 10 @EnableEurekaClient 11 public class HelloApplication { 12 public static void main(String[] args) { 13 SpringApplication.run(HelloApplication.class,args); 14 } 15 16 }
六、测试
1、访问第一个eureka服务端
2、访问第二个服务端