使用Eureka作为微服务的注册中心

原文链接

欢迎大家对于本站的访问 - AsterCasc

前言

在前文使用Consul作为微服务的注册中心,我们较为详细地介绍了使用consul的相关内容和参数。其中提及到没有使用Eureka的原因是新版Eureka不再官方开源维护,已经进入闭源状态。但是1.x的版本还是有社区在相对积极维护的,虽然大概率不会再有大的更新,但是基于现有架构而言,作为中小型项目的注册中心还是绰绰有余的,而且个人的观点,在所有注册中心中,Eureka基本上是用的最舒服的,可以认为是一个opinionated的框架

服务端

我们这里仍然是中间件的常用逻辑,先去dockerhub看有没有官方的服务端镜像,没有的话我们自己构建,上传到dockerhub,之后就用自己的。这里Eureka没有官方的镜像,所以我们需要手动构建下

参考spring cloud netflix server document,我们这里创建一个Eureka项目,依然基于JDK17Spring3Cloud4的大版本,引入依赖

<dependency>  
    <groupId>org.springframework.cloud</groupId>  
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>  
    <version>4.1.1</version>  
    <exclusions>  
	    <exclusion>
		    <groupId>commons-logging</groupId>  
	        <artifactId>commons-logging</artifactId>  
	    </exclusion>
	</exclusions>
</dependency>  
  
<dependency>  
    <groupId>org.springframework.cloud</groupId>  
    <artifactId>spring-cloud-starter-config</artifactId>  
    <version>4.1.1</version>  
</dependency>  
<dependency>  
    <groupId>org.springframework.cloud</groupId>  
    <artifactId>spring-cloud-starter-bootstrap</artifactId>  
    <version>4.1.1</version>  
</dependency>  
<dependency>  
    <groupId>org.springframework.boot</groupId>  
    <artifactId>spring-boot-starter-actuator</artifactId>  
</dependency>  
<dependency>  
    <groupId>org.springframework.boot</groupId>  
    <artifactId>spring-boot-starter-test</artifactId>  
    <scope>test</scope>  
</dependency>

然后添加注解@EnableEurekaServermain

@SpringBootApplication  
@EnableEurekaServer  
class EurekaApplication

fun main(args: Array<String>) {  
    runApplication<EurekaApplication>(*args)  
}

最后做一下简单配置:

server:  
  port: 5525  
spring:  
  application:  
    name: eureka  
eureka:  
  client:  
    registerWithEureka: false  
    fetchRegistry: false  
    serviceUrl:  
      defaultZone: http://localhost:${server.port}/eureka
  server:  
    waitTimeInMsWhenSyncEmpty: 0  
management:  
  endpoints:  
    web:  
      exposure:  
        include: "*"

这样最基本的一个注册中心的服务就构建完成了,小伙伴们启动后就可以直接在http://localhost:5525观察到服务的用户界面了,然后我们需要将服务放到容器中,简单写个Dockerfile,将包放入容器内构建

FROM  astercass/jdk17-simple:latest
LABEL author="astercass@qq.com"
WORKDIR /usr/src/apps
ADD eureka.jar /usr/src/apps
RUN mkdir log && mkdir config
ENTRYPOINT ["java","-jar","/usr/src/apps/eureka.jar","--logging.file.path=/usr/src/apps/log", "--spring.config.location=classpath:/,/usr/src/apps/config/" ,"--spring.profiles.active=prod"]

然后将其构建后传入dockerhub,最后使用docker-compose.yml重新拉下来

version: "3.9"
services:
  eureka:
    image: 'astercass/eureka-server:1.0.0'
    hostname: 'eureka'
    container_name: 'eureka'
    restart: always
    ports:
      - "15525:5525"
    volumes:
      - /root/docker/eureka/log:/usr/src/apps/log
      - /root/docker/eureka/config:/usr/src/apps/config

最后在/usr/src/apps/config/配置生产环境的配置启动即可完成服务端的容器构建,相关的配置参数参考源码EurekaInstanceConfigBean.javaEurekaInstanceConfigBean.java以及EurekaServerConfigBean.java相关介绍

客户端

引包:

<dependency>  
    <groupId>org.springframework.cloud</groupId>  
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>  
    <version>${version}</version>  
</dependency>

对于客户端来说,配置也非常简单,最简化的配置只需要配置服务端地址即可:

eureka:  
  client:  
    serviceUrl:  
      defaultZone: http://212.129.245.243:55525/eureka

可以通过eureka.client.enable方便地启用/禁用eureka以用于单元测试,默认使用spring.application.name以及server.port注册到eureka,可以通过源码EurekaInstanceConfigBean.javaEurekaInstanceConfigBean.java获取更多参数解释,比如使用eureka.instance.appname覆盖spring.application.name值、使用eureka.instance.instanceId自定义注册id

至此一个简单易用的注册中心就构建完成了,当然这里没有包括安全性校核以及高可用以及群组划分相关处理,这方面小伙伴们可以根据业务需求,自行修改客户端、服务端配置文件即可

注册项目调用

这里其实就和其他注册中心的后续处理一样了,这里简单提一嘴。注册服务到注册中心,注册中心存储对应关系,客户端定时通过appname从注册中心获取对应关系,缓存到本地然后使用该appname注册的地址进行调用。当注册多个相同服务的时,启用负载均衡。当某个服务挂掉之后,将该实例踢出服务组等等

在代码层面上,可以使用openfeign或者gateway实现,如果是openfeign一般在类名注解上配置appname,如果是网关那么一般在配置文件中配置即可

关于注册和挂掉之后的删除较为缓慢的问题,可以参考Documentation: changing Eureka renewal frequency WILL break the self-preservation feature of the server通过evictionIntervalTimerInMsleaseRenewalIntervalInSeconds等参数,减少服务端注册服务DOWN后删除间隔时间,客户端拉取最新注册间隔时间等方式提高项目可用性

原文链接

欢迎大家对于本站的访问 - AsterCasc

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值