Spring Cloud - Spring Cloud 注册中心与服务提供者(Spring Cloud Eureka 概述、微服务高效入门、微服务应用实例)

news/2025/11/16 20:54:40/文章来源:https://www.cnblogs.com/yangykaifa/p/19229006

一、搭建微服务系统核心中枢

1、服务治理的核心组件
2、服务治理概述
功能说明
服务注册分布式系统架构中,每个微服务在启动时,会将自己的信息存储在注册中心
服务发现服务消费者从注册中心查询服务提供者的网络信息,并通过此信息调用服务提供者的接口
  • Spring Cloud 的服务治理可以使用 Eureka 组件
3、注册中心对各个微服务的管理
4、服务提供者、服务消费者、注册中心的关联
  1. 启动注册中心

  2. 服务提供者启动,在注册中心注册一个可以提供服务的实例

  3. 服务消费者启动,在注册中心订阅需要调用的服务

  4. 注册中心将服务提供者的信息推送给服务调用者

  5. 服务消费者通过相关信息(IP、端口)调用服务提供者的服务

5、注册中心核心模块

二、Spring Cloud Eureka 概述

1、基本介绍
2、Spring Cloud Eureka 的组成
* Eureka Server 服务端
* Eureka Client 客户端

三、微服务快速入门

1、父工程
(1)创建父工程
  • 创建 Maven 工程(父工程,不使用模板),在 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.my</groupId>
<artifactId>SpringCloudTest</artifactId>
<version>1.0-SNAPSHOT</version><!-- Spring Boot --><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.7.RELEASE</version></parent><dependencies><!-- Spring Web --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- JDK 9 以上额外配置 --><!--        <dependency>--><!--            <groupId>javax.xml.bind</groupId>--><!--            <artifactId>jaxb-api</artifactId>--><!--            <version>2.3.0</version>--><!--        </dependency>--><!--        <dependency>--><!--            <groupId>com.sun.xml.bind</groupId>--><!--            <artifactId>jaxb-impl</artifactId>--><!--            <version>2.3.0</version>--><!--        </dependency>--><!--        <dependency>--><!--            <groupId>com.sun.xml.bind</groupId>--><!--            <artifactId>jaxb-core</artifactId>--><!--            <version>2.3.0</version>--><!--        </dependency>--><!--        <dependency>--><!--            <groupId>javax.activation</groupId>--><!--            <artifactId>activation</artifactId>--><!--            <version>1.1.1</version>--><!--        </dependency>--></dependencies><!-- Spring Cloud --><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Finchley.SR2</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement></project>
2、注册中心
(1)创建子工程
<?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><artifactId>SpringCloudTest</artifactId><groupId>com.my</groupId><version>1.0-SNAPSHOT</version></parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>eurekaserver</artifactId><!-- Eureka Server --><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency></dependencies></project>
(2)配置文件
  • 在 resources 目录下,创建并配置 application.yaml 配置文件
server:
port: 8761
eureka:
client:
# 是否将当前的 Eureka 服务作为客户端注册
register-with-eureka: false
# 是否获取其他 Eureka 服务
fetch-registry: false
# 注册中心 URL
service-url:
defaultZone: http://localhost:8761/eureka/
(3)启动类
  • 创建并配置启动类
package com.my;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
// 注册中心
@EnableEurekaServer
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}
(4)启动注册中心
  • 访问地址:http://localhost:8761/
3、服务提供者
(1)创建子工程
  • 在父工程目录下创建子工程(Module),实现 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"><parent><artifactId>SpringCloudTest</artifactId><groupId>com.my</groupId><version>1.0-SNAPSHOT</version></parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>ServerProvider</artifactId><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency></dependencies>
</project>
(2)配置文件
  • 在 resources 目录下,创建并配置 application.yaml 配置文件
server:
port: 8010
spring:
application:
# 服务名
name: ServerProvider
eureka:
client:
# 注册路径
service-url:
defaultZone: http://localhost:8761/eureka/
instance:
# 是否将 IP 进行注册
prefer-ip-address: true
(3)启动类
  • 创建并配置启动类
package com.my;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class ServerProviderApplication {
public static void main(String[] args) {
SpringApplication.run(ServerProviderApplication.class, args);
}
}
(4)启动服务提供者
  • 在注册中心启动后启动服务提供者,访问注册中心,查看注册的服务消费者

四、微服务应用实例

1、需求
  • 在服务提供者中完成简单的增删改查操作服务
2、具体实现
(1)依赖配置
  • 在父工程中引入 Lombok 简化开发
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
</dependency>
(2)Entity
  • 创建 Student 实体类
package com.my.entity;
import lombok.Data;
@Data
@AllArgsConstructor
public class Student {
private Integer id;
private String name;
}
(3)Repository
  • 创建 StudentRepository 接口
package com.my.repository;
import com.my.entity.Student;
import java.util.Collection;
public interface StudentRepository {
public Collection<Student> findAll();public Student findById(Integer id);public void saveOrUpdate(Student student);public void deleteById(Integer id);}
  • 创建 StudentRepositoryImpl 类,实现 StudentRepository 接口
package com.my.repository.impl;
import com.my.entity.Student;
import com.my.repository.StudentRepository;
import org.springframework.stereotype.Repository;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
@Repository
public class StudentRepositoryImpl implements StudentRepository {
private static Map<Integer, Student> map;static {map = new HashMap<>();map.put(1, new Student(1,"张三"));map.put(2, new Student(2,"李四"));map.put(3, new Student(3,"王五"));}@Overridepublic Collection<Student> findAll() {return map.values();}@Overridepublic Student findById(Integer id) {return map.get(id);}@Overridepublic void saveOrUpdate(Student student) {map.put(student.getId(), student);}@Overridepublic void deleteById(Integer id) {map.remove(id);}}
(4)Controller
  • 创建 StudentHandler 类
package com.my.controller;
import com.my.entity.Student;
import com.my.repository.StudentRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.Collection;
@RestController
@RequestMapping("/student")
public class StudentHandler {
@Autowired
private StudentRepository studentRepository;
@GetMapping("/findAll")
public Collection<Student> findAll() {return studentRepository.findAll();}@GetMapping("findById/{id}")public Student findById(@PathVariable("id") Integer id) {return studentRepository.findById(id);}@PostMapping("/save")public void save(@RequestBody Student student) {studentRepository.saveOrUpdate(student);}@PutMapping("/update")public void update(@RequestBody Student student) {studentRepository.saveOrUpdate(student);}@DeleteMapping("/deleteById/{id}")public void deleteById(@PathVariable("id") Integer id) {studentRepository.deleteById(id);}}
3、测试
  • 依次启动注册中心和服务消费者,使用接口测试工具 Postman 进行测试
(1)findAll
参数项说明
请求类型GET 请求
访问地址http://localhost:8010/student/findAll
(2)findById
参数项说明
请求类型GET 请求
请求地址http://localhost:8010/student/findById/1
(3)save
参数项说明
请求类型POST 请求
请求地址http://localhost:8010/student/save
{
"id": 4,
"name": "nono"
}
(4)update
参数项说明
PUT请求
请求地址http://localhost:8010/student/update
  • JSON 数据
{
"id": 3,
"name": "jack"
}
(5)deleteById
参数项说明
DELETE请求
请求地址http://localhost:8010/student/deleteById/4

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/967343.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DateUtil

点击查看 import org.junit.Test;import java.time.*; import java.time.format.DateTimeFormatter; import java.time.temporal.ChronoUnit; import java.time.temporal.TemporalAdjusters; import java.time.tempora…

(链表)找单链表倒数第k个结点

5.找单链表倒数第k个结点 Node* Get_Kth_Node(Node* plist, int k) { Node* p = plist; Node* q = plist;for (int i = 0; i < k; i++)q = q->next;while (q != NULL) {p = p->next;q = q->next; }return …

(链表)判断是否回文

4.判断是否回文 std::stack<Node*> st; int len = GetLength(plist);Node* p = plist->next; for (int i = 0; i < len / 2; i++) {st.push(p);p = p->next; }if (len % 2 != 0)p = p->next;while (…

和为定值的子集数 25-11-16

和为定值的子集数 |递归|二叉树| 本题思维可以扩展到类似的题中,例如:子集和、子集积、排列组合类问题 其中:该题用到未知数组长度的读取,个人认为用stringstream会比之前的string然后一个一个读入方便很多 主要思…

(链表)判断两个单链表是否存在交点

2.判断两个单链表是否存在交点,如果存在交点,则找到相交的一点。 (1)只需判断是否相交 用两个分别跑到单链表的未结点处,然后判断是否是同一个尾结点即可 (2)指出具体的相交的结点是什么 先统计两个单链表长度,然…

(链表)逆置

1.逆置 (1)借助头结点 (2)不借助头结点 (3)(详情见project6) //0.判空处理 empty if (Is_Empty(plist)) return; //1.申请三个指针pqr,先给p和q赋值 r不着急 Node* p = plist->next; Node* q = p->next; Node…

(链表)任意删除一个结点

3.任意删除一个结点(要求时间复杂读为o(1)),给的这个节点的地址不能是尾结点(这个结点是无法找到上家的) //0.做判断:p不能是尾结点 if (p->next == NULL) return false; //1.申请一个指针q,用来指向p的下一…

在抖音直播推广开源作品的可行性?

一、前言作为85后,.NET开发已经有20年头了,人已经步入中年了,打工生涯也应该结束了,作为.NET微服务先驱者,2017年就开始研发surging, 然后在github开源,不出两年star 已经突破3k,star 的增加,代表了大多数人认可…

分布式监控体系:从指标采集到智能告警的完整之道 - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

hot 100 (1)—— 两数之和(哈希) - 指南

hot 100 (1)—— 两数之和(哈希) - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", &quo…

DLSS Swapper商业模式:开源软件商业化探索 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

性能优化体系化建设:BI平台的深度优化实践

第一部分:最复杂的性能优化经历——BI数据大盘加载卡顿 1. 问题背景与建立监控基线:场景:OMNIEYE平台的核心数据看板,用户配置了多个图表,一次性拉取并渲染数万行、数十列的数据,导致:API响应时间极长(超过10s…

AT_jsc2019_qual_e Card Collector题解

博客地址 图论建模还是太神仙了。 首先思考一下题目给的条件,每行只选一个,接着每列只选一个,由于这种唯一对应的性质,很容易让人想到二分图匹配,但数据范围并不允许我们这样做。 但这给我们一个图论建模的思路。…

20251115ACC

比赛链接 赛时 难绷 先通读四道题,T2有一个反悔贪心的思路,T3一眼差分,T1应该不会太难,心态良好。 于是直接开T1。思考近45min后想到直接硬拆绝对值,开始码。结果由于自己前期思路不严谨和代码实现问题,硬调2.5h才过…

Day40(10)-F:\硕士阶段\Java\课程代码\后端\web-ai-code\web-ai-project01\springboot-mybatis-quickstart

Mybatispublic class HikariDataSource extends HikariConfig implements DataSource, Closeable {private static final Logger LOGGER = LoggerFactory.getLogger(HikariDataSource.class);private final AtomicBool…

还能回到原先吗 绞尽脑汁翻阅文献 这名为爱的实验 被等号连接

test40 教练模拟器真好玩 /kel俄罗斯方块 旋转一下然后计数,注意对对称图形去重喵。 #pragma GCC optimize(1,2,3,"Ofast","inline") #include<bits/stdc++.h> #define int long long #def…

irm steam.work|iex 风险分析

一个高风险的恶意命令。 执行此命令将严重危害您的计算机安全和您的 Steam 帐户。 风险分析:irm steam.work|iex这个命令由三个部分组成,组合起来非常危险:irm steam.workirm 是 Invoke-RestMethod 的别名,这是一个…

2025年11月手动旗杆厂家口碑推荐榜单及选购指南

摘要 2025年旗杆行业迎来新一轮技术升级,不锈钢旗杆、电动旗杆等产品在材质工艺和智能控制方面均有显著突破。本文基于市场调研数据、用户反馈和行业技术参数,整理出手动旗杆领域权威推荐榜单,为酒店、学校、企业等…

2025年四川电动旗杆制造厂排行榜TOP5权威发布

摘要 随着城市化进程加快和企事业单位形象提升需求增长,2025年四川电动旗杆行业迎来快速发展期。本文基于市场调研数据、用户口碑评价和技术实力评估,为您呈现最新行业排行榜单,为采购决策提供参考依据。文末附有详…

Pandas --DataFrame基本操作

Pandas --DataFrame基本操作一.介绍DataFrame是pandas中另一个核心数据结构,它是一个二维的、大小可变的、可以存储多种类型数据的表格结构。每一列可以是不同的类型(数值、字符串、布尔值等),并且有行索引和列索引…