SpringCloud进阶之eureka(服务注册和发现)

1.springcloud和springboot的区别

springboot是spring快速搭建项目的一个脚手架,可以基于springboot快速创建单个微服务,springcloud是基于springboot云应用的开发工具;springboot专注快速、方便集成单个微服务个体;springcloud是专注全局服务的框架。springboot使用了默认大于配置理念,使开发更加方便。

2.微服务架构需求的功能或使用场景

  1. 我们把整个系统根据业务拆分成几个系统;
  2. 每个子项目可以部署多个应用,多个应用支架使用负载均衡;
  3. 需要一个服务注册中心,所有的服务都在注册中心,负载均衡也是通过在注册中心注册的服务来使用一定策略来实现;
  4. 所有的客户端都通过同一个网关地址访问后台的服务,通过路由配置,网关来判断一个URL请求由哪个服务处理。请求转发到服务上的时候也使用负载均衡。
  5. 服务之间有时候也需要相互访问。例如有一个用户模块,其他服务在处理一些业务的时候,要获取用户服务的用户数据;
  6. 需要一个断路器,及时处理服务调用时的超时和错误,防止由于其中一个服务的问题而导致整体系统的瘫痪;
  7. 还需要一个监控功能,监控每个服务调用花费的时间等。

目前主流的微服务框架:Dubbo、 SpringCloud、thrift、Hessian等

 

默认大于配置sringboot快速开发个微服务,Spring Cloud是一个基于Spring Boot实现的云应用开发工具;

Spring Boot专注于快速、方便集成的单个微服务个体,Spring Cloud关注全局的服务治理框架;

springcloud主要框架

服务发现——Netflix Eureka

客服端负载均衡——Netflix Ribbon

服务调用——Netflix Feign

熔断器——Netflix Hystrix

服务网关——Netflix Zuul

分布式配置——Spring Cloud Config

消息总线 —— Spring Cloud Bus

spring eureka

功能:注册和发现 服务发现组件、心跳检测、健康检查、缓存、集群。高可用性eureka包含两个组件

eureka server和eureka client

1.eureka server 提供服务注册服务,各个节点启动后,会在eureka server中进行注册,这样eurekaserver中的服务注册表中间会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到

2.eureka client是一个java客户端,简化与eureka server的交互,客户端同事也就在别一个内置的、使用轮询(round-robin)负载均衡器。在应用启动后,将会向eureka server发送心跳。默认周期为30秒。

如果eureka server在多个心跳周期内没有接收到某个节点的心跳,eureka server将会从服务注册表中把这个服务节点移除(默认90秒)

3.eureka server之间通过复制的方式完成数据的同步,eureka还提供了客户端缓存机制,及时所有的eureka server都挂掉,客户端一番可以使用缓存中的信息消费其他服务的api,

eureka 通过心跳检查,客户端缓存等机制,确保了系统的高可用性、灵活性和可伸缩性

 

创建eurka模块

1.在父工程项目pom.xml文件中引入(eureka服务)

 <!--spring cloud -->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Finchley.SR2</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

 

 2.在eureka模块中pom.xml添加

<!--eureka server -->
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
    </dependencies>

 3.在启动类上添加注解@EnableEurekaServer

@SpringBootApplication
@EnableEurekaServer
public class EurekaServer {

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

4. 修改eureka的appliction.yml配置文件 (将要注册到erueka中的项目pom.xml文件中引入依赖(client))

     其中serviceUrl和defaultZone不要写成service-url和default-zone,不是从availabilityZones中map来获取值。

server:
  port: 6868
eureka:
  client:
    registerWithEureka: false #是否将自己注册到eureka上去,它本身就是不需要注册
    fetchRegistry: false   #是否从eureka中获取注册信息。
    serviceUrl:
      defaultZone: http://127.0.0.1:${server.port}/eureka/

5. 在要注册到eureka的模块中的pom.xml依赖中添加依赖:

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

6.在application.yml添加配置,链接eureka的配置,在启动类添加注解@EnableEurekaClient

eureka:
  client:
    #是否将自己注册到eureka服务注册中心,默认为true
    register-with-eureka: true
    #是否从服务注册中心获取可用的服务清单,默认为true
    fetch-registry: true
    service-url:
      defaultZone: http://localhost:6868/eureka

启动eureka和注册项目。访问eureka的地址localhost:6868

三、eureka server在运行期间,会统计心跳失败耳朵比例在15分钟之内是否低于85%,如果出现低于的情况(在单机调试的时候很容易满足,实际在生产环境上通常是由于网络不稳定导致),
eureka server会将当前的实例注册信息保护起来,同事提示这个警告,保护模式主要是用于一组客户端和eureka server之间存在网络分区场景下的保护。一旦进入保护模式,
eureka server将会尝试保护其他服务注册表中的信息,不再删除服务注册表中的数据(也就是刽注册任何微服务)

项目说明 该项目是一个典型的由Spring Cloud管理的微服务项目,主要包括如下模块 micro-service-cloud─────────────────顶层项目 ├──cloud-service-core───────────────基础核心模块 ├──cloud-service-tools──────────────全局通用工具类 ├──cloud-service-reids──────────────Redis二次封装 ├──cloud-eureka-server──────────────服务注册中心[8761] ├──cloud-turbine-server─────────────断路器聚合监控[8769] ├──cloud-zipkin-server──────────────链路追踪监控[9411] ├──cloud-zuul-server────────────────第一代服务网关(Zuul)[8080] ├──cloud-gateway-server─────────────第二代服务网关(Gateway)[8080] ├──cloud-modules-app────────────────App微服务模块 ├───────modules-app-user────────────App用户服务模块[努力更新中] ├───────modules-app-doctor──────────App医生服务模块[努力更新中] ├──cloud-modules-service────────────微服务通用服务模块 ├───────mongodb-file-service────────Mongodb文件服务模块[11010] ├───────redis-delay-service─────────延迟消费服务模块[11020] ├──cloud-modules-web────────────────Web微服务模块 ├───────modules-web-security────────Web医生服务模块[12010] ├───────modules-web-user────────────Web用户服务模块[12020] ├──cloud-modules-wechat─────────────Wechat微服务模块 ├───────modules-wechat-user─────────Wechat用户服务模块[努力更新中] └───────modules-wechat-doctor───────Wechat医生服务模块[努力更新中] 修改日志 修改日志 修改人 修改日期 版本计划 V1.0 刘岗强 2019-01-07 项目初始化 V1.1 刘岗强 待定 新增自动问答 项目介绍 基于Spring Cloud Finchley SR2 Spring Boot 2.0.7的最新版本。 核心基础项目内实现类自定义的权限注解,配合RBAC权限模型+拦截器即可实现权限的控制,具体的参考项目中的实现。同时也封装了一些顶层类和结果集等。 注册中心实现高可用配置,详情见eureka的one、two、three三个配置文件,摘要如下。 ------------------------------------------配置节点一---------------------------------------------- server: port: 8761 spring: application: name: cloud-eureka-server eureka: instance: hostname: cloud.server.one prefer-ip-address: true instance-id: ${spring.cloud.client.ip-address}:${server.port}:${spring.application.name} client: healthcheck: enabled: true register-with-eureka: false fetch-registry: false service-url: defaultZone: http://cloud.server.two:8762/eureka/,http://cloud.server.three:8763/eureka/ ------------------------------------------配置节点二----------------------------------------------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值