Java服务器端编程SpringBoot极简教程 · Spring Boot Spring Boot 核心技术

SpringCloud注册中心--Eureka

2019-04-29  本文已影响5人  若邪

博客同步至GitPress:https://gitpress.io/@yangshijie/spring_cloud_eureka

Eureka组件称为注册中心;

IDEA注册中心搭建

创建父工程

父工程中不需要不含src包,作用只是作为一个工程存放下面几个子工程,每个子工程都是独立的Springboot工程,里面分别有Eureka注册中心服务、分发服务、多个数据服务等;服务见可以互相调用;服务需要在Eureka注册中心去注册;

在IDEA中,File-->New-->Project,选择Maven,然后Next填入必要的信息(包名等),接下来填入项目名和选择地址即可;

创建Eureka注册中心

注册中心也是一个Springboot工程,提供注册服务,管理其中所注册的其他服务,其他子工程向注册中心注册信息,并周期性向注册中心发送心跳来保持注册链接,当心跳超过时间未发送时,注册中心将该实例删除;

在IDEA中,右击父工程名,New-->Module,选择Spring initializr,然后Next填入必要的信息,接下来选择Eureka Discovery,右侧选择Eureka Server,最后填入项目名和选择地址即可;

创建Eureka客户端

客户端服务也是一个独立的Springboot工程,向Eureka注册中心注册,所有注册的client之间可以互相访问,并周期性的向注册中心服务发送心跳来维持注册状态,否则会被注册中心删除注册信息;

在IDEA中,右击父工程名,New-->Module,选择Spring initializr,然后Next填入必要的信息,接下来选择Eureka Discovery,右侧选择Eureka Discovery,填入项目名和选择地址即可;

Eureka组成

服务端

Eureka的服务端就相当于是一个只管理注册服务的东西,每个微服务在这里注册自己的信息,并持续性的(默认30s一次)向这里发送心跳,来维持状态,当超过指定的(默认是90s)时间未收到客户端服务的心跳时,服务端就会删除掉该注册的信息;

在服务端注册的微服务之间可以相互调用,并且注册之后可以通过统一的动态路由转发到达每个客户端服务,例如实现分功能的服务(例如一个服务做订单的管理,另一个做商品库存的管理等);

服务端其实也可以看做是一个客户端服务,不过由于其只做注册,不实现具体功能,在配置的时候需要在配置文件中配置不注册自己的信息,只作为服务端使用;

application.yml配置

在配置文件中可以配置服务端的主机名、端口,是否注册自己等信息;

server:
    port: 8761
eureka:
    #指定主机名称
    instance:
        hostname: localhost
    #server 一定程度上也是client,互为client
    client:
        #由于自己就是服务器,不需要注册到自己
        register-with-eureka: false
        #由于自己就是服务器,不需要从服务器获取注册信息
        fetch-registry: false
        #服务地址
        service-url:
            defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

启动类

作为服务端,需要在其启动类上面通过注解配置其为注册的服务端,使用@EnableEurekaServer注解标签;

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

客户端

客户端都是相对独立的Springboot服务工程,作为实现具体业务的服务工程,将自己注册到Eureka服务端,即注册中心,并周期性的向注册中心发送心跳维持自己的状态,客户端工程可以互相调用已经注册的其他客户端服务工程的功能;

例如,商城类服务,一个客户端工程负责订单的处理,另一个负责商品库存的处理,当生成订单时,订单服务端需要去调用库存服务查询库存来确定是否生成订单等;

application.yml配置

在客户端yml配置文件中,配置该服务的serviceId,即spring.application.name,这个会在利用Zuul组件动态转发路由时使用到,并且可以指定其端口等,也可以配置一些元数据metadata(map格式),这个可以用来手动做负载均衡,指定访问的服务节点;

spring:
    application:
    name: data-server-a
server:
    port: 8762
eureka:
    client:
        service-url:
            defaultZone: http://localhost:8761/eureka/

启动类

客户端服务在其启动类上通过@EnableEurekaClient注解来标明这是个客户端;

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

父工程管理

到此,Spring Cloud的基础工程初步搭建起来,目前只使用到了Eureka这个组件,管理了服务端和客户端;

在使用IDE(IDEA)创建时,IDE会自动将pom文件中的相关依赖生成;

在父工程的pom文件中,将所有的springboot子工程(Module),包括服务端和客户端,通过<module>标签注册到父工程中统一管理起来,并且在各个子工程中,将<parent>标签该为父工程的信息;

父工程pom文件

<modules>
    <module>eureka-server</module>
        <module>dispatch-server</module>
        <module>data-server-a</module>
        <module>data-server-b</module>
    ... ...
</modules>
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.4.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

子工程pom文件

<parent>
    <groupId>com.ysj</groupId>
    <artifactId>spring_cloud_demo</artifactId>
    <version>1.0-SNAPSHOT</version>
</parent>
<artifactId>data-server-a</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>data-server-a</name>
<description>Demo project for Spring Boot</description>
<properties>
    <java.version>1.8</java.version>
    <spring-cloud.version>Greenwich.SR1</spring-cloud.version>
</properties>

工程结构

工程的结构即为如下:

spring_cloud_demo   ## 父工程
    |---- eureka-server  ## 注册中心,服务端
    |---- dispatch-server  ## 客户端,分发服务(文中未提到,做路由转发用的服务)
    |---- data-server-a  ## 客户端,具体数据服务A
    |---- data-server-b  ## 客户端,具体数据服务B

运行服务

此时将这几个服务分别跑起来,打开http://localhost:8761/即可看到该工程的先关信息,每个自工程也可以通过各自的端口去访问;

上一篇 下一篇

猜你喜欢

热点阅读