淘先锋技术网

首页 1 2 3 4 5 6 7

1.Eureka简介

Eureka是Spring Cloud中的一个负责服务注册与发现的组件。遵循着CAP理论中的A(可用性)和P(分区容错性)。
Eureka是Netflix中的一个开源框架。它和 Zookeeper、Consul一样,都是用于服务注册管理的,同样,Spring-Cloud 还集成了Zookeeper和Consul。
一个Eureka中分为Eureka Server和EurekaClient
Eureka Server
提供服务注册与发现服务
Eureka Client
Service Provider 服务提供方,将自身服务注册到Eureka,从而使服务消费方能够找到;
Service Consumer服务消费方,从Eureka获取注册服务列表,从而能够消费服务。

 

2.使用Eureka实现注册中心

首先新建一个微服务的项目,建立一个空的项目文件夹

1)当你建一个项目之后需要,在idea中配置如下配置

 2)新建一个Module项目

 

 3)修改配置文件pom.xml的配置,修改里面的版本号

  <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.12.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.micro</groupId>
    <artifactId>demo-eureka-server</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo-eureka-server</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Hoxton.SR1</spring-cloud.version>
    </properties>

4)在启动类上加上注解@EnableEurekaServer,这个注解是启动我们注册服务中心

 5)在application中.yml中添加配置信息

server:
  port: 7706
#自己给自己的服务起名字
spring:
  application:
    name: register-center
  security:
    user:
      name: root
      password: root

eureka:
  instance:
    hostname: localhost
  client:
    fetch-registry: false #自己就是注册中心,职责是服务的注册与发现,不需要向注册进来的服务器发请求/??????
    register-with-eureka: false #自己就是注册中心,不需要向自己注册自己
    service-url: #向外暴露自己IP,端口,注册的请求路径
      defaultZone: http://192.168.2.220:7707/eureka/,http://127.0.0.1:7708/eureka/
      #defaultZone:  http://${eureka.instance.hostname}:${server.port}/eureka/
  server:
    enable-self-preservation: true #启用自我i保护
    eviction-interval-timer-in-ms: 5000

3.Eureka的自我保护机制

1)在默认配置中,Eureka Server在默认90s没有得到客户端的心跳则注销该实例,
2)但是往往因为微服务跨进程调用,网络通信往往会面临着各种问题,比如微服务状态正常,但是因为网络分区故障时,Eureka Server注销服务实例则会让大部分微服务不可用,这很危险,因为服务明明没有问题。
3)为了解决这个问题,Eureka 有自我保护机制。
4)它的原理是,当Eureka Server节点在短时间内丢失过多的客户端时(可能发送了网络故障),那么这个节点将进入自我保护模式,不再注销任何微服务,当网络故障回复后,该节点会自动退出自我保护模式。

4.Eureka的集群配置

1)在分布式系统中,任何的地方存在单点,整个体系就不是高可用的,Eureka 也一样,而是以集群的方式对外提供服务。
2)如果单机版本Eureka服务端宕机,会导致所有服务都无法获取使用,为了保证高可用性,我们需要搭建Eureka集群

 

1)  Eureka Server同时也可以是Eureka Client,当有多个节点时,如上图1d,1e,1c之间的Eureka Server通过互相复制来同步自己的服务注册表。
2)  Eureka Client也会缓存服务注册表中的信息,这样不用每次请求都查询Eureka Server,降低Eureka Server的压力,即使所有Eureka Server都宕机了,消费者仍然可以根据缓存来完成调用。

5.实现Eureka的集群配置

1)复制单机版的项目为cluster-eureka-server的Spring Boot项目

 

2) 添加配置信息

 

在这里面最重要的就是server的端口号不一样,然后就是下面代码中的name值要一样,然后就是要修改defaultZone的值将端口号修改为对方服务器的端口号

#自己给自己的服务起名字
spring:
  application:
    name: register-center

还有就是多个服务互联,大于两个的话,只需要在application.yml中做如下配置就好

defaultZone: http://192.168.2.220:7707/eureka/,http://127.0.0.1:7708/eureka/

3)启动项目(项目结构如下)

 

 6.实现集群版注册中心

需求说明
实现集群版注册中心
运行Eureka Server服务,并访问主页

7.修改windows系统中的hosts文件

1)修改C:\Windows\System32\drivers\etc下的hosts文件

 2)在文件中添加如下的内容:

 9)为Eureka Server添加用户认证(也就是说进入这些独立的服务器集群需要用户名和密码的认证,否则无法进入)

1)添加依赖


2)添加配置信息

pplication.yml

spring.security.user.name #认证用户名
spring.security.user.password #认证密码

 

 3)在启动类中添加放行代码

public class DemoEurekaServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoEurekaServerApplication.class, args);
    }
    @EnableWebSecurity
    static class WebSecurityConfig extends WebSecurityConfigurerAdapter{
        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http.csrf().disable();
            super.configure(http);
        }
    }
}

4)启动服务,出现登录页面