第二章 Spring Cloud 服务的注册与发现(Eureka Server)

上一篇文章我们讲解了Spring Cloud以及相关的一些概念,你也许会有些不解,没有关系,从本章开始,会逐一讲解。
Eurek包括两部分:Eurek Server和Eureka Client

Eureka Server提供服务注册服务,各个节点启动后,会在Eureka Server中进行注册,这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到。

Eureka Client是一个java客户端,用于简化与Eureka Server的交互,客户端同时也就是一个内置的、使用轮询(round-robin)负载算法的负载均衡器。

1、创建服务注册中心(Eurek Server)

第一步:创建一个父工程

创建一个父工程(maven项目)
在这里插入图片描述
在这里插入图片描述

第二步:引入相关依赖

加入相关依赖,spring Boot版本为2.0.3.RELEASE,Spring Cloud版本为Finchley.RELEASE。这个pom文件作为父pom文件,起到依赖版本控制的作用,其他module工程继承该pom。这一系列文章全部采用这种模式,其他文章的pom跟这个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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.1.RELEASE</version>
        <relativePath/>
    </parent>

    <modelVersion>4.0.0</modelVersion>
    <groupId>com.brimen</groupId>
    <artifactId>spring-cloud-brimen-eureka</artifactId>
    <version>1.0-SNAPSHOT</version>
    <name>spring-cloud-brimen-eureka</name>
    <description>Spring Cloud 服务的注册与发现</description>
    <packaging>pom</packaging>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
    </properties>
    
    <modules>
        <module>spring-cloud-eureka</module>
        <module>spring-cloud-provide</module>
    </modules>
   
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</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>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

第三步:创建module工程

在该父工程下创建两个module工程,一个是Eurek Server(spring-cloud-eureka)工程,另一个是
Eurek Client(Eurek Client)工程,我们先来讲解如何创建Eurek Server。
创建一个普通的Spring Boot工程
在这里插入图片描述
在这里插入图片描述

第四步:引入依赖

其pom.xml继承了父pom文件,并引入spring-cloud-starter-netflix-eureka-server的依赖,代码如下:

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.brimen</groupId>
        <artifactId>spring-cloud-brimen-eureka</artifactId>
        <version>1.0-SNAPSHOT</version>
        <relativePath/>
    </parent>
    <groupId>com.brimen</groupId>
    <artifactId>spring-cloud-eureka</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>spring-cloud-eureka</name>
    <description>Spring Cloud Eureka 注册中心</description>

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
    </dependencies>
</project>

第五步:再配置文件当中进行配置

配置Eurek Server的注册中心,Eurek Server是一个高可用的组件,它没有缓存,每一个实例注册之后需要向注册中心发送心跳,在默认条件下,Eurek Server也是一个Eurek Client,它可以通过“registerWithEureka: false”来配置是否注册自己,配置如下:

server:
  port: 8080

eureka:
  instance:
    #服务注册中心实例的主机名
    hostname: localhost
  client:
    #是否向服务注册中心注册自己
    registerWithEureka: false
    #是否检索服务
    fetchRegistry: false
    serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

spring:
  application:
    name: server-eureka

第六步:在入口类需要添加一个注解@EnableEurekaServer

代码如下:

package com.brimen.servereureka;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

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

第七步:启动工程并访问

启动工程访问:http://localhost:8080 ,可以看到如下界面
在这里插入图片描述

2、创建一个服务提供者(spring-cloud-provide)

当client向server注册时候,会提供一些基本数据,比如说主机、端口、url和主页等信息。server将接收到每个client的心跳消息,如果心跳超时,通常会从server当中删除。

第一步:创建一个Spring Boot 的Module工程

创建一个普通的Spring Boot的Module工程,并命名为:spring-cloud-provid

第二步:引入相关依赖

主要是引入关于“spring-cloud-starter-netflix-eureka-client”的依赖,代码如下:

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.brimen</groupId>
        <artifactId>spring-cloud-brimen-eureka</artifactId>
        <version>1.0-SNAPSHOT</version>
        <relativePath/>
    </parent>
    <groupId>com.brimen</groupId>
    <artifactId>spring-cloud-provide</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>spring-cloud-provide</name>
    <description>Spring Cloud Eurek 客户端,作为向Eurek Server注册的测试</description>

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

第三步:在配置文件当中配置

主要是指明注册服务的地址,代码如下:

server:
  port: 8081

spring:
  application:
    name: spring-cloud-provide

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8080/eureka/

备注:需要指明 spring.application.name,这个很重要,这在以后的服务与服务之间相互调用一般都是根据这个name

第四步:在入口类添加@EnableEurekaClient注解

代码如下:

package com.brimen.springcloudprovide;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

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

第五步:创建一个对外提供的接口,用于测试

代码如下:

package com.brimen.springcloudprovide.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/hello")
public class HelloController {

    @Value("${server.port}")
    String port;

    @GetMapping("/gethello")
    public String getHello(@RequestParam(value = "name",defaultValue = "brimen") String name){
        return "Hi "+name+" I am from port:"+port;
    }
}

3、启动并访问

依次启动spring-cloud-eureka和spring-cloud-client两个工程,并访问 http://localhost:8080,你会发现spring-cloud-client已经注册在了服务当中。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_24630433/article/details/87926922