• 欢迎访问 winrains 的个人网站!
  • 本网站主要从互联网整理和收集了与Java、网络安全、Linux等技术相关的文章,供学习和研究使用。如有侵权,请留言告知,谢谢!

SpringCloud:Eureka 服务注册

Spring Cloud winrains 来源:GuoLei Song 9个月前 (03-21) 56次浏览

简介

Spring Cloud Netflix Eureka 是 Spring Cloud 提供的用于服务注册和发现的基础组件,在 Spring Cloud 微服务体系中承担着相当重要的角色。Eureka 作为一个开箱即用的基础组件,其屏蔽了底层 Client 和 Server 交互的细节,使得开发者能够快速入手,将更多的精力投入到业务逻辑上去。

Eureka 是基于 Rest 实现的,及底层客户端和服务端之间的交互是通过 Rest 服务进行交互的。Eureka 包括两个部分,即服务端可客户端。

  • 服务端:Eureka Server ,提供服务注册和发现的功能
  • 客户端:Eureka Client ,将自己的信息注册到 Eureka Server ,并从 Eureka Server 中发现其他服务。

Eureka 本篇将先来搭建一个服务端,以作为后续篇幅的注册中心来使用。

环境准备

类别
JDK 1.8.0_162
SOFABoot/SpringBoot 3.0.0/2.0.x.RELEASE
SpringCloud Finchley.RC1
IDE IDEA

工程背景

本案例使用 SOFABoot 3.0.x 版本集成 SringCloud F版。工程如下:

  • sofa-eureka-server 服务注册中心
  • sofa-eureka-provider 服务提供方
  • sofa-eureka-comsumer 服务消费方

本工程都是在同一个父工程下面的,因此工程构建开始会新建一个 SOFABoot 工程作为父工程。

新建父工程

这里父工程直接新建一个SpringBoot 工程。可以使用 IDEA 的生成,也可以通过 SOFABoot 快速开始 新建一个 SpringBoot 工程,删除 src 目录,然后修改 pom.xml 文件。

  • gourpId : com.alipay.sofa
  • artifactId : sofa-eureka-parent

parent 依赖修改

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.1.RELEASE</version>
    <relativePath/> 
</parent>

替换为:

<parent>
    <groupId>com.alipay.sofa</groupId>
    <artifactId>sofaboot-dependencies</artifactId>
    <version>3.0.0</version>
</parent>

管控 SpringCloud 依赖

在主 pom 里面加入 SpringCloud 的依赖管控。版本为 Finchley.RC1

<properties>
  <spring-cloud.version>Finchley.RC1</spring-cloud.version>
</properties>

<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>

配置 SpringCloud 仓库

在主pom.xml 中添加如下配置

<repositories>
  <repository>
    <id>spring-milestones</id>
    <name>Spring Milestones</name>
    <url>https://repo.spring.io/milestone</url>
  </repository>
</repositories>

OK,到这里,父工程创建完毕。

新建 sofa-eureka-server-center

sofa-eureka-server-center 作为注册中心的服务端。

右击 sofa-eureka-parent 父工程 -> New -> Module,这里选择 Maven 工程;

  • artifactId:sofa-eureka-server-center。

pom 文件修改

引入 spring-cloud-starter-netflix-eureka-server 依赖,如下:

 <parent>
   <artifactId>sofa-eureka-parent</artifactId>
   <groupId>com.alipay.sofa</groupId>
   <version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

<artifactId>sofa-eureka-server-center</artifactId>

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

新建资源文件 application.yml

在 /src/main/resources 目录下新建 application.yml 或者 application.properties。这里以.yml文件为例:

server:
  port: 8761    #指定服务端口
eureka:
  instance:
    hostname: localhost
  client:
    register-with-eureka: false
    fetch-registry: false
    service-url:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
spring:
  application:
    name: sofa-eureka-server

配置文件后面统一说明

启动类

在 /src/main/resources 目录下新建 com.alipay.sofa.cloud 包目录,并且在当前包路劲下新建 SofaEurekaServerApplication 类,并且类上加上 @EnableEurekaServer 注解。

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

启动程序 & 验证

启动当前应用。并且浏览器中输入:http://localhost:8761/

image.png

服务正常运行,界面如上图所示;此时还没有服务注册进来,因此红色框内显示 :No instances available

新建 sofa-eureka-provider

sofa-eureka-provider 作为服务提供方,将会向注册中心 sofa-eureka-server-center 上注册服务。

右击 sofa-eureka-parent 父工程 -> New -> Module,这里选择 Maven 工程;

  • artifactId:sofa-eureka-provider。

pom 文件修改

引入 spring-cloud-starter-netflix-eureka-client 和 spring-boot-starter-web 依赖,如下:

<parent>
  <artifactId>sofa-eureka-parent</artifactId>
  <groupId>com.alipay.sofa</groupId>
  <version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
  
<artifactId>sofa-eureka-provider</artifactId>
  
<dependencies>
  <dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
  </dependency>

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

新建资源文件

在 /src/main/resources 目录下新建 application.yml 或者 application.properties。这里以.yml文件为例:

server:
  port: 8082
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/  #指定注册中心地址
spring:
  application:
    name: HelloSOFAService   #服务名称

启动类

在 /src/main/resources 目录下新建 com.alipay.sofa.cloud 包目录,并且在当前包路劲下新建 SofaEurekaProviderApplication 类,并且类上加上 @EnableEurekaClient 注解。

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

服务提供类

这里在 com.alipay.sofa.cloud.controller 包下新建 SofaController 类。

@RestController
public class SofaController {
    @Value("${server.port}")
    private String port;
    @Value("${spring.application.name}")
    private String hostname;
  
    @RequestMapping("/hello")
    public String hello() {
        return "Hello SOFA! Now Port is "+port +" And hostname is " +hostname;
    }
}

这里在接口中返回 hostname 和 port ,方便后面验证负载均衡测试使用。

启动程序 & 验证

在启动 sofa-eureka-provider 之前,需要先启动 sofa-wureka-server-center 。两个都启动成功之后,浏览器输入:http://localhost:8761/

image1.png

此时我将 sofa-eureka-provider 中的配置文件的端口修改为 8081,再注册一个。

image2.png

可以看到 服务为 HELLOSOFASERVICE 的有两个服务提供方。

作者:GuoLei Song

来源:http://www.glmapper.com/2018/12/31/springcoud-eureka-register/


版权声明:文末如注明作者和来源,则表示本文系转载,版权为原作者所有 | 本文如有侵权,请及时联系,承诺在收到消息后第一时间删除 | 如转载本文,请注明原文链接。
喜欢 (2)