栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SpringCloud系列——Eureka day2-1

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SpringCloud系列——Eureka day2-1

Eureka
  • 前言
  • Eureka
    • 提供者和消费者
    • Eureka注册中心
      • 远程服务调用问题
      • Eureka的作用
    • quickstart
      • 1.创建项目选择eureka server
      • 2.编写启动类,使用@EnableEurekaServer
      • 3.配置yaml
    • Eureka服务注册
      • 1.到commons模块下引入client依赖
      • 2.添加yaml配置
        • 完整
      • 3.测试
    • Eureka服务拉取
      • 1.根据上面的服务注册把client也注册进去
      • 2.改写服务地址为服务名
      • 3.添加@LoadBalanced进行负载均衡
    • 模拟负载均衡
      • 1.找到我们要进行做负载的服务
        • 复制配置
        • 修改名称和环境中的虚拟机选项
        • 启动即可
      • 2.再次启动测试

前言

由于是系列文章所以知识是连贯的,当然代码也是,所以大家要是有看不懂的可以往上走一篇

Eureka 提供者和消费者

服务提供者 : 一次业务中,被其它微服务调用的服务。(提供接口给其它微服务)
服务消费者 : 一次业务中,调用其它微服务的服务。(调用其它微服务提供的接口)

一个服务既可以是消费者也可以是提供者

Eureka注册中心 远程服务调用问题

服务有很多,端口不一,环境(使用环境,测试环境等)各不相同,服务的存活不一

  1. 服务消费者该如何获取服务提供者的地址信息?
  2. 如果有多个服务提供者,消费者该如何选择?
  3. 消费者如何得知服务提供者的健康状态?
Eureka的作用

将服务的消费者和提供者统一为eureka-client(客户端)
其中服务提供者(注册自己的信息到eureka-server,每隔30s向eureka-server发送心跳)
服务消费者(根据服务名称从eureka-server拉取服务列表,基于服务列表做负载均衡,选中一个微服务后发起远程调用)
而eureka-server作为注册中心(记录服务信息,服务心跳监控)

当每一个服务启动时会将自己的信息注册给eureka-server形成注册表
当服务的消费者需要服务时会向eureka-server进行索取,从中拉取服务的信息
当服务的消费者拿到多个服务要确认在哪个服务上进行时需要用到负载均衡,向服务的提供者发送请求(远程调用)
服务的提供者每30s向eureka-server发送一次心跳请求来确保服务存活,若服务不再发送则认为服务死亡,将死亡的服务从注册表中剔除

  1. 消费者该如何获取服务提供者具体信息?
  • 服务提供者启动时向eureka注册自己的信息eureka保存这些信息
  • 消费者根据服务名称向eureka拉取提供者信息
  1. 如果有多个服务提供者,消费者该如何选择?
  • 服务消费者利用负载均衡算法,从服务列表中挑选一个
  1. 消费者如何感知服务提供者健康状态?
  • 服务提供者会每隔30秒向EurekaServer发送心跳请求,报告健康状态
  • eureka会更新记录服务列表信息,心跳不正常会被剔除
  • 消费者就可以拉取到最新的信息
quickstart

新建项目导入eureka-server
处理pom请看上一篇文章,这里我就不说了pom处理

1.创建项目选择eureka server


同时我给出pom依赖



    4.0.0
    
        com.example
        springcloud
        0.0.1-SNAPSHOT
        ../pom.xml
    
    com.example
    eureka-server
    0.0.1-SNAPSHOT
    eureka-server
    Demo project for Spring Boot
    
        1.8
    
    
        
            org.springframework.cloud
            spring-cloud-starter-netflix-eureka-server
        

        
            org.springframework.boot
            spring-boot-starter-test
            test
        
    
    
        
            
                org.springframework.cloud
                spring-cloud-dependencies
                ${cloud.version}
                pom
                import
            
        
    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    




2.编写启动类,使用@EnableEurekaServer
package com.example.eurekaserver;

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

@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {

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

}

3.配置yaml
server:
  port: 8889

spring:
  application:
    name: eurekaserver
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:8889/eureka

启动访问后你看到这些东西就说明没问题

Eureka服务注册

接下来我们要进行服务的注册

1.到commons模块下引入client依赖
        
        
            org.springframework.cloud
            spring-cloud-starter-netflix-eureka-client
            3.1.2
        
2.添加yaml配置
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:8889/eureka
完整
server:
  port: 8888

spring:
  application:
    name: commons

  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/routerboot?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai&zeroDateTimeBehavior=CONVERT_TO_NULL&allowPublicKeyRetrieval=true
    username: root
    password: syf20020816

eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:8889/eureka
3.测试

打开服务进行测试

Eureka服务拉取

服务拉取是基于服务名称获取服务列表,然后在对服务列表做负载均衡

1.根据上面的服务注册把client也注册进去

2.改写服务地址为服务名

原来

private static final String COMMONS_URL = "http://localhost:8888";

改写后

private static final String COMMONS_URL = "http://commons";
3.添加@LoadBalanced进行负载均衡

找到我们的RestTemplate 注册的Bean进行添加

package com.example.client.config;

import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

@Configuration
public class ApplicationContextConfig {
    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate(){
        return new RestTemplate();
    }

}

测试后正常,但是这里是没有负载均衡的,因为我没开启

模拟负载均衡 1.找到我们要进行做负载的服务 复制配置

修改名称和环境中的虚拟机选项
-Dserver.port=8887


那么下面就多出一个服务了

启动即可

我们就可以看到多出服务了

2.再次启动测试

如果大家要看日志打印可以加上@Slf4j注解(这个应该不用说了吧)
我这边访问了4次奈何三次都走了8887端口一次走了8888


但是确实已经达到负载均衡

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/872710.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号