一:简单搭建Eureka Server
- 创建一个maven项目
主要添加了spring-cloud-starter-netflix-eureka-server
倚赖
<?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.itmuch.cloud</groupId>
<artifactId>microservice-discovery-eureka</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<!-- 引入spring boot的依赖 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
<!-- 引入spring cloud的依赖 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Edgware.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<!-- 添加spring-boot的maven插件 -->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
- 启动类上需要添加
@EnableEurekaServer
声明这是一个Eureka Server - application.yml
server:
port: 8761 # 指定该Eureka实例的端口
eureka:
client:
registerWithEureka: false
fetchRegistry: false
serviceUrl:
defaultZone: http://localhost:8761/eureka/
# 参考文档:http://projects.spring.io/spring-cloud/docs/1.0.3/spring-cloud.html#_standalone_mode
# 参考文档:http://my.oschina.net/buwei/blog/618756
- 测试
启动Eureka Server ,访问http://localhost:8761/ 会出现如下界面,展示了当前ES的服务实例,常用信息,实例信息等.
二:将微服务注册到Eureka Server上
- 使用上篇中的microservice-simple-provider-user,更改项目名称为
microservice-provider-user
,添加下面的倚赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
- 配置application.yml
server:
port: 8000
spring:
application:
name: microservice-provider-user #指定注册到Eureka Server上的名称
jpa:
generate-ddl: false
show-sql: true
hibernate:
ddl-auto: none
datasource: # 指定数据源
platform: h2 # 指定数据源类型
schema: classpath:schema.sql # 指定h2数据库的建表脚本
data: classpath:data.sql # 指定h2数据库的数据脚本
logging: # 配置日志级别,让hibernate打印出执行的SQL
level:
root: INFO
org.hibernate: INFO
org.hibernate.type.descriptor.sql.BasicBinder: TRACE
org.hibernate.type.descriptor.sql.BasicExtractor: TRACE
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
instance:
prefer-ip-address: true #表示将Ip注册到Eureka上,默认值为false,表示使用主机的host
- 同理也可将上篇中的服务消费者项目也注册到Eureka Server中,在次项目名称可定为
microservice-consumer-movie
- 测试
启动microservice-discovery-eureka
,microservice-provider-user
和microservice-consumer-movie
,访问http://localhost:8761/,出现如下
三:Eureka Server 的高可用
虽然Eureka Server会缓存数据,但应用中的部分服务挂掉后会造成缓存无法更新,这时就需要构建一个高可用的Eureka集群. 在此将搭建一个双节点的Eureka Server集群.
- 复制上文中的项目microservice-discovery-eureka,并将artifactId改成
microservice-discovery-eureka-ha
- 打开C:\Windows\System32\drivers\etc 下的hosts文件,添加
127.0.0.1 peer1 peer2
- application.yml,其中使用连字符—将yum分割成三段
spring:
application:
name: microservice-discovery-eureka-ha
---
spring:
profiles: peer1 # 指定profile=peer1
server:
port: 8761
eureka:
instance:
hostname: peer1 # 指定当profile=peer1时,主机名是peer1
client:
serviceUrl:
defaultZone: http://peer2:8762/eureka/ # 将自己注册到peer2这个Eureka上面去
---
spring:
profiles: peer2
server:
port: 8762
eureka:
instance:
hostname: peer2
client:
serviceUrl:
defaultZone: http://peer1:8761/eureka/
- 其中第一段未指定Profile,则该段会对所以Profile生效
- 第二段和第三段配置了项目以Profile1启动时,配置该Eureka Server 的主机名为peer1,并将其注册到http://peer2:8762/eureka/, 而当配置项目以Profile2启动时则相反
4.将项目打成jar包分别执行java -jar microservice-discovery-eureka-ha-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer1
,java -jar microservice-discovery-eureka-ha-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer2
,即通过spring.profiles.active来指定使用那个profile启动
- 启动后分别访问
http://peer1:8761/
和http://peer2:8762/
,会发现有DS Replicas会有另外一个节点
四:将应用注册到Eureka Server集群上
以上面的microservice-provider-user项目为例,将配置该为如下即可
也可以只填写一个节点的地址,因为各个节点的数据是互通的