当前位置:   article > 正文

SpringCloud服务发现-eureka使用及高可用配置_stat microservice-discovery-eureka-0.0.1-snapshot.

stat microservice-discovery-eureka-0.0.1-snapshot.jar: file does not exist

关于服务发现

微服务架构中,服务发现(Service Discovery)是关键原则之一。手动配置每个客户端或某种形式的约定是很难做的,并且很脆弱。Spring Cloud提供了多种服务发现的实现方式,例如:Eureka、Consul、Zookeeper。
Spring Cloud支持得最好的是Eureka,其次是Consul,最次是Zookeeper。

Eureka

  • 创建一个Maven工程(microservice-discovery-eureka),并在pom.xml中加入如下内容:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <artifactId>microservice-discovery-eureka</artifactId>
  <packaging>jar</packaging>

  <parent>
    <groupId>com.itmuch.cloud</groupId>
    <artifactId>spring-cloud-microservice-study</artifactId>
    <version>0.0.1-SNAPSHOT</version>
  </parent>

  <dependencies>
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-eureka-server</artifactId>
    </dependency>
  </dependencies>
</project>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 编写Spring Boot启动程序:通过@EnableEurekaServer申明一个注册中心:
/**
 * 使用Eureka做服务发现。
 * @author eacdy
 */
@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication {
  public static void main(String[] args) {
    SpringApplication.run(EurekaApplication.class, args);
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 在默认情况下,Eureka会将自己也作为客户端尝试注册,所以在单机模式下,我们需要禁止该行为,只需要在application.yml中如下配置:
server:
  port: 8761                    # 指定该Eureka实例的端口

eureka:
  instance:
    hostname: localhost         # 指定该Eureka实例的主机名
  client:
    registerWithEureka: false
    fetchRegistry: false
    serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

# 参考文档:http://projects.spring.io/spring-cloud/docs/1.0.3/spring-cloud.html#_standalone_mode
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 启动工程后,访问:http://discovery:8761/ ,如下图。我们会发现此时还没有服务注册到Eureka上面。

在这里插入图片描述

Eureka的高可用

上面我们构建出了一个简单的注册中心。但此时的Eureka是单点的,不适合于生产环境,那么如何实现Eureka的高可用呢?

  • 修改application.yml
---
spring:
  profiles: server1                                 # 指定profile=server1
server:
  port: 8761
eureka:
  instance:
    hostname: server1                               # 指定当profile=server1时,主机名
  client:
    serviceUrl:
      defaultZone: http://server2:8762/eureka/      # 将自己注册到server2这个Eureka上面去

---
spring:
  profiles: server2
server:
  port: 8762
eureka:
  instance:
    hostname: server2
  client:
    serviceUrl:
      defaultZone: http://server2:8761/eureka/
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 分别启动两个Eureka应用:
java -jar microservice-discovery-eureka-0.0.1-SNAPSHOT.jar --spring.profiles.active=server1
java -jar microservice-discovery-eureka-0.0.1-SNAPSHOT.jar --spring.profiles.active=server2
  • 1
  • 2
  • 访问http://server1:8761 ,我们会发现registered-replicas 中已经有server2 节点了,同样地,访问http://server2:8762 ,也能发现其中的registered-replicas 有server1 节点了。
  • 我们尝试将server2 节点关闭,然后访问http://server1:8761 ,会发现此时server2会被添加到unavaliable-replicas 一栏中。

将服务注册到高可用的Eureka

如果注册中心是高可用的,那么各个微服务配置只需要将defaultZone 改为如下即可:

eureka:
  client:
    serviceUrl:
      defaultZone: http://server1:8761/eureka/,http://server2:8762/eureka
  • 1
  • 2
  • 3
  • 4

参考资料:https://github.com/eacdy/spring-cloud-book
《Spring Cloud与Docker微服务实战》

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/运维做开发/article/detail/963464
推荐阅读
相关标签
  

闽ICP备14008679号