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)


相关推荐

  • Spring-Blog:个人博客(一)-Mybatis 读写分离

    Spring-Blog:个人博客(一)-Mybatis 读写分离2018,在平(tou)静(lan)了一段时间后,开始找点事情来做。这一次准备开发一个个人博客,在开发过程之中完善一下自己的技术。本系列博客只会提出一些比较有价值的技术思路,不会像写流水账一样记录开发

  • SVN的安装与配置

    SVN的安装与配置本文主要介绍windows与阿里云liunx(centos)的安装与配置SVN工作原理:客户端-服务端代码的提交、更新每一个版本都会在svn的安装配置目录下SVN下载地址:http://subv

  • html播放rtsp流,浏览器播放rtsp视频流解决方案

    html播放rtsp流,浏览器播放rtsp视频流解决方案最近项目中需要实时播放摄像头rtsp视频流,于是就专门做了些研究。而浏览器不能直接播放,只有通过插件或者转码来实现这个需求。要实现这个目的,可以采用的方案非常得多,有商业的也有开源的,这里主要列举一些开源的方案。这里的方案都是我尝试过了的,有些成功,有些没成功。但是因为每个项目情况不同,这次没成的方法,换个项目也许就能成。方案一:html5+websocket_rtsp_proxy实现视频…

    2022年10月17日
  • 新硬盘如何初始化_linux系统初始化命令

    新硬盘如何初始化_linux系统初始化命令在物理机或者云服务器新加了一块磁盘,为了让Linux系统能够正常使用这块磁盘,要先对磁盘进行一些初始化工作。命令先了解一下我们要使用到的Linux命名:df:用于显示目前Linux系统上的文件系统的磁盘使用情况统计fdisk:用于管理磁盘分区表mount:用于挂载Linux系统外的文件partprobe:用于重读分区表,当出现删除文件后,出现仍然占用空间。可以在不重启的情况下重读分…

  • 多媒体开发之—h264 图像参数级语义

    多媒体开发之—h264 图像参数级语义

  • eclipse中各种代码的注释快捷键

    eclipse中各种代码的注释快捷键Java文件:注释和取消注释的快捷键都是:CTRL+/或Shift+Ctrl+CJS文件:注释和取消注释的快捷键都是:CTRL+/或Shift+Ctrl+Cxml文件:注释:选中要注销的代码CTRL+SHIFT+/或选中代码按Shift+Ctrl+C取消注释:CTRL+SHIFT+\或Shift+Ctrl+Cjsp文件:ht…

发表回复

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

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