什么是服务注册中心
为什么需要服务注册中心
微服务架构中,以上一节Ribbon为例,在接收到客户端请求后,需要进行路由,路由的过程需要了解有哪些服务节点。而这一过程,如果没有自动化的实现,将会变得非常不可靠。有以下几个缺点:
- 需要提前配置服务地址,非常的繁琐。
- 服务下线(不可用)、或者重新扩展后其他服务无法动态感知,需要修改配置文件重新才行。
为了解决这两个问题,需要有一个服务,能够维护所有已注册服务的地址信息,并且能够动态的感知服务的状态。
Eureka 如何使用
创建服务端
- 新建项目引入EurekaServer
- @EnableEurekaServer
@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaApplication.class, args);
}
}
- 修改配置文件
# 应用名称
spring.application.name=eureka-server
# 默认ip地址为 8761
server.port=8761
eureka.instance.hostname=10.0.205.107
# 指向服务注册中心的地址 也就是自己注册自己 集群配置需要互相注册。 默认为注册。如要取消注册可以看下方配置
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/
#取消注册到Eureka false表示不向注册中心注册自己,单机环境可以设置为false
eureka.client.register-with-eureka=false
#取消从Eureka 获取服务地址 false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务
eureka.client.fetch-registry=false
#取消自我保护机制
eureka.server.enable-self-preservation=false
- start服务
创建客户端
- 新建项目引入EurekaServer
- @EnableEurekaClient
@SpringBootApplication
// 这个不开启 默认也会加载 有自动装配
@EnableEurekaClient
public class EurekaClientApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaClientApplication.class, args);
}
}
- 修改配置文件
# 应用名称
spring.application.name=eureka-client
server.port=8090
#配置注册Eureka服务地址
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/
#使用IP注册至服务 (下图左下角位置)
eureka.instance.prefer-ip-address=true
#自定义示例 显示名称 ip + 端口 (下图右上方位置)
#注意${spring.cloud.client.ip-address} 由HostInfoEnvironmentPostProcessor 类生成
# 需要(引入spring-cloud-commons) 正常情况下cloud已经引入该jar包
eureka.instance.instance-id= ${spring.cloud.client.ip-address}:${server.port}
#允许访问服务,正式环境不要直接使用 * 有安全隐患。
management.endpoints.web.exposure.include=*
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-commons</artifactId>
</dependency>
image-20211211105637490.png
此时点击右上方链接,访问页面将会是一个404页面,所以需要开启actuator。
management.endpoints.web.exposure.include=*
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
Eureka 高可用集群配置
服务端配置
- 新增服务端示例
- 多实例修改为两两互相注册
# 应用名称
spring.application.name=eureka-server
server.port=8761
eureka.client.service-url.defaultZone=http://localhost:8762/eureka/
eureka.instance.prefer-ip-address=true
eureka.instance.instance-id=${spring.cloud.client.ip-address}:${server.port}
#eureka.instance.hostname=master
##取消从Eureka 获取服务地址
#eureka.client.fetch-registry=false
##取消注册到Eureka
#eureka.client.register-with-eureka=false
##取消自我保护机制
#eureka.server.enable-self-preservation=false
# 应用名称
spring.application.name=eureka-server-copy
server.port=8762
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/
eureka.instance.prefer-ip-address=true
eureka.instance.instance-id=${spring.cloud.client.ip-address}:${server.port}
#eureka.instance.hostname=master1
##取消从Eureka 获取服务地址
#eureka.client.fetch-registry=false
##取消注册到Eureka
#eureka.client.register-with-eureka=false
##取消自我保护机制
#eureka.server.enable-self-preservation=false
客户端配置
# 应用名称
spring.application.name=eureka-client
server.port=8090
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/,http://localhost:8762/eureka/
#使用IP注册至服务
eureka.instance.prefer-ip-address=true
#自定义示例 显示名称
eureka.instance.instance-id= ${spring.cloud.client.ip-address}:${server.port}
如果需要保证高可用,需要分别注册多个eureka server,这样才能保证在一个挂掉之后,仍然可以和其他server保持通讯。如果单配置注册一个服务,虽然注册一个server之后其他server也会同步出现,但是直接注册的服务挂掉后,就无法保证。