最简单的Spring Cloud教程第一篇:服务的注册与发现(Eureka)

发布时间 - 2026-01-11 02:54:21    点击率:

前言

本文主要给大家介绍关于Spring Cloud服务注册与发现(Eureka)的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍:

一、spring cloud简介

spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等等。它运行环境简单,可以在开发人员的电脑上跑。另外说明spring cloud是基于springboot的,所以需要开发中对springboot有一定的了解,如果不了解的话可以看这篇文章。另外对于“微服务架构” 不了解的话,可以通过搜索引擎搜索“微服务架构”了解下。

二、创建服务注册中心

在这里,我们需要用的的组件上Spring Cloud Netflix的Eureka ,eureka是一个服务注册和发现模块。

2.1 首先创建一个maven主工程。

2.2 然后创建2个model工程:一个model工程作为服务注册中心,即Eureka Server,另一个作为Eureka Client。

下面以创建server为例子,详细说明创建过程:

右键工程->创建model-> 选择spring initialir 如下图:

下一步->选择cloud discovery->eureka server ,然后一直下一步就行了。

创建完后的工程的pom.xml文件如下:

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

 <groupId>com.forezp</groupId>
 <artifactId>eurekaserver</artifactId>
 <version>0.0.1-SNAPSHOT</version>
 <packaging>jar</packaging>

 <name>eurekaserver</name>
 <description>Demo project for Spring Boot</description>

 <parent>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-parent</artifactId>
 <version>1.5.2.RELEASE</version>
 <relativePath/> <!-- lookup parent from repository -->
 </parent>

 <properties>
 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
 <java.version>1.8</java.version>
 </properties>

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

 <!-- spring boot test-->
 <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>Dalston.RC1</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>

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


</project>

2.3 启动一个服务注册中心,只需要一个注解@EnableEurekaServer,这个注解需要在springboot工程的启动application类上加:

@EnableEurekaServer
@SpringBootApplication
public class EurekaserverApplication {

 public static void main(String[] args) {
 SpringApplication.run(EurekaserverApplication.class, args);
 }
}

**2.4 **eureka是一个高可用的组件,它没有后端缓存,每一个实例注册之后需要向注册中心发送心跳(因此可以在内存中完成),在默认情况下erureka server也是一个eureka client ,必须要指定一个 server。eureka server的配置文件appication.yml:

server:
 port: 8761

eureka:
 instance:
 hostname: localhost
 client:
 registerWithEureka: false
 fetchRegistry: false
 serviceUrl:
 defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

通过eureka.client.registerWithEureka:falsefetchRegistry:false来表明自己是一个eureka server.

2.5 eureka server 是有界面的,启动工程,打开浏览器访问:

http://localhost:8761 ,界面如下:

No application available 没有服务被发现 ……^_^

因为没有注册服务当然不可能有服务被发现了。

三、创建一个服务提供者 (eureka client)

当client向server注册时,它会提供一些元数据,例如主机和端口,URL,主页等。Eureka server 从每个client实例接收心跳消息。 如果心跳超时,则通常将该实例从注册server中删除。

创建过程同server类似,创建完pom.xml如下:

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

 <groupId>com.forezp</groupId>
 <artifactId>service-hi</artifactId>
 <version>0.0.1-SNAPSHOT</version>
 <packaging>jar</packaging>

 <name>service-hi</name>
 <description>Demo project for Spring Boot</description>

 <parent>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-parent</artifactId>
 <version>1.5.2.RELEASE</version>
 <relativePath/> <!-- lookup parent from repository -->
 </parent>

 <properties>
 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
 <java.version>1.8</java.version>
 </properties>

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

 <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>Dalston.RC1</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>

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


</project>

通过注解@EnableEurekaClient 表明自己是一个eurekaclient.

@SpringBootApplication
@EnableEurekaClient
@RestController
public class ServiceHiApplication {

 public static void main(String[] args) {
 SpringApplication.run(ServiceHiApplication.class, args);
 }

 @Value("${server.port}")
 String port;
 @RequestMapping("/hi")
 public String home(@RequestParam String name) {
 return "hi "+name+",i am from port:" +port;
 }

}

仅仅@EnableEurekaClient是不够的,还需要在配置文件中注明自己的服务注册中心的地址,application.yml配置文件如下:

eureka:
 client:
 serviceUrl:
 defaultZone: http://localhost:8761/eureka/
server:
 port: 8762
spring:
 application:
 name: service-hi

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

启动工程,打开http://localhost:8761 ,即eureka server 的网址:

你会发现一个服务已经注册在服务中了,服务名为SERVICE-HI ,端口为7862

这时打开 http://localhost:8762/hi?name=forezp ,你会在浏览器上看到 :

hi forezp,i am from port:8762

源码下载:https://github.com/forezp/SpringCloudLearning/tree/master/chapter1

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。

参考资料

springcloud eureka server 官方文档

springcloud eureka client 官方文档


# spring  # cloud  # eureka  # springcloud  # 服务注册  # 注册发现  # Spring-cloud-eureka使用feign调用服务接口  # SpringCloud Eureka实现服务注册与发现  # 细说Springcloud eureka的几种主动下线服务的方式  # spring cloud eureka微服务之间的调用详解  # 详解SpringCloud eureka服务状态监听  # SpringCloud之服务注册与发现Spring Cloud Eureka实例代码  # Spring Cloud EureKa Ribbon 服务注册发现与调用  # SpringCloud Eureka服务发现实现过程  # 是一个  # 配置文件  # 不了解  # 这篇文章  # 开发人员  # 创建一个  # 自己的  # 都是  # 文档  # 运行环境  # 在这里  # 相关内容  # 是有  # 说了  # 不多  # 右键  # 会在  # 有一定  # 要在  # 可以通过 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何与Inertia.js和Vue/React构建现代单页应用  如何在万网ECS上快速搭建专属网站?  猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?  python中快速进行多个字符替换的方法小结  实例解析angularjs的filter过滤器  公司门户网站制作流程,华为官网怎么做?  韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐  Laravel全局作用域是什么_Laravel Eloquent Global Scopes应用指南  EditPlus中的正则表达式 实战(4)  Laravel如何使用Gate和Policy进行授权?(权限控制)  java中使用zxing批量生成二维码立牌  Laravel如何优化应用性能?(缓存和优化命令)  Android仿QQ列表左滑删除操作  如何彻底删除建站之星生成的Banner?  清除minerd进程的简单方法  Windows Hello人脸识别突然无法使用  太平洋网站制作公司,网络用语太平洋是什么意思?  高性能网站服务器配置指南:安全稳定与高效建站核心方案  如何在HTML表单中获取用户输入并结合JavaScript动态控制复利计算循环  Laravel如何处理和验证JSON类型的数据库字段  JavaScript如何实现倒计时_时间函数如何精确控制  百度浏览器ai对话怎么关 百度浏览器ai聊天窗口隐藏  Laravel Eloquent性能优化技巧_Laravel N+1查询问题解决  JS去除重复并统计数量的实现方法  千问怎样用提示词获取健康建议_千问健康类提示词注意事项【指南】  网站建设要注意的标准 促进网站用户好感度!  如何快速搭建二级域名独立网站?  Laravel怎么进行数据库回滚_Laravel Migration数据库版本控制与回滚操作  Python企业级消息系统教程_KafkaRabbitMQ高并发应用  Windows10电脑怎么设置虚拟光驱_Win10右键装载ISO镜像文件  厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?  高端建站如何打造兼具美学与转化的品牌官网?  如何快速搭建FTP站点实现文件共享?  专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?  如何用狗爹虚拟主机快速搭建网站?  Laravel如何优雅地处理服务层_在Laravel中使用Service层和Repository层  Claude怎样写约束型提示词_Claude约束提示词写法【教程】  利用JavaScript实现拖拽改变元素大小  Laravel怎么生成URL_Laravel路由命名与URL生成函数详解  Laravel如何使用Eloquent进行子查询  今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】  米侠浏览器网页图片不显示怎么办 米侠图片加载修复  JavaScript如何实现音频处理_Web Audio API如何工作?  php8.4header发送头信息失败怎么办_php8.4header函数问题解决【解答】  ,交易猫的商品怎么发布到网站上去?  lovemo网页版地址 lovemo官网手机登录  ChatGPT常用指令模板大全 新手快速上手的万能Prompt合集  Laravel API资源(Resource)怎么用_格式化Laravel API响应的最佳实践  详解vue.js组件化开发实践  Google浏览器为什么这么卡 Google浏览器提速优化设置步骤【方法】