Eureka服务注册与发现
什么是服务治理
springcloud 封装了netflix的Eureka模块实现服务治理
在传统的rpc远程调用框架中,管理每个服务与服务之间依赖关系比较复杂,管理比较复杂所以需要有一个东西去治理他,管理服务与服务之间的依赖关系,负载均衡,容错等 实现服务发现与注册
这个是有人要问了:什么时服务的注册与发现呢???
问得好,
答案:
Eureka采用了CS也就是服务器和客户端的架构模式,Eureka Server作为服务注册中心,来管理微服务,也可以理解成用springboot来开发的一个个微服务,他们在Eureka的位置就是Eureka client,他们用心跳来告诉服务端自己是可以用的
我们可以用Eureka server就可以监控各个微服务的状态,同时也有一系列的保证机制,比如心跳检测,
我们的服务提供者和消费者的例子就是这样的,
服务提供者:在启动后将把自己当前的信息,通讯地址等以别名的方式注册到注册中心也就是Eureka server中
消费者:用别名的的形式,去获取服务的信息和通讯地址,之后实现本地调用RPC调用框架的设计思想
注册中心负责管理服务之间的依赖关系(服务治理),在任何的远程RPC中都会有一个注册中心,通过注册中心来获取服务的信息和接口地址
下图是脑图中对于Eureka两大组件的作用和功能介绍
- Eureka server
- Eureka client
单项目Eurekademo
老步骤:
- 建模块
- 添加依赖pom
- yml配置文件
- 主启动类
- 业务编码
创建cloud-eureka-server7001模块
之后导入我们要用到的依赖
<dependencies> <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-eureka-server --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> <dependency> <groupId>com.atguigu.springcloud</groupId> <artifactId>cloud-api-commons</artifactId> <version>${project.version}</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-devtools --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-test --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> </dependency> </dependencies>
这里Eureka的服务端新老版本也有变化
之后就是配置了yml
server: port: 7001 eureka: instance: hostname: localhost #eureka服务端的实例名字 client: register-with-eureka: false #表识不向注册中心注册自己 fetch-registry: false #表示自己就是注册中心,职责是维护服务实例,并不需要去检索服务 service-url: defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ #设置与eureka server交互的地址查询服务和注册服务都需要依赖这个地址
之后的主启动类的编写
package com.atguigu.springcloud; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; @EnableEurekaServer @SpringBootApplication public class EurekaMain7001 { public static void main(String[] args) { SpringApplication.run(EurekaMain7001.class,args); } }
@EnableEurekaServer加上个注解就是Eureka的服务端了,我们并不需要写什么业务员,启动之后访问
7001端口就可以看道Eureka的注册中心啦
服务的注册
cloud-provider-payment8001我们的目光回到服务提供者
Eurekashi1 C/S架构
所以我们想要将服务提供者注册道服务中心,还需要导入一个依赖,就是Eureka client的依赖抱
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-eureka-server --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>
之后就是配置文件了
eureka: client: register-with-eureka: true fetchRegistry: true service-url: defaultZone: http://localhost:7001/eureka
配置解读:
register-with-eureka:true 表示自己会被注册到服务中心
fetchRegistry:true表示自己不是服务中心,需要检索服务
defaultZone要注册的服务中心的地址
主启动类
package com.atguigu.springcloud; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.EnableEurekaClient; @EnableEurekaClient @SpringBootApplication public class PaymentMain8001 { public static void main(String[] args) { SpringApplication.run(PaymentMain8001.class,args); } }
@EnableEurekaClient表示自己的客户端,
之后就是测试了
先启动注册中心
之后启动需要注册的注册中心
访问注册中心即可
微服务名称配置