Eureka 注册中心

Eureka组件

  • server 提供服务发现的能力它会储存各个微服务启动时向自己注册的信息(ip,port,微服务名称)。如果在一定时间内没有收到某个微服务的心跳,则会注销该服务(默认90s),如果由于网络原因大部分服务同时宕掉,server则会启动自我保护机制,不注销,从而保证高可用是一种应对网络异常的保护措施。默认情况下server也是client,多个实例之间互相复制注册,保证每个server的数据同步
  • client 是一个java客户端,服务启动后会周期性向server发送心跳(默认30s)
  • 架构图
    image.png
编写server
  • 默认使用spring boot2.1 spring cloud Finchley.RC1 版本 导入maven依赖
     <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
  • @EnableEurekaServer 声明这是个Eureka Server
@EnableEurekaServer
@SpringBootApplication
public class EurekaApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaApplication.class, args);
    }
}
  • application.yml 配置文件
server:
  port: 8000

eureka:
  instance:
    hostname: localhost
  client:
    registerWithEureka: false
    fetchRegistry: false
    serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
编写client服务把微服务注册到 server
  • 依赖
 <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
  • @EnableDiscoveryClient 支持更多的服务组件 如zookeeper 等 也可以换成@EnableEurkaClient
@RestController
@EnableDiscoveryClient
@SpringBootApplication
public class SpringcloudClientApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringcloudClientApplication.class, args);
    }

    @RequestMapping("/hello")
    public String hello(){
        return "hello client";
    }

    @Value("${server.port}")
    String port;
    @RequestMapping("/hi")
    public String home(@RequestParam String name) {
        return "hi "+name+",i am from port:" +port;
    }
}
  • 配置文件
#自己的服务中心地址
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8000/eureka/
server:
  port: 9000
spring:
  application:
    name: service-hi
  • 刷新server 的页面可以看到注册service-hi 服务名端口

Eureka 的集群

构建一个双节点 peer1,peer2 eureka server集群

server
  • 复制第一个server 修改 ArtifactId 为eureka2 或者别的区分
  • 配置系统的host windows 路径为c:\windows\system32\drivers\etc\host; linux MacOS 在 /etc/hosts
    windows修改方法
127.0.0.1 peer1 peer2
  • 修改两个server的配置文件,让两个节点的server 互相注册
spring:
  application:
    name: eureka-server2
# 三段式以上为集群的共有部分
---
#以下只要两两互相注册, 多个server就可以数据同步
spring:
  #指定profiles 设置peer1为第一个节点
  profiles: peer1
server:
  port: 8001
eureka:
  instance:
    #指定profiles=peer1 时,主机名就为peer1了
    hostname: peer1
  client:
    serviceUrl:
      #把自己注册到 peer2 上
      defaultZone: http://peer2:8002/eureka/
---
spring:
  profiles: peer2
server:
  port: 8002
eureka:
  instance:
    hostname: peer2
  client:
    serviceUrl:
      #自己注册到peer1 上 
      defaultZone: http://peer1:8001/eureka/
  • 启动配置如图,peer1,peer2修改启动参数对应就可以了
    image.png
  • 输入peer1:8001
    image.png
  • 当客户端注册时,serviceUrl可以指定其中一个所有集群节点就可以同步注册信息,也可以用逗号隔开 都写上

为 eureka server 添加用户认证
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-security -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
    <version>2.0.1.RELEASE</version>
</dependency>
  • application.yml
spring:
  application:
    name: eureka-server2
  security:
    user:
      name: admin
      password: admin
  • 在认证的server注册client时这样serviceUrl.defaultZone=http://user:pwd@host:port/eureka
  • 元数据又分为两种,标准和自定义;标准元数据指主机名,ip,端口,状态页,健康检查等信息,自定义元数据就需要eureka.instance.metadata-map配置,这些元数据可以在远程客户端访问,但一般不会改变客户端行为,除非它知道元数据含义。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容