认识Eureka
Eureka就好比是滴滴,负责管理、记录服务提供者的信息。服务调用者无需自己寻找服务,而是把自己的需求告诉Eureka,然后Eureka会把符合你需求的服务告诉你。
同时,服务提供方与Eureka之间通过“心跳”机制进行监控,当某个服务提供方出现问题,Eureka自然会把它从服务列表中剔除。
这就实现了服务的自动注册、发现、状态监控。
- Eureka:就是服务注册中心(可以是一个集群),对外暴露自己的地址
- 提供者:启动后向Eureka注册自己信息(地址,提供什么服务)
- 消费者:向Eureka订阅服务,Eureka会将对应服务的所有提供者地址列表发送给消费者,并且定期更新
- 心跳(续约):提供者定期通过http方式向Eureka刷新自己的状态
入门案例
结合上一篇springcloud的案例写的 大家可以去了解一下点击此处
编写EurekaServer
使用spring提供的快速搭建工具
导入依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<!-- SpringCloud版本,是最新的F系列 -->
<spring-cloud.version>Finchley.RC1</spring-cloud.version>
</properties>
<dependencies>
<!-- Eureka服务端 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<!-- SpringCloud依赖,一定要放到dependencyManagement中,起到管理版本的作用即可 -->
<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>
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
</project>
编写一个启动类
/**
* 使用Eureka的步骤 :
* 1.导入依赖坐标
* 2.在启动类上加入@EnableEurekaServer注解 启动Eureka的服务
* 3.配置yaml文件 修改端口号避免端口冲突
* 这是一个新建的类
*/
@EnableEurekaServer//注解 代表启动Eureka的服务
@SpringBootApplication
public class EurekaServer {
public static void main(String[] args) {
SpringApplication.run(EurekaServer.class);
}
}
yaml配置文件
server:
port: 10087 #更改一个端口号避免冲突
eviction-interval-timer-in-ms: 300000 #配置失效剔除 30秒一次
eureka: #配置eureka集群之间的相互注册
client:
service-url: #配置另一个注册目标的地址
defaultZone: http://127.0.0.1:10086/eureka #覆盖默认配置 key value结构
register-with-eureka: false #这个配置表示不注册自己 不然自己注册自己时会报错 默认值是true
spring: #配置注册服务的名称
application:
name: eureka-server
#instance:
# prefer-ip-address: true #表示我希望使用IP地址
# ip-addres: 127.0.0.1 #指定IP地址
把服务提供者userservice注册到eureka上
添加客户端依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
启动类上加入注解
/** 服务的提供方
* 使用Eureka客户端的步骤:
* 1、添加客户端依赖
* 2.在启动类上加注解
* 3.在配置文件中加入配置 配置地址 服务名
* 使用这个注解代表 使用注册中心
* @EnableDiscoveryClient注解可以兼容 多个注册中心
* @EnableEurekaClient 这个注解代表只能使用Eureka
* 这是一个新建的类
*/
@EnableDiscoveryClient //引入
@SpringBootApplication
@MapperScan("cn.itcast.user.mapper")
public class UserApplication {
public static void main(String[] args) {
SpringApplication.run(UserApplication.class);
}
}
配置文件yaml
server:
port: 8081
spring:
datasource:
url: jdbc:mysql://localhost:3306/mybatis
username: root
password: 12345
application:
name: user-service
mybatis:
type-aliases-package: cn.rpf.user.pojo
eureka: #配置eureka集群之间的相互注册
client:
service-url:
defaultZone: http://127.0.0.1:10086/eureka #覆盖默认配置 key value结构
instance:
prefer-ip-address: true #表示我希望使用IP地址
ip-addres: 127.0.0.1 #指定IP地址 服务的提供方注册信息 每三十秒心跳一次
lease-renewal-interval-in-seconds: 30 #配置心跳 默认是30秒 每隔30秒与Eureka进行一次续约 心跳频率过高会增大负担
lease-expiration-duration-in-seconds: 90 #最小的过期时长 默认30秒发一次心跳 如果90秒还没发代表挂了
服务使用方注册到eureka上
导入依赖
<!--服務的调用方 引入eureka客户端依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
</dependencies>
启动类
/**
* 服务的调用方
* 使用eureka步骤:
* 1.引入eureka依赖
* 2.启动类上加入注解 @EnableDiscoveryClient 无论是调用还是提供 都是使用客户端
* 只有Eureka提供服务的
* 3.配置yaml文件
*/
@EnableDiscoveryClient
@SpringBootApplication
public class UserConsumerDemoApplication {
@Bean
public RestTemplate restTemplate() {
// 这次我们使用了OkHttp客户端,只需要注入工厂即可
return new RestTemplate();
}
public static void main(String[] args) {
SpringApplication.run(UserConsumerDemoApplication.class, args);
}
}
配置文件
server:
port: 8088
spring:
application:
name: consumer-service
eureka: #配置eureka集群之间的相互注册
client:
service-url: # 配置两个Eureka地址 高可用
defaultZone: http://127.0.0.1:10087/eureka #覆盖默认配置 key value结构
instance:
prefer-ip-address: true #表示我希望使用IP地址
ip-addres: 127.0.0.1 #指定IP地址 服务的适用方要去eureka拉取服务
fetch-registry: true #配置要不要拉取服务
fetch-interval-seconds: 30 #配置拉取间隔时长
测试
访问eureka的管理网页