springcloud入门系列(1)-eureka服务注册中心

前言

随着微服务架构的逐渐流行,现在很多互联网公司在两三年前架构都已经转到微服务架构了,互联网架构也经历了从传统ESB总线架构-》SOA-》微服务架构的演进过程,我待过的几家公司基本也都跟着潮流经历了这样的一个过程。除了互联网公司,之前待过的国有银行架构最近两年也都在转到微服务架构,有些传统银行架构师甚至比较“激进”的直接从ESB总线架构转到微服务,可见除了互联网公司传统行业也都在架构转型,微服务框架目前国内用的比较多的就是阿里的dubbo和今天要介绍的springcloud,springcloud在微服务方面的核心组件都来自于Netflix,在微服务架构中服务注册和发现是非常核心的一部分,今天主要讲解下如何搭建一个eureka的服务注册中心,并且实现HA高可用,最后还会把之前做的springboot的demo注册到eureka上,废话说了那么多,那么下面就开始上干货啦。

1. eureka服务注册中心(单机)

首先使用ide工具新建一个maven工程,在pom.xml中引入我们工程需要的库,主要是springboot相关和eureka相关的库,具体的依赖库如下:

<dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka-server</artifactId>
        </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>

引入工程后记得在pom.xml文件上点击右键,选择maven->reimport将涉及到的依赖库进行引入。
包引入后创建Application入口类,除了和之前springboot工程不一样的工程就是要在APplication入口类上加上eurekaserver的注解@EnableEurekaSrver,让系统知道该类为Eureka的Server端。

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

}

最后只要再增加Eureka的配置文件就可以了,这里我们依然使用yaml作为配置文件,具体语法可以google,还是很简单的,一句话就是用缩进来表示层级关系。

spring:
  application:
    name: eureka-service-register
server:
  port: 8761
eureka:
  instance:
    hostname: localhost

配置文件不解释也很好理解,上面的spring层级就相当于一般property文件的spring.application.name=eureka-service-register,表示该服务的名字;port看字面意思就知道是服务端口的意思;hostname表示对应的主机名,一般指向本机,这里配置为localhost。这样就完成了单机版的服务注册中心,是不是很简单,下面我们来启动下看看效果,启动工程后,在浏览器地址栏输入http://localhost:8761/

image
image

2.eureka HA多机高可用版

eureka做多机互备非常简单,这里只需要修改下application.yml就可以了,将配置改为多profile配置,这样在实际运行部署的时候,同一套jar包只需要在启动的时候选择不同的profile就可以了。配置文件代码如下,这里只列出了最基本的配置项,eureka还有很多丰富的配置项,可以实现各种服务注册和发现方面的功能。

spring:
  application:
    name: eureka-service-register
  profiles:
    active: node1
---
spring:
  profiles: node1
server:
  port: 8761

eureka:
  instance:
    hostname: node1
  client:
#    register-with-eureka: false
#    fetch-registry: false
    serviceUrl:
    #将register1注册到register2上,实现HA
      defaultZone: http://node2:8762/eureka/
---
spring:
  profiles: node2
server:
  port: 8762

eureka:
  instance:
    hostname: node2
  client:
#    register-with-eureka: false
#    fetch-registry: false
    serviceUrl:
      defaultZone: http://node1:8761/eureka/

将eureka工程导出成jar包,直接在命令行运行

java -jar eurekaserver.jar --spring.profiles.active=node1

在其他机器运行

java -jar eurekaserver.jar --spring.profiles.active=node2

ndoe1和node2是在配置文件中配置的profile的名称,这里自己实验的时候为了方便可以将hosts文件修改主机名,来实现在一台机器上模拟多节点,找到本机的hosts文件,然后找到127.0.0.1那行,在后面加上127.0.0.1 node1 node2

两个节点都启动后的效果如图,
image

可以看到instance里已经有了两个节点,eureka会实时查看两个节点的状态,如果一台宕机了,另一台会一直尝试,当问题节点恢复后会自动重连,并且将最新的服务注册信息同步到另一台节点,eureka更牛的地方在于这些服务信息除了在eureka的server端会保存,在服务使用方的client端同样会分布式保存全量的服务注册信息,当server端出现极端情况服务使用方连接不上所有的eureka server端节点的时候,服务使用方会使用本地保存的最新的服务提供列表找到服务提供方节点调用接口,只要服务提供方还能继续提供服务,就能保证整体服务的正常运转。

3. 服务提供方的服务注册

可以复用之前写的springboot restful api的例子,也可以直接在刚才的工程中新建一个module作为服务提供方,我在demo的代码中为了方便就直接新建了一个module作为服务提供方,其中主要有以下几点要修改下,其他的代码都和之前介绍的springboot的实例代码一样。
1)在启动类增加@EnableEurekaClient注解,表示要注册到eureka服务器上,既然增加了eurekaClient的注解,那么肯定要设置哪个作为eureka的server端,下面来看下作为服务提供方的application.yml配置。

spring:
  application:
    name: service-provider
server:
  port: 8084
eureka:
  instance:
    prefer-ip-address: true
  client:
    serviceUrl:
      defaultZone: http://node1:8761/eureka/,http://node2:8762/eureka/

这里主要要说明的就是最后一行定义的eureka服务端地址,可以发现这两个地址就是刚才我们设置的eureka server集群的两个地址,
image

如果又3台就在后面再增加,理论上来说只写一台地址也是可以的,会自动同步其他几台的地址,但为了保险期间还是都配置上比较好,防止配置的这台出问题没有同步其他几台节点的信息。

小结

本文介绍了eureka的server端和client端的配置,并且介绍了server端和client如何配置和使用服务注册集群来实现高可用,是不是很简单,赶紧自己动手来实现一个吧,本文讲到的所有代码都传到了git上,大家可以到git上下载代码。

Git代码地址:https://github.com/feiweiwei/eureka-server-start

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容