Eureka 集群部署

Eureka 集群部署Eureka集群介绍 注册中心Eureka又称服务中心,管理各种服务功能包括服务的注册、发现、熔断、负载、降级等。任何一个服务都不能直接去掉用,都需要通过注册中心来调用。通过服务中心来获取服务你不需要关注你调用的项目IP地址,由几台服务器组成,每次直接去服务中心获取可以使用的服务去调用既可。由于各种服务都注册到了服务中心,就有了很多高级功能条件。比如几台服务提供相同服务来做客户端负载均衡(Ribbon);监控服务器调用成功率来做断路器(Hystrix),移除服务列表中的故障点;监控服务调用时间

大家好,又见面了,我是你们的朋友全栈君。

Eureka 集群

介绍 注册中心Eureka

又称服务中心,管理各种服务功能包括服务的注册、发现、熔断、负载、降级等。

任何一个服务都不能直接去掉用,都需要通过注册中心来调用。通过服务中心来获取服务你不需要关注你调用的项目IP地址,由几台服务器组成,每次直接去服务中心获取可以使用的服务去调用既可。

由于各种服务都注册到了服务中心,就有了很多高级功能条件。比如几台服务提供相同服务来做客户端负载均衡(Ribbon);监控服务器调用成功率来做断路器(Hystrix),移除服务列表中的故障点;监控服务调用时间来对不同的服务器设置不同的权重、智能路有(Zuul)等等。

Spring Cloud 封装了 Netflix 公司开发的 Eureka 模块来实现服务注册和发现。Eureka 采用了 C-S 的设计架构。Eureka Server 作为服务注册功能的服务器,它是服务注册中心。而系统中的其他微服务,使用 Eureka 的客户端连接到 Eureka Server,并维持心跳连接。这样系统的维护人员就可以通过 Eureka Server 来监控系统中各个微服务是否正常运行。Spring Cloud 的一些其他模块(比如Zuul)就可以通过 Eureka Server 来发现系统中的其他微服务,并执行相关的逻辑。

Eureka由两个组件组成:Eureka服务器和Eureka客户端。Eureka服务器用作服务注册服务器。Eureka客户端是一个java客户端,用来简化与服务器的交互、作为轮询负载均衡器,并提供服务的故障切换支持。Netflix在其生产环境中使用的是另外的客户端,它提供基于流量、资源利用率以及出错状态的加权负载均衡

在这里插入图片描述

1、Eureka Server

  • Eureka Server 作为一个独立的部署单元,以 REST API 的形式为服务实例提供了注册、管理和查询等操作。同时,Eureka Server 也为我们提供了可视化的监控页面,可以直观地看到各个 Eureka Server 当前的运行状态和所有已注册服务的情况。

2、Service Provider

  • 服务提供方
  • 将自身服务注册到Eureka,从而使服务消费方能够找到

3、Service Consumer

  • 服务消费方
  • 从Eureka获取注册服务列表,从而能够消费服务

Eureka集群部署

  1. 新建一个maven工程,pom如下

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.2.7.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>ink.pog</groupId>
    <artifactId>eurekaserver</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <description>Demo project for Spring cloud</description>
    <dependencies>
    <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
    </dependency>
    </dependencies>
    <dependencyManagement>
    <dependencies>
    <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-dependencies</artifactId>
    <version>Hoxton.SR4</version>
    <type>pom</type>
    <scope>import</scope>
    </dependency>
    </dependencies>
    </dependencyManagement>
    <build>
    <plugins>
    <plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    </plugin>
    </plugins>
    </build>
    </project>
    
  2. 配置yml

    server:
    # 设置端口号
    port: 7001
    spring:
    application:
    name: eurekaserver
    eureka:
    instance:
    # 单机hostname为localhost
    hostname: eureka7001.com
    # 如果启用了ip注册地址,那么篡改了hosts文件也没用,会让hostname无效,显示的ip地址
    prefer-ip-address: false
    client:
    # 是否从Eureka Server获取注册信息
    fetch-registry: true
    # 是否将自己注册到Eureka Server 
    # 因为这里是集群所以需要将自己注册到Eureka Server,单机则不需要
    register-with-eureka: true
    service-url:
    # 配置其他集群的地址进行相互注册
    defaultZone: 	http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
    

    由于是集群,以及配置了hostname和http://eureka7002.com的写法,所以需要我们去hosts进行配置

    hosts文件的位置在: C:\Windows\System32\drivers\etc

    127.0.0.1 eureka7003.com
    127.0.0.1 eureka7002.com
    127.0.0.1 eureka7001.com
    
  3. 开启对Eureka Server的支持

    @SpringBootApplication
    @EnableEurekaServer
    public class EurekaserverApplication { 
    
    public static void main(String[] args) { 
    
    SpringApplication.run(EurekaserverApplication.class, args);
    }
    }
    

剩下的两个服务中心也是这样配置,就不贴了

提供者配置

  1. 创建一个maven工程,pom跟集群部署的pom类似,只不过要添加数据库之类的东西,这样就不贴了

  2. 配置yml文件

    server:
    port: 8001
    spring:
    application:
    # 这个实例名很重要,这在以后的消费者与提供者之间相互调用一般都是根据这个name	
    name: producter
    datasource:
    url: jdbc:mysql://localhost/crud?useUnicode=true&characterEncoding=utf-8
    username: root
    password: root
    driver-class-name: com.mysql.jdbc.Driver
    mybatis:
    mapper-locations: classpath:mapper/*.xml configuration: map-underscore-to-camel-case: true eureka: instance: instance-id: springcloud-eureka-producter prefer-ip-address: true client: fetch-registry: true # 向服务中心注册自己 register-with-eureka: true service-url: # 因为是集群部署,所以需要向所有的集群注册自己 defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7003.com:7003/eureka/,http://eureka7002.com:7002/eureka/ 
  3. 写提供的方法

    @RestController
    public class EmplyeeController { 
    
    @Autowired
    private EmplyeeService emplyeeServiceImpl;
    @GetMapping("/empl/get/{id}")
    public Emplyee get(@PathVariable("id")int id){ 
    
    return emplyeeServiceImpl.get(id);
    }
    @GetMapping("/empl/get")
    public List<Emplyee> getAll(){ 
    
    return emplyeeServiceImpl.getAll();
    }
    }
    
  4. 开启Eureka client

    @SpringBootApplication
    @EnableEurekaClient
    public class Producter8001Application { 
    
    public static void main(String[] args) { 
    
    SpringApplication.run(Producter8001Application.class, args);
    }
    }
    

这样一个提供者的服务就配置好,下面贴一个提供者项目的结构
在这里插入图片描述

消费者部署

  1. 创建maven工程,配置pom

  2. 配置yml

    eureka:
    instance:
    instance-id: consumer80
    client:
    register-with-eureka: true
    service-url:
    defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
    fetch-registry: true
    
  3. 因为是基本RestFul风格,所以需要配置一下RestTemplate以及负载均衡LoadBalanced

    @Configuration
    public class config { 
    
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate(){ 
    
    return new RestTemplate();
    }
    }
    
  4. 写消费者方法

    @RestController
    public class EmplyeeConsumer { 
    
    @Autowired
    private DiscoveryClient client; # 获取服务信息类
    @Autowired
    private RestTemplate restTemplate; 
    # 这里的前缀就是刚才配置提供者的实例名字,spring.application.name
    private static final String REST_URL_PREFIX = "http://PRODUCTER";
    @GetMapping("/empl/get/{id}")
    public Emplyee get(@PathVariable("id")int id){ 
    
    return restTemplate.getForObject(REST_URL_PREFIX+"/empl/get",Emplyee.class);
    }
    @GetMapping("/empl/get")
    public List<Emplyee> getAll(){ 
    
    return restTemplate.getForObject(REST_URL_PREFIX + "/empl/get",List.class);
    }
    # 获取微服务的信息
    @GetMapping("/info")
    public List<ServiceInstance> info(){ 
    
    List<ServiceInstance> eurekaserver = client.getInstances("EUREKASERVER");
    return eurekaserver;
    }
    }
    

运行集群

至此,一个集群的配置就好了,接下运行一下试试,首先启动服务中心

在这里插入图片描述

然后接着启动提供者以及消费者,访问即可

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/139457.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • Matlab仿真PID控制(带M文件、simulink截图和参数分析)

    Matlab仿真PID控制(带M文件、simulink截图和参数分析)在直接数字域设计中,我们常常需要用到PID算法,而PID算法投入单片机使用时,往往需要硬件的支持,在调试时非常麻烦。本文通过Matlab仿真的手段实现PID,方便了开发者对系统的设计和实时调试。

  • 计算机二级公共基础知识笔记

    计算机二级公共基础知识笔记计算机二级公共基础知识计算机系统考点一:计算机概述1.计算机的发展历程目前公认的第一台电子数字计算机是ENIAC,它于1946年在美国宾夕法尼亚大学研制成功。根据计算机本身采用的物理器件不同,将其发展分为4个阶段第一阶段是电子管计算机时代,时间为1946年到20世纪50年代第二阶段是晶体管计算机时代,时间为20世纪50年代后期到50世纪60年代中期第三阶段是中小规模集成电路计算机时代,时间是20世纪60年代中期到20世纪70年代初期第四阶段是大规模和超大规模集成电路计算机时代,时间是20

  • linux文件重命名命令rename_修改文件名linux

    linux文件重命名命令rename_修改文件名linuxlinux下重命名文件有两种方式:1.较简单的处理命令:mvmv原文件名新文件名如:mvmyFilenewName将MyFile重命名为newName.2.linux提供了一个重命名文件命令:renamerenamefromtofile1file2。。。如:renamemyFilenewNamemyFile.text将myFile.text重命名为newName.text这个命令在批量重命名是更好用如:renamemyFilenewNamemy

  • CS模型下载_利益相关者模型

    CS模型下载_利益相关者模型当前统计模型,CS模型基于当前统计模型的无迹卡尔曼滤波目标基于当前统计模型的容积卡尔曼滤波目标机动目标跟踪——当前统计模型(CS模型)1.对机动目标跟踪的理解1.1.对机动目标跟踪的理解1.2.目标模型概述2.”当前”统计CS模型3.”当前”统计CS模型3.1.”当前”统计CS模型(连续)3.2.”当前”统计CS模型(离散)3.3.”当前”统计CS模型分析4.”当前”统计CS模型(二维)4.1.”当前”统计CS模型(连续)………………

  • Maven打包——配置文件

    Maven打包——配置文件当我们需要打包一些灵活性(有可能经常修改代码)的代码时,会遇到这样的问题:每次修改代码完以后,得需要重新对代码进行打包,重新上传使用。此时,我们可以将一些经常修改的代码放置在配置文件中,以便灵活修改,修改时,只需在打包好的压缩包中进行配置的修改,保存即可,无需重新打包。…

  • charles抓包教程(微信7以上如何抓包)

    APP抓包和微信小程序抓包-Charles的精简使用教程目标教程一、安装Charles二、Charles简介(1)Charles欢迎页面(2)基础功能按钮(3)抓包内容显示方式(4)过滤抓包内容三、手机配置Charles代理四、解决配置Charles代理之后手机无法上网的问题五、手机APP抓包(1)对“花生地铁”APP进行抓包。六、微信小程序抓包(1)安装SSL…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号