spring cloud (三)Eureka

一、什么是Eureka

Eureka 是Netflix开源的服务发现组件,本身是一个基于REST的服务。它包含Server和Client两部分。Spring cloud将它集成在子项目Spring cloud Netflix中,从而实现微服务的注册与发现。

二、Eureka原理


注:上图来源于网络,非lz所画

如图,可以看出服务的生产端将服务注册到Eureka中,当客户端需要消费的时候,只需要去Eureka取出服务端的数据即可。由此可见Eureka就是一个保存服务的部署信息的仓库。他负责服务的注册和发现。

二、编写Eureka服务

Eureka服务先引入jar包依赖

<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka-server</artifactId>
        </dependency>
然后编写启动类,并在启动类上引入注解@EnableEurekaServer
package com.wangcongming.shop.eureka;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

/**
 * @author wangcongming
 * @Package com.wangcongming.shop.eureka
 * @Description:
 * @date 2018/5/8 20:17
 */
@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaApplication.class,args);
    }
}

配置文件编写

server.port=8802
#注册中心默认端口就是8802,也可通过下面的方式定义其他端口
spring.application.name=eureka-server

eureka.client.registerWithEureka=false
eureka.client.fetchRegistry=false

eureka.client.registerWithEureka表示是否将自己本身注册到Eureka中,false表示不注册

eureka.client.fetchRegistry表示是否从Eureka中获取注册信息,false表示不获取

现在一个简单的Eureka服务注册中心就搭建完成了

三、Eureka的高可用

系统的搭建,它的可用性很重要,现在我们把服务注册到Eureka中,但是如果Eureka服务宕机了怎么办呢?

下面就说说Eureka服务的高可用。

Eureka是个服务注册与发现中心,我们只需要将Eureka服务本身注册到Eureka中,然后多部署几个节点,搭建出Eure server集群,那么就可以达到Eureka的高可用了,具体实现如下。

1.修改启动类,加入@EnableEurekaClient注解,代码如下

package com.wangcongming.shop.eureka;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

/**
 * @author wangcongming
 * @Package com.wangcongming.shop.eureka
 * @Description:
 * @date 2018/5/8 20:17
 */
@SpringBootApplication
@EnableEurekaServer
@EnableEurekaClient
public class EurekaApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaApplication.class,args);
    }
}

2.修改配置文件

server.port=8802
#注册中心默认端口就是8802,也可通过下面的方式定义其他端口
spring.application.name=eureka-server

eureka.client.serviceUrl.defaultZone=http://localhost:8802/eureka/,http://localhost:8803/eureka/
#eureka.client.registerWithEureka=false
#eureka.client.fetchRegistry=false

eureka.client.serviceUrl.defaultZone 表示的是注册地址

四、Eureka client端编写

Eureka服务已经搭建完毕,下面开始介绍怎么使用

1.搭建新的服务,引入jar包

<!-- eureka -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
        </dependency>

2.编写配置文件

# Set Listen Port
spring.application.name=user-system
server.port=8801
#Runtime Environment: dev test prod
spring.profiles.active=dev

eureka.client.serviceUrl.defaultZone=http://localhost:8802/eureka/,http://localhost:8803/eureka/

3.编写启动类

package com.wangcongming.shop.user;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.context.annotation.ComponentScan;

/**
 * @author wangcongming
 * @Package com.wangcongming.shop.user
 * @Description:
 * @date 2018/5/8 19:58
 */
@EnableEurekaClient
@SpringBootApplication
public class UserSystemApplication {

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

Eureka服务注册中心到这里就介绍完了

最后再说一点,Eureka服务注册情况,可打开链接 http://localhost:8802/查看


五、为Eureka server添加用户认证

在项目架构中安全很重要,像这样不加认证,就可以将服务注册进Eureka是非常不安全的。

下面介绍如何添加用户认证

1.在刚刚的Eureka server中添加jar依赖,依赖如下

<!--为Eureka添加用户认证-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>

2.在配置文件中,添加配置信息

security.basic.enabled=true
security.user.name=wangcongming
security.user.password=123456

3.改造Eureka client注册url

eureka.client.serviceUrl.defaultZone=http://username:password@localhost:8802/eureka/

六、Eureka的自我保护

eureka server 在一定时间内没有接收到某个服务实例的心跳,Eureka server 则自动会将该实例注销(默认心跳时间是90s)。但是当因为故障等一些原因,导致微服务与Eureka server之间不能正常通信,此时微服务本身是没有问题的,如果这时注销微服务实例是不合适的。

Eureka通过自我保护机制来解决这个问题,当Eureka server的节点在短时间内丢失过多客户端时,那么这个节点会进入自我保护模式。进入此模式,不会再删除服务注册表中的数据,此时会将数据保护起来,等到故障恢复后,会自动退出自我保护模式。

在spring cloud中可以配置eureka.server.enable-self-preservation=false来禁用自我保护模式,默认是启用的

七、Eureka的健康检查

在Status栏显示着UP,表示应用程序状态正常。其它取值DOWN、OUT_OF_SERVICE、UNKNOWN等,只有UP的微服务会被请求。由于Eureka Server与Eureka Client之间使用心跳机制来确定Eureka Client的状态,默认情况下,服务器端与客户端的心跳保持正常,应用程序就会始终保持“UP”状态,所以微服务的UP并不能完全反应应用程序的状态。Spring Boot Actuator提供了/health端点,该端点可展示应用程序的健康信息,只有将该端点中的健康状态传播到Eureka Server就可以了,实现这点很简单,只需为微服务配置如下内容:

#开启健康检查(需要spring-boot-starter-actuator依赖)
eureka.client.healthcheck.enabled = true







猜你喜欢

转载自blog.csdn.net/linhui258/article/details/80560292