SpringCloud学习第二天之Eureka

SpringCloud学习第二天之Eureka

一、Eureka基础知识

1、服务治理

在这里插入图片描述

2、服务注册与发现

在这里插入图片描述
在这里插入图片描述

3、Eureka组件

在这里插入图片描述

二、单机Eureka构建步骤

1、构建EurekaServer服务注册中心模块

同样4步走
①建立model:cloud-eureka-server7001
②改pom.xml文件,最重要注意此是server模块,引入server依赖即可

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

③改yml文件

server:    #设置端口号
  port: 7001

eureka:
  instance:
    hostname: localhost  #eureka服务端的实例名字
  client:
    register-with-eureka: false    #表识不向注册中心注册自己
    fetch-registry: false   #表示自己就是注册中心,职责是维护服务实例,并不需要去检索服务
    service-url:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/    #设置与eureka server交互的地址查询服务和注册服务都需要依赖这个地址

④在主启动类上添加@EnableEurekaServer注解表名此为server端

2、构建EurekaClient端,将payment和order模块也就是服务提供者和消费者注册进Eureka服务中心

①改pom.xml文件,将eureka-client依赖加入

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

②改yml文件

server:
  port: 80

spring:  #表示添加入注册中心,在注册中心等级的名称
  application:
    name: cloud-order-service

eureka:
  client:
    register-with-eureka: true  #表识向注册中心注册自己
    fetchRegistry: true
    service-url:
      defaultZone: http://localhost:7001/eureka #要注册的注册中心地址

③在主启动类上添加@EnableEurekaClient注解

3、效果

在这里插入图片描述

三、Eureka集群搭建

1、eureka集群原理

在这里插入图片描述

2、集群搭建

①新建cloud-eureka-server7002和cloud-eureka-server7003模块
②在上述2个模块中pom.xml文件添加依赖
③修改电脑的host文件中的映射配置为
127.0.0.1 eureka7001.com
127.0.0.1 eureka7002.com
127.0.0.1 eureka7003.com
④修改7001、7002和7003模块的yml文件中的端口号以及defaultZone,将他们相互注册,以7001的为例:

server:
  port: 7001

eureka:
  instance:
    hostname: eureka7001.com  #eureka服务端的实例名字
  client:
    register-with-eureka: false    #表识不向注册中心注册自己
    fetch-registry: false   #表示自己就是注册中心,职责是维护服务实例,并不需要去检索服务
    service-url:
      defaultZone: http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/    #设置与eureka server交互的地址查询服务和注册服务都需要依赖这个地址

⑤为7002和7003添加启动类
⑥效果展示
在这里插入图片描述
⑦将payment和order模块注册进入eureake-server:修改application.yml文件中的defaultZone即可

server:
  port: 80

spring:
  application:
    name: cloud-order-service

eureka:
  client:
    register-with-eureka: true
    fetchRegistry: true
    service-url:
      defaultZone: http://localhost:7001/eureka,http://localhost:7002/eureka,http://localhost:7003/eureka

⑧服务提供者集群构建

  • 新建cloud-provider-payment8002模块,里面内容同8001模块大致类似,改变yml文件中的端口号为8002,其他配置不变。
  • 修改8001和8002模块中的业务层代码,添加属性serverPort为当前模块的端口号,并将此属性返回给前端,告知消费者调用的是服务提供者集群中的哪一个服务端口。
public class PaymentServiceImpl implements PaymentService {

    @Resource
    private PaymentDao paymentDao;

    @Value("${server.port}")
    private String serverPort;//对应yml文件中的server.port

    @Override
    public CommonResult create(Payment payment) {
        int result = paymentDao.create(payment);
        log.info("******插入结果{}",result);
        if (result > 0){
            return new CommonResult(200,"插入数据成功,serverPort:"+serverPort,result);
        }else
            return new CommonResult(404,"插入数据失败",null);
    }

    @Override
    public CommonResult getPaymentById(Long id) {
        Payment payment = paymentDao.getPaymentById(id);
        log.info("******查询结果{}",payment);
        if(payment != null){
            return new CommonResult(200,"查询成功,serverPort"+serverPort,payment);
        }else
            return new CommonResult(404,"没有对应记录"+id,null);
    }
}

  • 此时,修改服务消费者模块中的controller层代码,因为此时消费者调用的是提供者集群,因此最初定义的"PAYMENT_URL"常量需要修改为服务提供者集群的名称,对应于服务提供者yml文件中的sprng.application.name。
  • 最后开启restTemplate的负载均衡功能,在80模块中的AplicationContextConfig类中的注入到Sprinf容器的RestTemplate上面添加注解@LoadBalanced,开启负载均衡。
@Configuration
public class ApplicationContextConfig {

    @Bean
    @LoadBalanced
    public RestTemplate getRestTemple(){
        return new RestTemplate();
    }
}
  • 此时负载均衡实现,消费者调用提供者集群时,就会随机调用其中一个。

三、actuator完善微服务信息

修改服务提供者8001和8002模块的yml文件

  • 修改服务名称,不显示主机名称
  • 显示每个端口的ip地址
eureka:
  client:
    register-with-eureka: true
    fetchRegistry: true
    service-url:
      defaultZone: http://localhost:7001/eureka,http://localhost:7002/eureka,http://localhost:7003/eureka
  instance:
    instance-id: payment8001
    prefer-ip-address: true #访问路径可以显示ip地址

效果图:
在这里插入图片描述

四、服务发现Discovery

1、介绍

对于注册进eureka里面的微服务,可以通过服务发现来获得该服务的信息。也就是说8001注册进入了Eureka,就可以通过DiscoveryClient来获取整个微服务系统里面的所有信息

2、实现
  • 修改服务提供者8001里面的controller
    在这里插入图片描述
  • 在8001的主启动类上加上@EnableDiscoveryClient注解
  • 效果展示 在这里插入图片描述
    在这里插入图片描述

五、Eureka的自我保护机制

在这里插入图片描述

1、总的概括

某时刻某一个微服务不可用了,Eureka不会立即清理,依旧会对该微服务的信息进行保存。
属于CAP分支里面的AP分支

2、为什么会产生Eureka自我保护机制

为了防止EurekaClient可以正常工作,但是与EurekaServer网络不通的情况下,Eureka不会立刻将EurekaClient服务剔除

3、自我保护机制

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值