认识 Eureka
什么是 Eureka
- Eureka 是在 AWS 上定位服务的 REST 服务,发布在 Netflix OSS 套件中
Netflix OSS 地址
- https://netflix.github.io
Spring 对 Netflix 套件的支持
- Spring Cloud Netflix
在本地启动一个简单的 Eureka 服务
Spring Cloud 提供的 Starter
-
spring-cloud-dependencies
-
spring-cloud-starter-netflix-eureka-starter
在类上声明 提供Eureka服务
- @EnableEurekaServer
注意事项
- 默认监听端口8761
- Eureka 自己不要注册到 Eureka 了
将服务注册到 Eureka Server
Starter
- 引入 spring-cloud-starter-netflix-eureka-client
声明
- @EnableDiscoveryClient
- @EnableEurekaClient
一些配置项
- eureka.client.service-url.default-zone
配置eureka的地址 - eureka.client.instance.prefer-ip-address=true
优先使用ip地址注册
如果不配 会使用默认的配置 默认使用8461端口
关于 Bootstrap 属性
Bootstrap 属性
-
启动引导阶段加载的属性
-
可以是 bootstrap.properties 格式 也可以是 bootstrap.yml 格式
-
spring.cloud.bootstrap.name=bootstrap 一般不修改文件名
常用配置
-
spring.application.name=应用名 会被注册到服务的注册中心上
-
配置中心相关
例子
eureka-waiter-service:
只有一个类 EurekaServerApplication
@SpringBootApplication
@EnableEurekaServer//开启Eureka服务
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}
application.properties
server.port=8761
#端口号
eureka.client.register-with-eureka=false
#关闭eureka自己的注册 (默认true) 指示该实例是否注册到eureka注册中心,
# 设置false, 表示是eureka服务中心
eureka.client.fetch-registry=false
#不去获取注册里面相关的内容 注册中心的职责是维护服务实例,不需要去检索服务,所里这里设置为false
pom文件
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Greenwich.SR1</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<!-- 引入 eureka服务器 依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<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>
<!-- 引入 springcloud 的相关全部依赖 -->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
eureka-waiter-service
目录:
在 WaiterServiceApplication 上 加入@EnableDiscoveryClient 显示声明 它是一个DiscoveryClient
application.properties
spring.jpa.hibernate.ddl-auto=none
spring.jpa.properties.hibernate.show_sql=true
spring.jpa.properties.hibernate.format_sql=true
management.endpoints.web.exposure.include=*
management.endpoint.health.show-details=always
info.app.author=long
info.app.encoding=@project.build.sourceEncoding@
server.port=0
#自己随机一个端口
bootstrap.properties
spring.application.name=waiter-service
#声明应用名
pom文件
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Greenwich.SR1</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
<dependency>
<groupId>org.joda</groupId>
<artifactId>joda-money</artifactId>
<version>1.0.1</version>
</dependency>
<dependency>
<groupId>org.jadira.usertype</groupId>
<artifactId>usertype.core</artifactId>
<version>6.0.1.GA</version>
</dependency>
<!-- 增加Jackson的Hibernate类型支持 -->
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-hibernate5</artifactId>
<version>2.9.8</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<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>
<!-- 增加 spring-cloud 依赖支持 -->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
结果分析
运行程序 eureka-waiter-service
没有 客户端注册
运行 eureka-waiter-service 并刷新页面
点击 DESKTOP-MVGV7CO:waiter-service-test:0 我们可以看到一些具体信息
点击 Last 1000 since startup 我们可以看到注册的具体信息
在一般的生产环境中,我们一般不使用 Eureka ,而是使用其他的。所以,在生产环境中,不建议使用它