SpringCloud系列四:Eureka 服务发现框架(定义 Eureka 服务端、Eureka 服务信息、Eureka 发现管理、Eureka 安全配置、Eureka-HA(高可用) 机制、Eureka 服务打包部署)

时间:2023-12-31 08:13:44

1、概念:Eureka 服务发现框架

2、具体内容

对于服务发现框架可以简单的理解为服务的注册以及使用操作步骤,例如:在 ZooKeeper 组件,这个组件里面已经明确的描述了一个服务的注册以及发现操作流程,在整个 Rest 架构里面,会存在有大量的微服务的信息。

在 SpringCloud 之中使用了大量的 Netflix 的开源项目,而其中 Eureka 就属于 Netflix 提供的发现服务组件,所有的微服务在使用之中全部向 Eureka 之中进行注册,而后客户端直接利用 Eureka 进行服务信息的获得。

SpringCloud系列四:Eureka 服务发现框架(定义 Eureka 服务端、Eureka 服务信息、Eureka 发现管理、Eureka 安全配置、Eureka-HA(高可用) 机制、Eureka 服务打包部署)

Eureka 的主要作用实际上和 ZooKeeper 是非常类似的,但是在 SpringCloud 虽然支持有 ZooKeeper,不过从官方的宣传角度来说并不支持这样处理,推荐使用 Eureka,因为速度更快,同时该服务组件是以程序的形式出现的,也就是说你只需要编写一个程序的项目类,而后就可以启动 Eureka 注册服务了。

 2.1、定义 Eureka 服务端

1、 为了方便进行统一的微服务的管理,建议创建一个新的项目:microcloud-eureka-7001;

2、 【microcloud-eureka-7001】的 pom.xml 配置文件,追加相应的依赖支持库

        <dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>

3、 【microcloud-eureka-7001】现在修改 application.yml 配置文件,在这个配置文件里面主要进行 eureka 服务的定义。

server:
port: 7001
eureka:
instance: # eureak实例定义
hostname: eureka-7001.com # 定义Eureka实例所在的主机名称

4、 【microcloud-eureka-7001】修改 hosts 配置文件,追加 eureka 的映射地址。

127.0.0.1 eureka-7001.com

5、 【microcloud-eureka-7001】修改 Eureka 程序启动类,追加有 Eureka 服务声明的注解@EnableEurekaServer:

SpringCloud系列四:Eureka 服务发现框架(定义 Eureka 服务端、Eureka 服务信息、Eureka 发现管理、Eureka 安全配置、Eureka-HA(高可用) 机制、Eureka 服务打包部署)
package cn.study.microcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer
public class Eureka_7001_StartSpringCloudApplication {
public static void main(String[] args) {
SpringApplication.run(Eureka_7001_StartSpringCloudApplication.class, args);
}
}
SpringCloud系列四:Eureka 服务发现框架(定义 Eureka 服务端、Eureka 服务信息、Eureka 发现管理、Eureka 安全配置、Eureka-HA(高可用) 机制、Eureka 服务打包部署)

6、 运行程序后通过浏览器执行路径:http://eureka-7001.com:7001/

SpringCloud系列四:Eureka 服务发现框架(定义 Eureka 服务端、Eureka 服务信息、Eureka 发现管理、Eureka 安全配置、Eureka-HA(高可用) 机制、Eureka 服务打包部署)

2.2、向 Eureka 中注册部门微服务

现在 Eureka 已经可以正常启用了,那么随后就需要在项目之中将所有的微服务信息注册到 Eureka 服务之中,那么这样就可以被客户端执行并且调用了。

1、 【microcloud-provider-dept-8001】修改 pom.xml 配置文件,追加有 eureka 的相关依赖支持包;

SpringCloud系列四:Eureka 服务发现框架(定义 Eureka 服务端、Eureka 服务信息、Eureka 发现管理、Eureka 安全配置、Eureka-HA(高可用) 机制、Eureka 服务打包部署)
            <groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
SpringCloud系列四:Eureka 服务发现框架(定义 Eureka 服务端、Eureka 服务信息、Eureka 发现管理、Eureka 安全配置、Eureka-HA(高可用) 机制、Eureka 服务打包部署)

2、 【microcloud-provider-dept-8001】修改 application.yml 配置文件,在这个配置文件之中主要是定义要进行注册的 Eureka 服务的地址,而这个地址就是 Eureka 的客户端配置。

eureka:
client: # 客户端进行Eureka注册的配置
service-url:
defaultZone: http://eureka-7001.com:7001/eureka

3、 【microcloud-provider-dept-8001】修改项目的运行主类,在这个主类上追加有 Eureka 客户端的启用注解@EnableEurekaClient

SpringCloud系列四:Eureka 服务发现框架(定义 Eureka 服务端、Eureka 服务信息、Eureka 发现管理、Eureka 安全配置、Eureka-HA(高可用) 机制、Eureka 服务打包部署)
package cn.study.microcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
@SpringBootApplication
@EnableEurekaClient
public class Dept_8001_StartSpringCloudApplication {
public static void main(String[] args) {
SpringApplication.run(Dept_8001_StartSpringCloudApplication.class, args);
}
}
SpringCloud系列四:Eureka 服务发现框架(定义 Eureka 服务端、Eureka 服务信息、Eureka 发现管理、Eureka 安全配置、Eureka-HA(高可用) 机制、Eureka 服务打包部署)

此时由于存在有“@EnableEurekaClient”注解信息,所以当服务启动之后该服务会自动注册到Eureka服务器之中;

4、 【microcloud-provider-dept-8001】修改application.yml配置文件,为此微服务设置一个名字(这个名字将作为日后负载均衡)

spring:
application:
name: microcloud-provider-dept

 2.3、Eureka 服务信息

现在虽然成功的实现了微服务的 Eureka 注册,但是所表现出来的微服务的信息并不完整,因为给定的地址信息是你的主机名称,而我们现在是一个自定义的路径地址。

1、 【microcloud-provider-dept-8001】修改 application.yml 配置文件,追加主机名称的显示:

eureka:
client: # 客户端进行Eureka注册的配置
service-url:
defaultZone: http://eureka-7001.com:7001/eureka
instance:
instance-id: dept-8001.com # 在信息列表时显示主机名称

重新访问eureka注册中心可以看到服务名称变了

SpringCloud系列四:Eureka 服务发现框架(定义 Eureka 服务端、Eureka 服务信息、Eureka 发现管理、Eureka 安全配置、Eureka-HA(高可用) 机制、Eureka 服务打包部署)

2、 【microcloud-provider-dept-8001】在服务信息查看的时候应该以 IP 地址作为连接项。

SpringCloud系列四:Eureka 服务发现框架(定义 Eureka 服务端、Eureka 服务信息、Eureka 发现管理、Eureka 安全配置、Eureka-HA(高可用) 机制、Eureka 服务打包部署)
eureka:
client: # 客户端进行Eureka注册的配置
service-url:
defaultZone: http://eureka-7001.com:7001/eureka
instance:
instance-id: dept-8001.com # 在信息列表时显示主机名称
prefer-ip-address: true # 访问的路径变为IP地址
SpringCloud系列四:Eureka 服务发现框架(定义 Eureka 服务端、Eureka 服务信息、Eureka 发现管理、Eureka 安全配置、Eureka-HA(高可用) 机制、Eureka 服务打包部署)

SpringCloud系列四:Eureka 服务发现框架(定义 Eureka 服务端、Eureka 服务信息、Eureka 发现管理、Eureka 安全配置、Eureka-HA(高可用) 机制、Eureka 服务打包部署)

3、 【microcloud-provider-dept-8001】如果现在要想查看所有的微服务详细信息,则需要修改 pom.xml 文件,追加监控配置:

        <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

4、 【microcloud】修改 pom.xml 文件,追加一个信息匹配的插件:

SpringCloud系列四:Eureka 服务发现框架(定义 Eureka 服务端、Eureka 服务信息、Eureka 发现管理、Eureka 安全配置、Eureka-HA(高可用) 机制、Eureka 服务打包部署)
        <resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<delimiters>
<delimiter>$</delimiter>
</delimiters>
</configuration>
</plugin>
SpringCloud系列四:Eureka 服务发现框架(定义 Eureka 服务端、Eureka 服务信息、Eureka 发现管理、Eureka 安全配置、Eureka-HA(高可用) 机制、Eureka 服务打包部署)

5、 【microcloud-provider-dept-8001】修改 application.yml 配置文件,追加 info 的相关信息:

info:
app.name: study-microcloud
company.name: www.study.cn
build.artifactId: $project.artifactId$
build.version: $project.verson$

 2.4、Eureka 发现管理

在实际的项目运行过程之中需要通过 Eureka 作为所有微服务的监控处理程序,但是对于监控程序那么就必然要面临以下问题:

· 新服务追加的时候应该立刻可以进行注册;

· 当某一个服务下线之后应该可以进行清理;

1、 【microcloud-eureka-7001】设置服务的清理间隔,修改 application.yml 配置文件

SpringCloud系列四:Eureka 服务发现框架(定义 Eureka 服务端、Eureka 服务信息、Eureka 发现管理、Eureka 安全配置、Eureka-HA(高可用) 机制、Eureka 服务打包部署)
eureka:
server:
eviction-interval-timer-in-ms: 60000 # 设置清理的间隔时间,而后这个时间使用的是毫秒单位(默认是60秒)
client: # 客户端进行Eureka注册的配置
service-url:
defaultZone: http://eureka-7001.com:7001/eureka
register-with-eureka: false # 当前的微服务不注册到eureka之中
fetch-registry: false # 不通过eureka获取注册信息
instance: # eureak实例定义
hostname: eureka-7001.com # 定义Eureka实例所在的主机名称
SpringCloud系列四:Eureka 服务发现框架(定义 Eureka 服务端、Eureka 服务信息、Eureka 发现管理、Eureka 安全配置、Eureka-HA(高可用) 机制、Eureka 服务打包部署)

一旦配置了清理的间隔为 1 秒的时间,则会在每秒的时候进行一次服务的清理过程

 一般情况下,该配置不建议进行修改,默认就是 60 秒,也就是说你的微服务如果 60 秒没有心跳了,那么就认为可以清理掉。

2、 【microcloud-eureka-7001】在 Eureka 里面有一个问题,这个问题就是它默认支持有保护模式的概念,所谓的保护模式指的是 即便现在某一个微服务不可用了,eureka 不会清理,依然会进行该微服务信息的保存。

SpringCloud系列四:Eureka 服务发现框架(定义 Eureka 服务端、Eureka 服务信息、Eureka 发现管理、Eureka 安全配置、Eureka-HA(高可用) 机制、Eureka 服务打包部署)

如果现在要想去改变这种保护模式的启用,则可以修改 application.yml 配置文件:

SpringCloud系列四:Eureka 服务发现框架(定义 Eureka 服务端、Eureka 服务信息、Eureka 发现管理、Eureka 安全配置、Eureka-HA(高可用) 机制、Eureka 服务打包部署)
eureka:
server:
enable-self-preservation: true # 设置为false表示关闭保护模式
eviction-interval-timer-in-ms: 60000 # 设置清理的间隔时间,而后这个时间使用的是毫秒单位(默认是60秒)
client: # 客户端进行Eureka注册的配置
service-url:
defaultZone: http://eureka-7001.com:7001/eureka
register-with-eureka: false # 当前的微服务不注册到eureka之中
fetch-registry: false # 不通过eureka获取注册信息
instance: # eureak实例定义
hostname: eureka-7001.com # 定义Eureka实例所在的主机名称
SpringCloud系列四:Eureka 服务发现框架(定义 Eureka 服务端、Eureka 服务信息、Eureka 发现管理、Eureka 安全配置、Eureka-HA(高可用) 机制、Eureka 服务打包部署)

理论上只有关闭了保护模式之后才可以进行无效微服务的清理操作,但是很多时候 Eureka 里面也会自带有清除过程。

3、 【microcloud-provider-dept-8001】微服务客户端之所以可以与 Eureka 之间保持联系,依靠的是心跳机制,也就是说你客户端 可以自己来进行心跳的配置处理,修改 application.yml 配置文件:

SpringCloud系列四:Eureka 服务发现框架(定义 Eureka 服务端、Eureka 服务信息、Eureka 发现管理、Eureka 安全配置、Eureka-HA(高可用) 机制、Eureka 服务打包部署)
eureka:
client: # 客户端进行Eureka注册的配置
service-url:
defaultZone: http://eureka-7001.com:7001/eureka
instance:
lease-renewal-interval-in-seconds: 2 # 设置心跳的时间间隔(默认是30秒)
lease-expiration-duration-in-seconds: 5 # 如果现在超过了5秒的间隔(默认是90秒)
instance-id: dept-8001.com # 在信息列表时显示主机名称
prefer-ip-address: true # 访问的路径变为IP地址
SpringCloud系列四:Eureka 服务发现框架(定义 Eureka 服务端、Eureka 服务信息、Eureka 发现管理、Eureka 安全配置、Eureka-HA(高可用) 机制、Eureka 服务打包部署)

由于所有的服务都注册到了 Eureka 之中,这样如果配置了“lease-expiration-duration-in-seconds”此选项,表示距 离上一次发送心跳之后等待下一次发送心跳的间隔时间,如果超过了此间隔时间,则认为该微服务已经宕机了。

4、 【microcloud-provider-dept-8001】现在对于注册到 Eureka 上的微服务端也可以通过发现服务来进行一些服务信息的获取,修 改 DeptRest 程序类,追加一个控制调用方法:

SpringCloud系列四:Eureka 服务发现框架(定义 Eureka 服务端、Eureka 服务信息、Eureka 发现管理、Eureka 安全配置、Eureka-HA(高可用) 机制、Eureka 服务打包部署)
package cn.study.microcloud.rest;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest; import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController; import cn.study.microcloud.service.IDeptService;
import cn.study.vo.Dept; @RestController
public class DeptRest {
@Resource
private IDeptService deptService ;
@Resource
private DiscoveryClient client ; // 进行Eureka的发现服务
@RequestMapping("/dept/discover")
public Object discover() { // 直接返回发现服务信息
return this.client ;
} @RequestMapping("/dept/sessionId")
public Object id(HttpServletRequest request) {
return request.getSession().getId() ;
} @RequestMapping(value="/dept/get/{id}",method=RequestMethod.GET)
public Object get(@PathVariable("id") long id) {
return this.deptService.get(id) ;
}
@RequestMapping(value="/dept/add",method=RequestMethod.POST)
public Object add(@RequestBody Dept dept) {
return this.deptService.add(dept) ;
}
@RequestMapping(value="/dept/list",method=RequestMethod.GET)
public Object list() {
return this.deptService.list() ;
}
}
SpringCloud系列四:Eureka 服务发现框架(定义 Eureka 服务端、Eureka 服务信息、Eureka 发现管理、Eureka 安全配置、Eureka-HA(高可用) 机制、Eureka 服务打包部署)

5、 【microcloud-provider-dept-8001】在主程序之中加上注解@EnableDiscoveryClient启用 Eureka 发现服务项:

SpringCloud系列四:Eureka 服务发现框架(定义 Eureka 服务端、Eureka 服务信息、Eureka 发现管理、Eureka 安全配置、Eureka-HA(高可用) 机制、Eureka 服务打包部署)
package cn.study.microcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
@SpringBootApplication
@EnableEurekaClient
@EnableDiscoveryClient
public class Dept_8001_StartSpringCloudApplication {
public static void main(String[] args) {
SpringApplication.run(Dept_8001_StartSpringCloudApplication.class, args);
}
}
SpringCloud系列四:Eureka 服务发现框架(定义 Eureka 服务端、Eureka 服务信息、Eureka 发现管理、Eureka 安全配置、Eureka-HA(高可用) 机制、Eureka 服务打包部署)

6、 输入访问地址:http://dept-8001.com:8001/dept/discover

{"services":[],"localServiceInstance":{"host":"192.168.31.247",
"port":8001,"secure":false,"serviceId":"microcloud-provider-dept","metadata":{},"uri":"http://192.168.31.247:8001"}}

 2.5、Eureka 安全配置

现在已经成功的实现了一个 Eureka 的服务启动以及微服务的注册配置操作,但是现在的程序有一个问题,你自己公司的 Eureka 服务应该可以注册的服务只能够是满足于认证要求的微服务,所以这样一来在之前所进行的 Eureka 里面配置缺少关键性的一步: 安全认证,所以应该为 Eureka 配置上安全认证处理。

1、 【microcloud-eureka-7001】修改 pom.xml 配置文件,引入 SpringSecurity 的依赖包:

        <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>

2、 【microcloud-eureka-7001】一旦我们的项目之中导入了 Security 开发包,则每一次启动微服务的时候都会自动生成一个密码, 而这个密码由于会改变,所以一般都不使用,所以要修改 application.yml 配置文件,追加密码的配置项:

SpringCloud系列四:Eureka 服务发现框架(定义 Eureka 服务端、Eureka 服务信息、Eureka 发现管理、Eureka 安全配置、Eureka-HA(高可用) 机制、Eureka 服务打包部署)
server:
port: 7001 security:
basic:
enabled: true # 启用安全认证处理
user:
name: edmin # 用户名
password: studyjava # 密码 spring:
application:
name: microcloud-eureka-7001
eureka:
client: # 客户端进行Eureka注册的配置
service-url:
defaultZone: http://edmin:studyjava@eureka-7001.com:7001/eureka
register-with-eureka: false # 当前的微服务不注册到eureka之中
fetch-registry: false # 不通过eureka获取注册信息
instance: # eureak实例定义
hostname: eureka-7001.com # 定义Eureka实例所在的主机名称
SpringCloud系列四:Eureka 服务发现框架(定义 Eureka 服务端、Eureka 服务信息、Eureka 发现管理、Eureka 安全配置、Eureka-HA(高可用) 机制、Eureka 服务打包部署)

此时访问 eureka 的服务地址为:http://edmin:studyjava@eureka-7001.com:7001/

3、 【microcloud-provider-dept-8001】修改 application.yml 配置文件,进行授权的注册连接:

SpringCloud系列四:Eureka 服务发现框架(定义 Eureka 服务端、Eureka 服务信息、Eureka 发现管理、Eureka 安全配置、Eureka-HA(高可用) 机制、Eureka 服务打包部署)
eureka:
client: # 客户端进行Eureka注册的配置
service-url:
defaultZone: http://edmin:studyjava@eureka-7001.com:7001/eureka
instance:
lease-renewal-interval-in-seconds: 2 # 设置心跳的时间间隔(默认是30秒)
lease-expiration-duration-in-seconds: 5 # 如果现在超过了5秒的间隔(默认是90秒)
instance-id: dept-8001.com # 在信息列表时显示主机名称
prefer-ip-address: true # 访问的路径变为IP地址
SpringCloud系列四:Eureka 服务发现框架(定义 Eureka 服务端、Eureka 服务信息、Eureka 发现管理、Eureka 安全配置、Eureka-HA(高可用) 机制、Eureka 服务打包部署)

SpringCloud系列四:Eureka 服务发现框架(定义 Eureka 服务端、Eureka 服务信息、Eureka 发现管理、Eureka 安全配置、Eureka-HA(高可用) 机制、Eureka 服务打包部署)

2.6、Eureka-HA(高可用) 机制

现在已经成功的实现了一个 Eureka 服务器,但是现在属于单节点的服务运行过程,如果说现在单节点的 Eureka 出现了错误, 导致无法使用,那么对于所有的微服务的架构就将出现整体的瘫痪,就需要进行 Eureka 集群搭建,同时利用集群可以有效的实现 HA 的处理机制,如果要进行集群的搭建一定要选择两台或以上的电脑完成,而基本的流程如下:

SpringCloud系列四:Eureka 服务发现框架(定义 Eureka 服务端、Eureka 服务信息、Eureka 发现管理、Eureka 安全配置、Eureka-HA(高可用) 机制、Eureka 服务打包部署)

说明:Eureka集群是两两相互注册,当然了传递注册也是可以实现集群的

1、 修改 hosts 配置文件进行多个主机名称的定义:

127.0.0.1 eureka-7001.com
127.0.0.1 eureka-7002.com
127.0.0.1 eureka-7003.com

2、 【 microcloud-eureka-7001 】 为 了 方 便 进 行 Eureka 操 作 , 建 议 将 “ microcloud-eureka-7001 ”的进行复制,复制为 “microcloud-eureka-7002”、“ microcloud-eureka-7003”。

3、 【microcloud-eureka-7001】修改 application.yml 配置文件,这个配置文件主要注意端口号以及 Eureka 服务注册位置;

SpringCloud系列四:Eureka 服务发现框架(定义 Eureka 服务端、Eureka 服务信息、Eureka 发现管理、Eureka 安全配置、Eureka-HA(高可用) 机制、Eureka 服务打包部署)
server:
port: 7001
security:
basic:
enabled: true # 启用安全认证处理
user:
name: edmin # 用户名
password: studyjava # 密码
spring:
application:
name: microcloud-eureka-7001
eureka:
client: # 客户端进行Eureka注册的配置
service-url:
defaultZone: http://edmin:studyjava@eureka-7002.com:7002/eureka,http://edmin:studyjava@eureka-7003.com:7003/eureka
register-with-eureka: false # 当前的微服务不注册到eureka之中
fetch-registry: false # 不通过eureka获取注册信息
instance: # eureak实例定义
hostname: eureka-7001.com # 定义Eureka实例所在的主机名称
SpringCloud系列四:Eureka 服务发现框架(定义 Eureka 服务端、Eureka 服务信息、Eureka 发现管理、Eureka 安全配置、Eureka-HA(高可用) 机制、Eureka 服务打包部署)

4、 【microcloud-eureka-7002】修改 application.yml 配置文件:

SpringCloud系列四:Eureka 服务发现框架(定义 Eureka 服务端、Eureka 服务信息、Eureka 发现管理、Eureka 安全配置、Eureka-HA(高可用) 机制、Eureka 服务打包部署)
server:
port: 7002
security:
basic:
enabled: true # 启用安全认证处理
user:
name: edmin # 用户名
password: studyjava # 密码
spring:
application:
name: microcloud-eureka-7002
eureka:
client: # 客户端进行Eureka注册的配置
service-url:
defaultZone: http://edmin:studyjava@eureka-7001.com:7001/eureka,http://edmin:studyjava@eureka-7003.com:7003/eureka
register-with-eureka: false # 当前的微服务不注册到eureka之中
fetch-registry: false # 不通过eureka获取注册信息
instance: # eureak实例定义
hostname: eureka-7002.com # 定义Eureka实例所在的主机名称
SpringCloud系列四:Eureka 服务发现框架(定义 Eureka 服务端、Eureka 服务信息、Eureka 发现管理、Eureka 安全配置、Eureka-HA(高可用) 机制、Eureka 服务打包部署)

5、 【microcloud-eureka-7003】修改 application.yml 配置文件:

SpringCloud系列四:Eureka 服务发现框架(定义 Eureka 服务端、Eureka 服务信息、Eureka 发现管理、Eureka 安全配置、Eureka-HA(高可用) 机制、Eureka 服务打包部署)
server:
port: 7003
security:
basic:
enabled: true # 启用安全认证处理
user:
name: edmin # 用户名
password: studyjava # 密码
spring:
application:
name: microcloud-eureka-7003
eureka:
client: # 客户端进行Eureka注册的配置
service-url:
defaultZone: http://edmin:studyjava@eureka-7001.com:7001/eureka,http://edmin:studyjava@eureka-7002.com:7002/eureka
register-with-eureka: false # 当前的微服务不注册到eureka之中
fetch-registry: false # 不通过eureka获取注册信息
instance: # eureak实例定义
hostname: eureka-7003.com # 定义Eureka实例所在的主机名称
SpringCloud系列四:Eureka 服务发现框架(定义 Eureka 服务端、Eureka 服务信息、Eureka 发现管理、Eureka 安全配置、Eureka-HA(高可用) 机制、Eureka 服务打包部署)

6、 启动所有的 eureka 服务,而后进入到每一个服务的后台去观察运行的副本效果:

· 登录 7001 控制台:http://edmin:studyjava@eureka-7001.com:7001/;

· 登录 7002 控制台:http://edmin:studyjava@eureka-7002.com:7002/;

· 登录 7003 控制台:http://edmin:studyjava@eureka-7003.com:7003/。

SpringCloud系列四:Eureka 服务发现框架(定义 Eureka 服务端、Eureka 服务信息、Eureka 发现管理、Eureka 安全配置、Eureka-HA(高可用) 机制、Eureka 服务打包部署)

7、 【microcloud-provider-dept-8001】修改 application.yml 配置文件,进行多台主机注册:

SpringCloud系列四:Eureka 服务发现框架(定义 Eureka 服务端、Eureka 服务信息、Eureka 发现管理、Eureka 安全配置、Eureka-HA(高可用) 机制、Eureka 服务打包部署)
eureka:
client: # 客户端进行Eureka注册的配置
service-url:
defaultZone: http://edmin:studyjava@eureka-7001.com:7001/eureka,http://edmin:studyjava@eureka-7002.com:7002/eureka,http://edmin:studyjava@eureka-7003.com:7003/eureka
instance:
lease-renewal-interval-in-seconds: 2 # 设置心跳的时间间隔(默认是30秒)
lease-expiration-duration-in-seconds: 5 # 如果现在超过了5秒的间隔(默认是90秒)
instance-id: dept-8001.com # 在信息列表时显示主机名称
prefer-ip-address: true # 访问的路径变为IP地址
SpringCloud系列四:Eureka 服务发现框架(定义 Eureka 服务端、Eureka 服务信息、Eureka 发现管理、Eureka 安全配置、Eureka-HA(高可用) 机制、Eureka 服务打包部署)

 2.7、Eureka 服务打包部署

现在已经成功的实现了 Eureka 编写,但是在实际的运行之中,需要将 Eureka 发布到具体的服务器上进行执行,而这就需要对 项目进行打包处理,同样在进行打包处理的时候也必须考虑到项目的各种环境:开发(dev)、测试(beta)、生产(product),那么 下面也将基于这样的方式进行 eureka 项目打包操作。

本次的打包处理将直接基于 yml 配置文件完成,对于 properties 配置与 SpringBoot 讲解微服务发布的处理过程一样。

1、 【microcloud-eureka-server】修改 application.yml 配置文件

SpringCloud系列四:Eureka 服务发现框架(定义 Eureka 服务端、Eureka 服务信息、Eureka 发现管理、Eureka 安全配置、Eureka-HA(高可用) 机制、Eureka 服务打包部署)
spring:
profiles:
active:
- dev-7001
---
spring:
profiles: dev-7001
application:
name: microcloud-eureka-7001
server:
port: 7001
security:
basic:
enabled: true # 启用安全认证处理
user:
name: edmin # 用户名
password: studyjava # 密码
eureka:
client: # 客户端进行Eureka注册的配置
service-url:
defaultZone: http://edmin:studyjava@eureka-7002.com:7002/eureka,http://edmin:studyjava@eureka-7003.com:7003/eureka
register-with-eureka: false # 当前的微服务不注册到eureka之中
fetch-registry: false # 不通过eureka获取注册信息
instance: # eureak实例定义
hostname: eureka-7001.com # 定义Eureka实例所在的主机名称
---
spring:
profiles: dev-7002
application:
name: microcloud-eureka-7002
server:
port: 7002
security:
basic:
enabled: true # 启用安全认证处理
user:
name: edmin # 用户名
password: studyjava # 密码
eureka:
client: # 客户端进行Eureka注册的配置
service-url:
defaultZone: http://edmin:studyjava@eureka-7001.com:7001/eureka,http://edmin:studyjava@eureka-7003.com:7003/eureka
register-with-eureka: false # 当前的微服务不注册到eureka之中
fetch-registry: false # 不通过eureka获取注册信息
instance: # eureak实例定义
hostname: eureka-7002.com # 定义Eureka实例所在的主机名称
---
spring:
profiles: dev-7003
application:
name: microcloud-eureka-7003
server:
port: 7003
security:
basic:
enabled: true # 启用安全认证处理
user:
name: edmin # 用户名
password: studyjava # 密码
eureka:
client: # 客户端进行Eureka注册的配置
service-url:
defaultZone: http://edmin:studyjava@eureka-7001.com:7001/eureka,http://edmin:studyjava@eureka-7002.com:7002/eureka
register-with-eureka: false # 当前的微服务不注册到eureka之中
fetch-registry: false # 不通过eureka获取注册信息
instance: # eureak实例定义
hostname: eureka-7003.com # 定义Eureka实例所在的主机名称
SpringCloud系列四:Eureka 服务发现框架(定义 Eureka 服务端、Eureka 服务信息、Eureka 发现管理、Eureka 安全配置、Eureka-HA(高可用) 机制、Eureka 服务打包部署)

2、 【microcloud-eureka-server】添加一个打包的处理插件,修改 pom.xml 配置文件:

SpringCloud系列四:Eureka 服务发现框架(定义 Eureka 服务端、Eureka 服务信息、Eureka 发现管理、Eureka 安全配置、Eureka-HA(高可用) 机制、Eureka 服务打包部署)
    <build>
<finalName>eureka-server</finalName>
<plugins>
<plugin> <!-- 该插件的主要功能是进行项目的打包发布处理 -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration> <!-- 设置程序执行的主类 -->
<mainClass>cn.study.microcloud.Eureka_StartSpringCloudApplication</mainClass>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
SpringCloud系列四:Eureka 服务发现框架(定义 Eureka 服务端、Eureka 服务信息、Eureka 发现管理、Eureka 安全配置、Eureka-HA(高可用) 机制、Eureka 服务打包部署)

3、 运行 maven:clean install package;

SpringCloud系列四:Eureka 服务发现框架(定义 Eureka 服务端、Eureka 服务信息、Eureka 发现管理、Eureka 安全配置、Eureka-HA(高可用) 机制、Eureka 服务打包部署)

随后就可以在项目的目录之中发现生成的“eureka-server.jar”文件。

4、 采用默认的方式执行 eureka-server.jar,那么此时将运行在 7001 端口上:java -jar eureka-server.jar

5、 运行其它的两个 profile 配置:

· 运行“dev-7002”profile:java -jar eureka-server.jar --spring.profiles.active=dev-7002;

· 运行“dev-7003”profile:java -jar eureka-server.jar --spring.profiles.active=dev-7003。