美文网首页dibo
SpringCloud 之 Eureka 配置,Eureka 集

SpringCloud 之 Eureka 配置,Eureka 集

作者: Java架构小喳喳 | 来源:发表于2019-07-06 20:18 被阅读19次

Eureka Server 作为服务注册功能的服务器,它是服务注册中心。而系统中的其他微服务,使用 Eureka 的客户端连接到 Eureka Server,并维持心跳连接。这样系统的维护人员就可以通过 Eureka Server 来监控系统中各个微服务是否正常运行。

一、先来搭建一个 Eureka Server 作为注册中心

1.引入依赖

<!--添加eureka服务端-->     

<dependency>

    <groupId>org.springframework.cloud</groupId>

    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>

</dependency>

2.写配置

作为注册中心,端口号是 8001,服务名用的service-eureka

#配置端口号

server:

  port: 8001

#服务名

spring:

  application:

    name: service-eureka

这个 eureka 配置目的就是把服务添加到注册中心去

注册的地址是:http://localhost:8001/eureka/

#eureka配置

eureka:

  client:

#    不把服务注册到注册中心

#    register-with-eureka: false

    fetch-registry: false

    service-url:

      defaultZone: http://localhost:8001/eureka/

  server:

    #主动失效时间

    eviction-interval-timer-in-ms: 30000

    registry-sync-retry-wait-ms: 500

    a-s-g-cache-expiry-timeout-ms: 60000

    peer-eureka-nodes-update-interval-ms: 15000

    renewal-threshold-update-interval-ms: 300000

    #测试环境关闭自我保护模式

#    enable-self-preservation: false

3.启动器添加注解

添加 @EnableEurekaServer 启动注册中心

由于作为注册中心没有数据库这些玩意,所以启动报错了 @SpringBootApplication 后面添加

exclude= {DataSourceAutoConfiguration.class} 

@EnableEurekaServer

@SpringBootApplication(exclude= {DataSourceAutoConfiguration.class})

public class EurekaApplication {

    public static void main(String[] args) {

        SpringApplication.run(EurekaApplication.class, args);

    }

}

4.启动并访问注册中心

访问路径:localhost:8001

这里可以看到 service-eureka 作为一个服务注册到注册中心里了

二、写一个服务作为 Eureka 的客户端注册到注册中心

1.引入依赖

<!--添加eureka客户端-->

<dependency>

    <groupId>org.springframework.cloud</groupId>

    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>

</dependency>

2.写配置

微服务的端口号是 8084,服务名用的service-admin

#配置端口号

server:

  port: 8084

#服务名

spring:

  application:

    name: service-admin

依然把服务添加到注册中心去

注册的地址依然是:http://localhost:8001/eureka/

#eureka配置

eureka:

  client:

    service-url:

      defaultZone: http://localhost:8001/eureka/

    #间隔多少秒去服务端拉去注册信息

    registry-fetch-interval-seconds: 10

  instance:

    #发送心跳给server端频率

    lease-renewal-interval-in-seconds: 30

    #健康检查地址

    health-check-url-path: /actuator/health

    prefer-ip-address: true

3.启动器添加注解

@EnableEurekaClient 注解是基于spring-cloud-netflix依赖,只能eureka使用

@EnableDiscoveryClient 注解是基于spring-cloud-commons依赖,并且在classpath中实现

它们的作用是一样的,所以我选择 @EnableDiscoveryClient

添加 @EnableDiscoveryClient 将服务作为客户端注册到注册中心

@EnableDiscoveryClient

@SpringBootApplication

public class AdminApplication {

    public static void main(String[] args) {

        SpringApplication.run(AdminApplication.class, args);

    }

}

4.启动并访问注册中心

访问路径:localhost:8001

可以看到 admin 服务也成功注册到注册中心,说明配置成功

三、Eureka 集群

集群这种东西对于没接触过的人来说是个高大上的东西,但是对于接触过的人来说也就那样

Eureka 集群最主要的目的还是为了保证 Eureka 的稳定性,如果有个挂了,还有其他的Eureka 能担负起责任来

对配置文件稍微改动,变成 3 个 Eureka 的配置

可以看到通过 “---” 符号把配置文件分为 3 个配置,分别对应为 eureka1,eureka2,eureka3 以及各自的端口号

接下来我们可以通过 --spring.profiles.active=xx 去启动对用的配置

#eureka1 配置

server:

  port: 8001

spring:

  profiles: eureka1

  application:

    #配置服务名

    name: eureka1

#eureka配置

eureka:

  client:

#    是否将自己注册到eureka server

    register-with-eureka: true

#    避免eureka查找服务列表

    fetch-registry: false

    service-url:

      defaultZone: http://localhost:8001/eureka/,http://localhost:8002/eureka/,http://localhost:8003/eureka/

  server:

    #主动失效时间

    eviction-interval-timer-in-ms: 30000

    registry-sync-retry-wait-ms: 500

    a-s-g-cache-expiry-timeout-ms: 60000

    peer-eureka-nodes-update-interval-ms: 15000

    renewal-threshold-update-interval-ms: 300000

#    关闭保护机制,尽可能提出挂掉的服务节点

    enable-self-preservation: false

---

#eureka2 配置

server:

  port: 8002

spring:

  profiles: eureka2

  application:

    #配置服务名

    name: eureka2

#eureka配置

eureka:

  client:

#    是否将自己注册到eureka server

    register-with-eureka: true

#    避免eureka查找服务列表

    fetch-registry: false

    service-url:

      defaultZone: http://localhost:8001/eureka/,http://localhost:8002/eureka/,http://localhost:8003/eureka/

  server:

    #主动失效时间

    eviction-interval-timer-in-ms: 30000

    registry-sync-retry-wait-ms: 500

    a-s-g-cache-expiry-timeout-ms: 60000

    peer-eureka-nodes-update-interval-ms: 15000

    renewal-threshold-update-interval-ms: 300000

#    关闭保护机制,尽可能提出挂掉的服务节点

    enable-self-preservation: false

---

#eureka3 配置

server:

  port: 8003

spring:

  profiles: eureka3

  application:

    #配置服务名

    name: eureka3

#eureka配置

eureka:

  client:

#    是否将自己注册到eureka server

    register-with-eureka: true

#    避免eureka查找服务列表

    fetch-registry: false

    service-url:

      defaultZone: http://localhost:8001/eureka/,http://localhost:8002/eureka/,http://localhost:8003/eureka/

  server:

    #主动失效时间

    eviction-interval-timer-in-ms: 30000

    registry-sync-retry-wait-ms: 500

    a-s-g-cache-expiry-timeout-ms: 60000

    peer-eureka-nodes-update-interval-ms: 15000

    renewal-threshold-update-interval-ms: 300000

#    关闭保护机制,尽可能提出挂掉的服务节点

    enable-self-preservation: false

启动命令:

java eureka.jar --spring.profiles.active=eureka1

java eureka.jar --spring.profiles.active=eureka2

java eureka.jar --spring.profiles.active=eureka3

或者你和我一样通过 Idea 之类的去启动的,可以这样

使用三个启动类,每个启动类配置不同的 Activc profiles 来启动

通过 defaultZone 把多个 Eureka 注册上,这样一个 Eureka 挂了,还能通过其他 Eureka 来使用


四、Eureka 监听

有些时候只是当靠 Eureka 的监控并不能满足我们的需求,比如我们需要知道,哪些服务经常挂掉又重连了之类的

我们可以弄个简单的监听器进行监听

EurekaStateChangeListener.java


/**

* Eureka事件监听

*

* @Author: author

* @Date: 2018/11/6 15:29

*/

@Component

public class EurekaStateChangeListener {

    private static final Logger LOGGER = LoggerFactory.getLogger(EurekaStateChangeListener.class);

    @EventListener

    public void listen(EurekaInstanceCanceledEvent event) {

        LOGGER.info(event.getServerId() + "\t" + event.getAppName() + " 服务下线");

    }

    @EventListener

    public void listen(EurekaInstanceRegisteredEvent event) {

        InstanceInfo instanceInfo = event.getInstanceInfo();

        LOGGER.info(instanceInfo.getAppName() + "进行注册");

    }

    @EventListener

    public void listen(EurekaInstanceRenewedEvent event) {

        LOGGER.info(event.getServerId() + "\t" + event.getAppName() + " 服务进行续约");

    }

    @EventListener

    public void listen(EurekaRegistryAvailableEvent event) {

        LOGGER.info("注册中心 启动");

    }

    @EventListener

    public void listen(EurekaServerStartedEvent event) {

        LOGGER.info("Eureka Server 启动");

    }

}

简单效果图:

相关文章

网友评论

    本文标题:SpringCloud 之 Eureka 配置,Eureka 集

    本文链接:https://www.haomeiwen.com/subject/ptumhctx.html