springcloud + eureka 项目搭建及部署
1.Eureka简介
1.Eureka主要负责微服务架构中的服务治理功能,服务治理是微服务架构中必不可少的一部分。
2.子系统将服务的信息(ip,端口)注册到Eureka,那么子系统间的调用,将不再通过ip,而是通过服务名来调用。
3.Eureka专门用于给其他服务注册的称为Eureka Server(服务注册中心),其余注册到Eureka Server的服务称为Eureka Client 。
4.Eureka Client分为服务提供者和服务消费者。一个服务是服务提供者的同时,也可以是服务消费者。单纯的服务消费者,无需注册到Eureka。
5.Eureka服务治理机制:
1).服务提供者:
服务注册(Register):服务启动时,会发送Rest请求,将自己的服务信息注册到Eureka Server。
服务续约(Renew):注册完服务后会向Eureka Server发送心跳(默认周期30s)。
服务下线(Cancel):服务实例正常关闭时,会发送Rest请求到Eureka Server。
2).服务消费者:
获取服务(GET):服务消费者启动时,会发送Rest请求到Eureka Server,获取注册的服务清单。
服务调用:服务消费者获取服务清单后,可以通过服务名取得服务提供者的数据信息。
3).Eureka Server:
失效剔除:每隔一段时间(默认60s),会将清单中超时(默认90s)没有续约的服务剔除。
自我保护:Eureka Server在运行期间会统计15min内心跳失败的比例是否低于85%(可能由于网络问题导致),若低于,则会将服务实例信息保护起来,让这些实例不会过期。
2.Eureka Server单一节点创建
开发工具:STS
Spring Boot版本:2.3.6.RELEASE
Spring Cloud版本:Hoxton.SR9
1.File—>New—>Maven Project,新建一个Maven Project,packaging选择pom,作为parent
2.修改parent的pom文件
<packaging>pom</packaging>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.6.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Hoxton.SR9</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>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<!-- 打包 -->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
3.在parent项目上鼠标右键,New—>Other—>Maven—>Maven Module,创建一个Eureka Server,我命名为eureka-server1,并修改其pom文件
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
4.在eureka-server1项目内新建application.yml文件和主启动类文件
application.yml
spring:
application:
name: eureka-server1
security:
user:
name: admin
password: 123456
server:
port: 8761
eureka:
instance:
hostname: localhost
client:
register-with-eureka: false #false表示不向服务中心注册自己
fetch-registry: false #false表示自己就是注册中心,不需要从eureka server获取注册信息
service-url:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
主启动类:
package com.springcloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
public static void main(String[] args) {
// TODO Auto-generated method stub
SpringApplication.run(EurekaServerApplication.class, args);
}
}
项目结构:
5.启动eureka-server1,并访问localhost:8761
3.Eureka Server多节点创建
1.在parent项目上鼠标右键,New—>Other—>Maven—>Maven Module,再创建两个Eureka Server,我命名为eureka-server2和eureka-server3
2.由于之前是单节点,所以我们在application.yml中配置的defaultZone为
http://${eureka.instance.hostname}:${server.port}/eureka/
现在我们做的是多节点配置,hostname不能全为localhost,所以我们需要在本机设置虚拟域名。在本机C:\Windows\System32\drivers\etc路径下找到hosts文件,添加如下:
127.0.0.1 www.localhost1.com
127.0.0.1 www.localhost2.com
127.0.0.1 www.localhost3.com
3.修改eureka-server1的application.yml的hostname及defaultZone
spring:
application:
name: eureka-server1
security:
user:
name: admin
password: 123456
server:
port: 8761
eureka:
instance:
hostname: eureka-server1
client:
register-with-eureka: false #false表示不向服务中心注册自己
fetch-registry: false #false表示自己就是注册中心,不需要从eureka server获取注册信息
service-url:
#单个eureka server
# defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
#eureka server集群
defaultZone: http://www.localhost2.com:8762/eureka/,http://www.localhost3.com:8763/eureka/
4.eureka-server2配置如下
pom.xml新增如下:
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
新建application.yml
spring:
application:
name: eureka-server2
security:
user:
name: admin
password: 123456
server:
port: 8762
eureka:
instance:
hostname: eureka-server2
client:
register-with-eureka: false #false表示不向服务中心注册自己
fetch-registry: false #false表示自己就是注册中心,不需要从eureka server获取注册信息
service-url:
#单个eureka server
# defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
#eureka server集群
defaultZone: http://www.localhost1.com:8761/eureka/,http://www.localhost3.com:8763/eureka/
主启动类和eureka-server1相同
5.eureka-server3配置如下
pom.xml新增如下:
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
新建application.yml
spring:
application:
name: eureka-server3
security:
user:
name: admin
password: 123456
server:
port: 8763
eureka:
instance:
hostname: eureka-server3
client:
register-with-eureka: false #false表示不向服务中心注册自己
fetch-registry: false #false表示自己就是注册中心,不需要从eureka server获取注册信息
service-url:
#单个eureka server
# defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
#eureka server集群
defaultZone: http://www.localhost1.com:8761/eureka/,http://www.localhost2.com:8762/eureka/
主启动类与eureka-server1相同
6.启动三个eureka server并访问
4.Eureka Server项目部署
在部署eureka server集群时,我们需要修改application.yml为对应server的IP地址,其他操作与单节点部署一致。所以我们以单节点示例。
1.修改application.yml配置文件的hostname和defaultZone
2.在项目上鼠标右键,Run AS—>Maven install,在target目录下找到生成的jar包
3.在服务器上的usr目录下新建文件夹eureka-server,并将jar上传到此路径
cd /usr
mkdir eureka-server
4.切换到eureka-server,并启动
# 关闭防火墙
systemctl stop firewalld.servcie
cd eureka-server
java -jar eureka-server1-0.0.1-SNAPSHOT.jar
5.通过服务器ip+port访问
5.源码地址:
https://github.com/DamonLiu666/springcloud_test