走进Spring Cloud之二 eureka注册中心(Greenwich版本)

走进Spring Cloud之二 eureka注册中心(Greenwich版本)eureka 集群使用新建集群配置 profiles application peer1 yml application peer2 yml application peer3 ymlapplicati peer1 ymlserver port 8761eureka instance hostname peer1client service

eureka

Eureka 是一个基于 REST 的服务,主要在 AWS 云中使用, 定位服务来进行中间层服务器的负载均衡和故障转移。

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

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

最简单的微服务架构图:eureka

  • Eureka Server(注册中心):提供服务注册和发现
  • Service Provider(服务提供方):将自身服务注册到Eureka中心,从而使服务消费方能够找到
  • Service Consumer(服务消费方):从Eureka注册中心获取注册服务列表,从而能够消费服务

构建SpringCloud 工程

这了我们为了给大家演示完整的SpringCloud,我们把我们当前的工程构建为SpringBoot聚合工程,我这里的聚合工程取名为scexample.

 <packaging>pom 
     packaging> 

完整案例如下:

 
    <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 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0 
     modelVersion> <groupId>com.pubutech 
      groupId> <artifactId>scexample 
       artifactId> <version>0.0.1-SNAPSHOT 
        version> <modules> <module>eureka-server 
         module> <module>service-producer 
          module> <module>service-consumer 
           module> <module>service-zuul 
            module> <module>service-cosumer-ribbon 
             module>  
              modules> <packaging>pom 
               packaging> <name>scexample 
                name> <description>Demo project for Spring Boot 
                 description> <parent> <groupId>org.springframework.boot 
                  groupId> <artifactId>spring-boot-starter-parent 
                   artifactId> <version>2.1.0.RELEASE 
                    version> <relativePath/>  
                     
                     parent> <properties> <project.build.sourceEncoding>UTF-8 
                      project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8 
                       project.reporting.outputEncoding> <java.version>1.8 
                        java.version> <spring-boot.version>2.1.0.RELEASE 
                         spring-boot.version> <spring-cloud.version>Greenwich.M1 
                          spring-cloud.version>  
                           properties> <dependencies> <dependency> <groupId>org.springframework.boot 
                            groupId> <artifactId>spring-boot-starter-amqp 
                             artifactId>  
                              dependency> <dependency> <groupId>org.springframework.boot 
                               groupId> <artifactId>spring-boot-starter-aop 
                                artifactId>  
                                 dependency> <dependency> <groupId>org.springframework.boot 
                                  groupId> <artifactId>spring-boot-starter-data-redis 
                                   artifactId>  
                                    dependency> <dependency> <groupId>org.springframework.boot 
                                     groupId> <artifactId>spring-boot-starter-web 
                                      artifactId>  
                                       dependency> <dependency> <groupId>org.mybatis.spring.boot 
                                        groupId> <artifactId>mybatis-spring-boot-starter 
                                         artifactId> <version>1.3.2 
                                          version>  
                                           dependency> <dependency> <groupId>org.springframework.cloud 
                                            groupId> <artifactId>spring-cloud-bus 
                                             artifactId>  
                                              dependency> <dependency> <groupId>org.springframework.cloud 
                                               groupId> <artifactId>spring-cloud-starter 
                                                artifactId>  
                                                 dependency> <dependency> <groupId>org.springframework.cloud 
                                                  groupId> <artifactId>spring-cloud-starter-config 
                                                   artifactId>  
                                                    dependency> <dependency> <groupId>org.springframework.cloud 
                                                     groupId> <artifactId>spring-cloud-starter-netflix-eureka-client 
                                                      artifactId>  
                                                       dependency> <dependency> <groupId>org.springframework.cloud 
                                                        groupId> <artifactId>spring-cloud-stream 
                                                         artifactId>  
                                                          dependency> <dependency> <groupId>org.springframework.cloud 
                                                           groupId> <artifactId>spring-cloud-stream-binder-rabbit 
                                                            artifactId>  
                                                             dependency> <dependency> <groupId>org.springframework.boot 
                                                              groupId> <artifactId>spring-boot-devtools 
                                                               artifactId> <scope>runtime 
                                                                scope>  
                                                                 dependency> <dependency> <groupId>mysql 
                                                                  groupId> <artifactId>mysql-connector-java 
                                                                   artifactId> <scope>runtime 
                                                                    scope>  
                                                                     dependency> <dependency> <groupId>org.projectlombok 
                                                                      groupId> <artifactId>lombok 
                                                                       artifactId> <optional>true 
                                                                        optional>  
                                                                         dependency> <dependency> <groupId>org.springframework.boot 
                                                                          groupId> <artifactId>spring-boot-starter-test 
                                                                           artifactId> <scope>test 
                                                                            scope>  
                                                                             dependency> <dependency> <groupId>org.springframework.cloud 
                                                                              groupId> <artifactId>spring-cloud-stream-test-support 
                                                                               artifactId> <scope>test 
                                                                                scope>  
                                                                                 dependency>  
                                                                                  dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud 
                                                                                   groupId> <artifactId>spring-cloud-dependencies 
                                                                                    artifactId> <version>${spring-cloud.version} 
                                                                                     version> <type>pom 
                                                                                      type> <scope>import 
                                                                                       scope>  
                                                                                        dependency>  
                                                                                         dependencies>  
                                                                                          dependencyManagement> <profiles> <profile> <id>dev 
                                                                                           id> <properties> <profiles.active>dev 
                                                                                            profiles.active> <env>dev 
                                                                                             env>  
                                                                                              properties> <activation> <activeByDefault>true 
                                                                                               activeByDefault>  
                                                                                                activation>  
                                                                                                 profile> <profile> <id>test 
                                                                                                  id> <properties> <profiles.active>test 
                                                                                                   profiles.active> <env>test 
                                                                                                    env>  
                                                                                                     properties>  
                                                                                                      profile> <profile> <id>prod 
                                                                                                       id> <properties> <profiles.active>prod 
                                                                                                        profiles.active> <env>prod 
                                                                                                         env>  
                                                                                                          properties>  
                                                                                                           profile>  
                                                                                                            profiles> <build> <plugins> <plugin> <groupId>org.springframework.boot 
                                                                                                             groupId> <artifactId>spring-boot-maven-plugin 
                                                                                                              artifactId>  
                                                                                                               plugin>  
                                                                                                                plugins>  
                                                                                                                 build> <repositories> <repository> <id>spring-milestones 
                                                                                                                  id> <name>Spring Milestones 
                                                                                                                   name> <url>https://repo.spring.io/milestone 
                                                                                                                    url> <snapshots> <enabled>false 
                                                                                                                     enabled>  
                                                                                                                      snapshots>  
                                                                                                                       repository>  
                                                                                                                        repositories>  
                                                                                                                         project> 

以上依赖项请按需修改,我这里为了演示更多的内容,一开始就导入很多依赖,完全不必要。(子模块目前还没有创建,我已经创建了所以会有,可以对应删掉)。

eureka 注册中心

eureka-server moudle

pom.xml

然后修改eureka-server的pom.xml如下:

 
    <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 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>scexample 
     artifactId> <groupId>com.pubutech 
      groupId> <version>0.0.1-SNAPSHOT 
       version>  
        parent> <modelVersion>4.0.0 
         modelVersion> <artifactId>eureka-server 
          artifactId> <packaging>jar 
           packaging> <dependencies> <dependency> <groupId>org.springframework.cloud 
            groupId> <artifactId>spring-cloud-starter-netflix-eureka-server 
             artifactId>  
              dependency>  
              <dependency> <groupId>org.springframework.boot 
               groupId> <artifactId>spring-boot-devtools 
                artifactId> <version>${spring-boot.version} 
                 version> <optional>true 
                  optional>  
                   dependency>  
                   <dependency> <groupId>javax.xml.bind 
                    groupId> <artifactId>jaxb-api 
                     artifactId> <version>2.3.0 
                      version>  
                       dependency> <dependency> <groupId>com.sun.xml.bind 
                        groupId> <artifactId>jaxb-impl 
                         artifactId> <version>2.3.0 
                          version>  
                           dependency> <dependency> <groupId>com.sun.xml.bind 
                            groupId> <artifactId>jaxb-core 
                             artifactId> <version>2.3.0 
                              version>  
                               dependency> <dependency> <groupId>javax.activation 
                                groupId> <artifactId>activation 
                                 artifactId> <version>1.1.1 
                                  version>  
                                   dependency>  
                                    
                                    dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud 
                                     groupId> <artifactId>spring-cloud-dependencies 
                                      artifactId> <version>${spring-cloud.version} 
                                       version> <type>pom 
                                        type> <scope>import 
                                         scope>  
                                          dependency>  
                                           dependencies>  
                                            dependencyManagement>  
                                            <profiles> <profile> <id>peer1 
                                             id> <properties> <profiles.active>peer1 
                                              profiles.active> <env>peer1 
                                               env>  
                                                properties> <activation> <activeByDefault>true 
                                                 activeByDefault>  
                                                  activation>  
                                                   profile> <profile> <id>peer2 
                                                    id> <properties> <profiles.active>peer2 
                                                     profiles.active> <env>peer2 
                                                      env>  
                                                       properties>  
                                                        profile> <profile> <id>peer3 
                                                         id> <properties> <profiles.active>peer3 
                                                          profiles.active> <env>peer3 
                                                           env>  
                                                            properties>  
                                                             profile>  
                                                              profiles>  
                                                              <build> <plugins> <plugin> <groupId>org.springframework.boot 
                                                               groupId> <artifactId>spring-boot-maven-plugin 
                                                                artifactId>  
                                                                 plugin>  
                                                                  plugins>  
                                                                   build>  
                                                                    project> 

application.yml

server: port: 8761 eureka: instance: hostname: localhost client: #表示是否将自己注册到Eureka Server,默认为true。 register-with-eureka: false #表示是否从Eureka Server获取注册信息,默认为true。 fetch-registry: false service-url: #设置与Eureka Server交互的地址,查询服务和注册服务都需要依赖这个地址。默认是http://localhost:8761/eureka ;多个地址可使用 , 分隔。 defaultZone: http://${ 
   eureka.instance.hostname}:${ 
   server.port}/eureka/ spring: application: name: eureka-server 

EurekaServerApplication.java

新建自定SpringApplication的Application文件

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

eureka集群使用

在一个分布式系统中,服务注册中心是最重要的基础部分,理应随时处于可以提供服务的状态。如果是单点部署,如果注册中心出现故障,将会出现毁灭性的灾难。为了维持其可用性,使用集群是很好的解决方案。Eureka通过互相注册的方式来实现高可用的部署,所以我们只需要将Eureke Server配置其他可用的serviceUrl就能实现高可用部署。

新建集群配置profiles:application-peer1.yml/application-peer2.yml/application-peer3.yml

集群配置文件

application-peer1.yml

server: port: 8761 eureka: instance: hostname: peer1 client: service-url: #设置与Eureka Server交互的地址,查询服务和注册服务都需要依赖这个地址。默认是http://localhost:8761/eureka ;多个地址可使用 , 分隔。 defaultZone: http://peer2:8762/eureka/,http://peer3:8763/eureka/ spring: application: name: eureka-server-peer1 

application-peer2.yml

server: port: 8762 eureka: instance: hostname: peer2 client: service-url: #设置与Eureka Server交互的地址,查询服务和注册服务都需要依赖这个地址。默认是http://localhost:8761/eureka ;多个地址可使用 , 分隔。 defaultZone: http://peer1:8761/eureka/,http://peer3:8763/eureka/ spring: application: name: eureka-server-peer2 

application-peer3.yml

server: port: 8763 eureka: instance: hostname: peer3 client: service-url: #设置与Eureka Server交互的地址,查询服务和注册服务都需要依赖这个地址。默认是http://localhost:8761/eureka ;多个地址可使用 , 分隔。 defaultZone: http://peer1:8761/eureka/,http://peer2:8762/eureka/ spring: application: name: eureka-server-peer3 

profiles

上面添加的pom.xml

  
    <profiles> <profile> <id>peer1 
     id> <properties> <profiles.active>peer1 
      profiles.active> <env>peer1 
       env>  
        properties> <activation> <activeByDefault>true 
         activeByDefault>  
          activation>  
           profile> <profile> <id>peer2 
            id> <properties> <profiles.active>peer2 
             profiles.active> <env>peer2 
              env>  
               properties>  
                profile> <profile> <id>peer3 
                 id> <properties> <profiles.active>peer3 
                  profiles.active> <env>peer3 
                   env>  
                    properties>  
                     profile>  
                      profiles>  
                      

/hosts

本次测试,配置/etc/hosts

127.0.0.1 localhost,peer1,peer2,peer3 

编译运行

#打包 mvn clean package mvn install 

运行

java -jar eureka-server-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer1 java -jar eureka-server-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer2 java -jar eureka-server-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer3 

GitHub源代码

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

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/215086.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午2:44
下一篇 2026年3月18日 下午2:44


相关推荐

  • python模块之psutil详解

    python模块之psutil详解python模块之psutil详解一、psutil模块:1.psutil是一个跨平台库(http://pythonhosted.org/psutil/)能够轻松实现获取系统运行的进程和系统利用率(包括CPU、内存、磁盘、网络等)信息。它主要用来做系统监控,性能分析,进程管理。它实现了同等命令行工具提供的功能,如ps、top、lsof、netstat、ifconfig、who、df、kill…

    2022年6月12日
    36
  • centos7 本地yum源配置_centos官方yum源

    centos7 本地yum源配置_centos官方yum源准备上面三个文件。[root@localhost~]#yuminstall-ylibxml2-python-2.9.1-5.el7_0.1.x86_64.rpm[root@localhost~]#yuminstall-ycreaterepo-0.4.11-3.el5.noarch.rpm使用createrepo–version命令查看是否安装成功,出现…

    2022年8月13日
    7
  • navicat15 mac激活码【最新永久激活】

    (navicat15 mac激活码)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月30日
    216
  • Python 查看数据类型与格式

    Python 查看数据类型与格式一般我们拿到一个数据 会先看一下这个数据有多少行多少列 各个字段是什么 数据格式类型是什么 在开始讲数据格式前 需要先梳理一下各个数据类型 我们常使用的库一般是 numpy 和 pandas Numpy 下的核心是数组 array ndarray Pandas 下的核心是数据框 Series DataFrame 先随机创一点数据用来测试 importpandas

    2026年3月16日
    2
  • Nginx实现动静分离「建议收藏」

    Nginx实现动静分离「建议收藏」前言之前项目中需要用到百度地图,由于项目的特殊环境,所以需要下载百度的离线地图。我们知道,地图的展示其实就是一张张地图的图片展示,我们在网页上浏览查找位置的时候,其实都是在发送图片请求。这些图片请求相对于jsp,servlet来说就是所谓的静态资源,当然服务中的静态资源不仅仅只是图片,像页面样式css文件,js脚本文件这些都可以看着是静态资源。tomcat既可以静态资源也可以处理动态资源。但是…

    2022年4月28日
    53
  • 指纹算法 c语言,指纹识别算法研究

    指纹算法 c语言,指纹识别算法研究内容介绍原文档由会员神七问天发布指纹识别算法研究 58 页 3 8 万字摘要本文在深入研究学习了离散小波变换 自适应标量量化 游程编码和霍夫曼编码的基础上 结合指纹纹理的特征 依据 WSQ 标准中的规定用 C 语言在 C Builder 环境下实现指纹图像压缩算法的实现并提出该算法的不足之处 该算法首先利用 9 7 滤波器进行对称的离散小波变换 为了在压缩中更精确地保持指纹细节点信息 对指纹图像进行了小波包变换

    2026年3月18日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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