1.Spring Cloud-服务注册与发现(Eureka)

2019年07月29日 11:21 · 阅读(1677) ·

[目录]

参考

本文参考了 Ken 的博客。结合自己的实际操作过程写成。

Spring Cloud 入门教程1、服务注册与发现(Eureka)

开发环境

名称 版本
操作系统 Windows 10 X64
JDK JDK1.8(jdk-8u151-windows-x64)
IntelliJ IDEA IntelliJ IDEA 2018.3
Maven Maven 3.6.0
Spring Boot 1.5.6
Spring Cloud Finchley.BUILD-SNAPSHOT

源代码

见附件

什么是 Eureka

EurekaNetflix 开源的服务注册与发现框架,Eureka 由两个组件组成:Eureka 服务器Eureka 客户端

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

Eureka客户端 是一个 Java 客户端,用来简化与服务器的交互、作为轮询负载均衡器,并提供服务的故障切换支持。

搭建 Eureka Server

1.创建项目

打开 IntelliJ IDEA 2018.3

选择 创建新项目

文件-New-项目

选择 Maven,勾选 Create from archetype

选择项目模板 maven-archtype-quickstart

GroupId:my.luoma.springcloud.testeurekaserver

ArtifactId:testeurekaserver

设置 Maven 配置

名称 说明 配置
Maven Home Directory Maven 安装包路径 D:\Program Files\apache-maven-3.6.0
User settings file 用户配置文件 D:\Program Files\apache-maven-3.6.0\conf\settings.xml
Local repository 本地仓库 D:\Program Files\Maven\Repository

项目名称 testeurekaserver

2.创建源目录

src/main 下创建文件夹 resources

右键 java 文件夹,标记目录为-源码 根

右键 resources 文件夹,标记目录为-Resources 根

resources 文件夹下创建 application.yml 文件并配置Eureka Server

application.yml 内容如下

  1. server:
  2. port: 8800
  3. spring:
  4. application:
  5. name: EurekaServer
  6. eureka:
  7. client:
  8. registerWithEureka: false
  9. fetchRegistry: false
  10. serviceUrl:
  11. defaultZone: http://localhost:${server.port}/eureka/

3.pom.xml 文件配置

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <modelVersion>4.0.0</modelVersion>
  6. <groupId>my.luoma.springcloud.testeurekaserver</groupId>
  7. <artifactId>testeurekaserver</artifactId>
  8. <version>1.0-SNAPSHOT</version>
  9. <name>testeurekaserver</name>
  10. <properties>
  11. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  12. <maven.compiler.source>1.8</maven.compiler.source>
  13. <maven.compiler.target>1.8</maven.compiler.target>
  14. </properties>
  15. <parent>
  16. <groupId>org.springframework.boot</groupId>
  17. <artifactId>spring-boot-starter-parent</artifactId>
  18. <version>2.0.0.RELEASE</version>
  19. </parent>
  20. <dependencyManagement>
  21. <dependencies>
  22. <dependency>
  23. <groupId>org.springframework.cloud</groupId>
  24. <artifactId>spring-cloud-dependencies</artifactId>
  25. <version>Finchley.BUILD-SNAPSHOT</version>
  26. <type>pom</type>
  27. <scope>import</scope>
  28. </dependency>
  29. </dependencies>
  30. </dependencyManagement>
  31. <dependencies>
  32. <dependency>
  33. <groupId>org.springframework.cloud</groupId>
  34. <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
  35. </dependency>
  36. <dependency>
  37. <groupId>junit</groupId>
  38. <artifactId>junit</artifactId>
  39. <version>4.11</version>
  40. <scope>test</scope>
  41. </dependency>
  42. </dependencies>
  43. <repositories>
  44. <repository>
  45. <id>spring-snapshots</id>
  46. <name>Spring Snapshots</name>
  47. <url>https://repo.spring.io/libs-snapshot</url>
  48. <snapshots>
  49. <enabled>true</enabled>
  50. </snapshots>
  51. </repository>
  52. </repositories>
  53. <build>
  54. <finalName>testeurekaserver</finalName>
  55. </build>
  56. </project>

4.配置 EurekaServer 启动类

修改\src\main\java\my\luoma\springcloud\testeurekaserver\App.java
基于 Spring Boot 创建启动类,添加上 @EnableEurekaServer 注解

  1. package my.luoma.springcloud.testeurekaserver;
  2. import org.springframework.boot.SpringApplication;
  3. import org.springframework.boot.autoconfigure.SpringBootApplication;
  4. import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
  5. /**
  6. * Hello world!
  7. *
  8. */
  9. @EnableEurekaServer
  10. @SpringBootApplication
  11. public class App
  12. {
  13. public static void main( String[] args )
  14. {
  15. SpringApplication.run(App.class, args);
  16. }
  17. }

5.Eureka Server信息预览

启动Eureka Server项目后,访问:http://localhost:8800/ ,可以看到下面的页面,其中还没有发现任何服务。

6.无法解析符号

  1. 无法解析符号 EnableEurekaServer
  2. 无法解析符号 SpringBootApplication
  3. 信息:java: Errors occurred while compiling module 'eurekaserver'
  4. 信息:javac 1.8.0_151 was used to compile java sources
  5. 信息:2019/7/29 9:44 - 编译完成有 3 个错误 0 个警告 in 7 s 13 ms
  6. D:\v_hwhao\Code-Java-Test\eurekaserver\src\main\java\my\luoma\springcloud\eurekaserver\App.java
  7. 错误:(9, 2) java: 找不到符号
  8. 符号: EnableEurekaServer
  9. 错误:(10, 2) java: 找不到符号
  10. 符号: SpringBootApplication
  11. 错误:(15, 9) java: 找不到符号
  12. 符号: 变量 SpringApplication
  13. 位置: my.luoma.springcloud.eurekaserver.App

我之前创建了一个项目叫 eurekaserver,编译时报错,其他的代码和配置都是完全一样的,但就报这个错误,我想了半天,发现问题可能出现在 Maven 的配置这里

我一开始创建项目的时候,这里我并没有填写上面的内容,而是使用默认的,就是下图的内容

就是没有配置 Maven 的地址导致找不到对应的包,所以以后遇到这个错误可以参考下这个解决办法。

搭建服务并注册(Eureka Client)

1.创建 Eureka Client 项目

文件-New-项目

选择 Maven,勾选 Create from archetype

选择项目模板 maven-archtype-quickstart

GroupId:my.luoma.springcloud.helloservice

ArtifactId:helloservice

设置 Maven 配置

名称 说明 配置
Maven Home Directory Maven 安装包路径 D:\Program Files\apache-maven-3.6.0
User settings file 用户配置文件 D:\Program Files\apache-maven-3.6.0\conf\settings.xml
Local repository 本地仓库 D:\Program Files\Maven\Repository

项目名称 helloservice

2.配置 pom.xml 依赖

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <groupId>my.luoma.springcloud.helloservice</groupId>
  6. <artifactId>helloservice</artifactId>
  7. <version>1.0-SNAPSHOT</version>
  8. <name>helloservice</name>
  9. <url>http://luoma.pro</url>
  10. <properties>
  11. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  12. <maven.compiler.source>1.8</maven.compiler.source>
  13. <maven.compiler.target>1.8</maven.compiler.target>
  14. </properties>
  15. <parent>
  16. <groupId>org.springframework.boot</groupId>
  17. <artifactId>spring-boot-starter-parent</artifactId>
  18. <version>2.0.0.RELEASE</version>
  19. </parent>
  20. <dependencyManagement>
  21. <dependencies>
  22. <dependency>
  23. <groupId>org.springframework.cloud</groupId>
  24. <artifactId>spring-cloud-dependencies</artifactId>
  25. <version>Finchley.BUILD-SNAPSHOT</version>
  26. <type>pom</type>
  27. <scope>import</scope>
  28. </dependency>
  29. </dependencies>
  30. </dependencyManagement>
  31. <dependencies>
  32. <dependency>
  33. <groupId>org.springframework.cloud</groupId>
  34. <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
  35. </dependency>
  36. <dependency>
  37. <groupId>org.springframework.boot</groupId>
  38. <artifactId>spring-boot-starter-web</artifactId>
  39. </dependency>
  40. <dependency>
  41. <groupId>junit</groupId>
  42. <artifactId>junit</artifactId>
  43. <version>4.11</version>
  44. <scope>test</scope>
  45. </dependency>
  46. </dependencies>
  47. <repositories>
  48. <repository>
  49. <id>spring-snapshots</id>
  50. <name>Spring Snapshots</name>
  51. <url>https://repo.spring.io/libs-snapshot</url>
  52. <snapshots>
  53. <enabled>true</enabled>
  54. </snapshots>
  55. </repository>
  56. </repositories>
  57. <build>
  58. <finalName>helloservice</finalName>
  59. </build>
  60. </project>

3.配置Eureka Client启动类

修改\src\main\java\my\luoma\springcloud\helloservice\App.java
基于Spring Boot创建启动类,添加上 @EnableDiscoveryClient 注解

  1. package my.luoma.springcloud.helloservice;
  2. import org.springframework.boot.SpringApplication;
  3. import org.springframework.boot.autoconfigure.SpringBootApplication;
  4. import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
  5. @EnableDiscoveryClient
  6. @SpringBootApplication
  7. public class App {
  8. public static void main(String[] args) {
  9. SpringApplication.run(App.class, args);
  10. }
  11. }

4.创建测试服务

\src\main\java\my\luoma\springcloud\helloservice 创建package:controller
然后创建 HelloController.java

  1. package my.luoma.springcloud.helloservice.controller;
  2. import org.springframework.beans.factory.annotation.Autowired;
  3. import org.springframework.cloud.client.discovery.DiscoveryClient;
  4. import org.springframework.web.bind.annotation.RequestMapping;
  5. import org.springframework.web.bind.annotation.RestController;
  6. @RestController
  7. public class HelloController {
  8. @Autowired
  9. DiscoveryClient discoveryClient;
  10. @RequestMapping("/")
  11. public Object index() {
  12. return "老大哥 Java ";
  13. }
  14. @RequestMapping("/info")
  15. public Object info() {
  16. return discoveryClient.getServices();
  17. }
  18. }

5.配置Eureka Client

\src\main 下创建文件夹 resources 文件夹并设置为Resources Root

resources 文件夹下创建 application.yml 文件并配置 Eureka Client

  1. server:
  2. port: 8601
  3. spring:
  4. application:
  5. name: helloservice
  6. eureka:
  7. client:
  8. serviceUrl:
  9. defaultZone: http://localhost:8800/eureka/

6.服务注册&访问测试

HelloService项目成功启动后,

访问 http://localhost:8601

或者 http://localhost:8601/info

查看是否正常启动

查看服务是否注册

访问 http://localhost:8800 ,会发现服务已注册

Eureka 实例项目(包括 Eureka 负载均衡)

IntelliJ IDEA 2018.3 创建 Maven 多模块(Module)项目+负载均衡


相关附件 10.Spring Cloud-服务注册与发现(Eureka) | 大小:0.03M | 下载