springCloud-eureka的使用

1. 简介:

springCloud是用来管理微服务的,而eureka是服务的注册中心,服务提供者将写好的服务注册到eureka中,供消费者根据需要调用服务。
在这里插入图片描述

2. eureka的简单使用

说明:只给出了关键步骤,springboot以及数据库等的相关依赖配置等不做解释。

①编写服务并注册到eureka注册中心*
  • 新建一个springboot项目作为eureka服务中心,导入eureka的依赖
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-eureka</artifactId>
    <version>1.4.6.RELEASE</version>
</dependency>
  • 在yml文件中配置相关信息:
server:
  port: 7001
#Eureka配置
eureka:
instance:
  # Eureka服务端的实例名字
  hostname: eureka7001
client:
  # 表示是否向 Eureka 注册中心注册自己(这个模块本身是服务器,所以不需要)
  register-with-eureka: false
  # fetch-registry如果为false,则表示自己为注册中心,客户端的化为 ture
  fetch-registry: false
  # Eureka监控页面~
  service-url:
    defaultZone: http://eureka7001:7001/eureka/
  • 开启eureka功能

在springboot启动类上加上@EnableEurekaServer注解

  • 判断是否成功

能成功访问本地7001端口表示成功

②编写服务提供者
  • 创建一个springboot项目来提供服务,导入eureka依赖同上
  • 像普通springboot项目一样编写好Dao,Service,Controller,内容自定。
  • 在yml配置文件中配置如下:(配置根据自己情况需做适当变化)
 server:
  port: 8001

spring:
  application:
    name: springCloud-provider-dept8001
  datasource:
    url: jdbc:mysql://localhost:3306/springcloud01?characterEcoding=utf-8
    username: root
    password: abc19990705
    driver-class-name: com.mysql.jdbc.Driver

mybatis:
  mapper-locations: classpath:mapper/*.xml

  # Eureka配置:配置服务注册中心地址
eureka:
    client:
      service-url:
        defaultZone: http://eureka7003:7003/eureka/
    instance:
      instance-id: springcloud-provider-dept-8001 #修改Eureka上的默认描述信息
  • 开启eureka功能

在springboot启动类加上@EnableEurekaClient注解开启eureka功能

  • 验证是否注册成功

先启动eureka服务在启动提供服务的项目,
访问本地7001端口可以查看到自己的注册的服务表示成功
在这里插入图片描述

③服务调用
  • 新建springboot项目,创建一个Controller控制类
  • 任意新建一个类,将RestTemplate注册到spring容器
@Configuration
public class RestTemplateConfig {
	@Bean
    public RestTemplate getRestTemplate(){
    return new RestTemplate();
	}
}
  • 调用服务
    在Controller类创建RestTemplate对象,自动注入即可,然后通过RestTemplate对象的getForObject(“服务提供者提供服务的完整路径”,“返回值类型”)方法来调用服务;
 @RestController
public class DeptController {

    @Autowired
    RestTemplate restTemplate;
    private static final String url="http://localhost:8001";

    @RequestMapping("/getDepts")
    public List<dept> getDepts(){
        return restTemplate.getForObject(url+"/getDepts",List.class);
    }
}

3.常用的方法

 @Autowired
    DiscoveryClient discoveryClient;

    public void  showServiceInfo(){
        final List<String> services = discoveryClient.getServices();
        System.out.print(services);
        List<ServiceInstance> instances = discoveryClient.getInstances("SPRINGCLOUD-PROVIDER-DEPT8001");
        System.out.println(instances);
        for (ServiceInstance instance: instances) {
            System.out.println("服务主机:"+instance.getHost());
            System.out.println("服务url:"+instance.getUri());
            System.out.println("服务端口:"+instance.getPort());
        }
    }

4. eureka的自我保护机制

在没有开启自我保护的情况下,应用启动后,节点们将会向Eureka Server发送心跳,默认周期为30秒,如果Eureka Server在多个心跳周期内没有接收到某个节点的心跳,Eureka Server将会从服务注册表中把这个服务节点移除(默认90秒)。
在开启了自我保护的情况下,当注册中心与服务连接不正常的实例数量超过15%的时候,会开启保护模式,页面会出现下面这一行红字,提示服务连接存在问题,但是注册中心会认为是其他的问题(比如可能是网络不稳定)造成的,不会注销没有心跳的服务。(注意:即使在代码中开启自我保护属性设置为true,但是当没有心跳的实例低于15%的时候,eureka服务会认为这是服务自身的问题,还是会正常注销服务的,也就是说自我保护模式是当超过15%的实例都没有心跳的情况下才会生效)
在这里插入图片描述开启(默认)/关闭自我保护机制的方法:
在Eureka server端yml配置文件中配置:

eureka:
	server:
    	#开启(默认)/关闭自我保护模式
    	enable-self-preservation: true
    	#evictionIntervalTimerInMs: 4000

配置心跳检查的时间以及在没有心跳时注销服务的时间:
在服务提供端(客户端)yml配置文件中配置:

eureka:
  instance:
  	#心跳检测时间(例如每秒检测一次)
    lease-renewal-interval-in-seconds: 1
    #移除服务实例距离上一次检测到心跳的时间(例如0秒的时候还能检测到心跳,如果1秒的时候检测不到,那么到2秒的时候就移除实例)
    lease-expiration-duration-in-seconds: 2

5.eureka集群搭建

①创建多个节点

前面我们用springboot创建了一个Eureka服务,现在我们要创建多几个这样的注册中心,首先还是创建项目,导入依赖;

②为了便于区分多个节点,我们在本地伪造几个域名

在如下路径下用记事本打开hosts文件
在这里插入图片描述
添加几个伪域名,地址都是本机地址(此时我们访问三个域名其实都是访问localhost)
在这里插入图片描述

③修改yml配置

在这里插入图片描述

运行检查

同样需要先运行eureka服务,在运行服务提供项目;
结果如下表示成功:
在这里插入图片描述

CAP原则

CAP原则又称CAP定理,指的是在一个分布式系统中, Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性);

zookeeper遵从CP原则:当Leader宕机以后,集群机器马上会进去到新的Leader选举中,但是选举时长在30s — 120s之间,这个选取Leader期间,是不提供服务的,不满足可用性,所以牺牲了可用性

eureka遵从AP原则:Eureka各个节点都是平等的(就是我们前面做的注册中心的集群保证了各个节点之间是平等的,因为集群的注册中心会相互挂载其他注册中心的注册服务的地址),几个节点挂掉不会影响正常节点的工作,Eureka的客户端在向某个Eureka注册中心进行注册时,如果发现连接失败,则会自动切换至其他节点,只要有一台Eureka还在,就能保住注册服务的可用性剩余的节点依然可以提供注册和查询服务,但是不会被同步到其他节点上,所以不能保证强一致性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值