springcloud入门与实践

Spring Cloud 是一个基于 Spring Boot 的框架,专注于微服务架构下的常见问题,如服务发现、负载均衡、断路器、分布式配置、消息驱动的微服务等。以下是 Spring Cloud 的入门指南和实践示例。

1. 环境准备

首先,确保你已经安装了以下工具:

  • JDK 1.8+
  • Apache Maven 3.3+
  • Docker (可选,用于运行部分服务,如配置中心)

2. 创建一个简单的 Spring Cloud 项目

项目结构

我们将创建一个简单的 Spring Cloud 项目,包括配置服务、服务注册中心、服务提供者和服务消费者。项目结构如下:

spring-cloud-demo
├── config-server
├── eureka-server
├── service-provider
├── service-consumer
└── pom.xml
1. 创建父POM文件

首先,在项目根目录创建 pom.xml 文件,定义父POM:

pom.xml:

<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.example</groupId><artifactId>spring-cloud-demo</artifactId><version>1.0-SNAPSHOT</version><packaging>pom</packaging><modules><module>config-server</module><module>eureka-server</module><module>service-provider</module><module>service-consumer</module></modules><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>2021.0.3</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement>
</project>
2. 创建配置服务 (Config Server)

配置服务用于集中管理分布式系统中的配置文件。

config-server/pom.xml:

<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.example</groupId><artifactId>spring-cloud-demo</artifactId><version>1.0-SNAPSHOT</version></parent><artifactId>config-server</artifactId><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-config-server</artifactId></dependency></dependencies>
</project>

config-server/src/main/resources/application.yml:

server:port: 8888spring:cloud:config:server:git:uri: https://github.com/your-repo/config-reposearch-paths: configmanagement:endpoints:web:exposure:include: "*"

config-server/src/main/java/com/example/config/ConfigServerApplication.java:

package com.example.config;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;@SpringBootApplication
@EnableConfigServer
public class ConfigServerApplication {public static void main(String[] args) {SpringApplication.run(ConfigServerApplication.class, args);}
}
3. 创建服务注册中心 (Eureka Server)

服务注册中心用于服务的注册和发现。

eureka-server/pom.xml:

<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.example</groupId><artifactId>spring-cloud-demo</artifactId><version>1.0-SNAPSHOT</version></parent><artifactId>eureka-server</artifactId><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies>
</project>

eureka-server/src/main/resources/application.yml:

server:port: 8761eureka:client:register-with-eureka: falsefetch-registry: falseserver:wait-time-in-ms-when-sync-empty: 0

eureka-server/src/main/java/com/example/eureka/EurekaServerApplication.java:

package com.example.eureka;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. 创建服务提供者 (Service Provider)

服务提供者提供具体的服务实现。

service-provider/pom.xml:

<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.example</groupId><artifactId>spring-cloud-demo</artifactId><version>1.0-SNAPSHOT</version></parent><artifactId>service-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>
</project>

service-provider/src/main/resources/application.yml:

server:port: 8080spring:application:name: service-providereureka:client:service-url:defaultZone: http://localhost:8761/eureka/

service-provider/src/main/java/com/example/provider/ServiceProviderApplication.java:

package com.example.provider;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;@SpringBootApplication
@EnableEurekaClient
public class ServiceProviderApplication {public static void main(String[] args) {SpringApplication.run(ServiceProviderApplication.class, args);}
}

service-provider/src/main/java/com/example/provider/controller/HelloController.java:

package com.example.provider.controller;import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;@RestController
public class HelloController {@GetMapping("/hello")public String sayHello(@RequestParam String name) {return "Hello, " + name;}
}
5. 创建服务消费者 (Service Consumer)

服务消费者调用服务提供者提供的服务。

service-consumer/pom.xml:

<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://www.m aaven.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.example</groupId><artifactId>spring-cloud-demo</artifactId><version>1.0-SNAPSHOT</version></parent><artifactId>service-consumer</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><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency></dependencies>
</project>

service-consumer/src/main/resources/application.yml:

server:port: 8081spring:application:name: service-consumereureka:client:service-url:defaultZone: http://localhost:8761/eureka/

service-consumer/src/main/java/com/example/consumer/ServiceConsumerApplication.java:

package com.example.consumer;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.openfeign.EnableFeignClients;@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
public class ServiceConsumerApplication {public static void main(String[] args) {SpringApplication.run(ServiceConsumerApplication.class, args);}
}

service-consumer/src/main/java/com/example/consumer/client/HelloClient.java:

package com.example.consumer.client;import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;@FeignClient(name = "service-provider")
public interface HelloClient {@GetMapping("/hello")String sayHello(@RequestParam(name = "name") String name);
}

service-consumer/src/main/java/com/example/consumer/controller/HelloController.java:

package com.example.consumer.controller;import com.example.consumer.client.HelloClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;@RestController
public class HelloController {private final HelloClient helloClient;public HelloController(HelloClient helloClient) {this.helloClient = helloClient;}@GetMapping("/hello")public String sayHello(@RequestParam String name) {return helloClient.sayHello(name);}
}

3. 构建和运行

首先,通过Maven构建项目。在项目根目录下运行以下命令:

mvn clean install
启动配置服务

进入 config-server 目录,运行以下命令启动配置服务:

mvn spring-boot:run
启动服务注册中心

进入 eureka-server 目录,运行以下命令启动服务注册中心:

mvn spring-boot:run
启动服务提供者

进入 service-provider 目录,运行以下命令启动服务提供者:

mvn spring-boot:run
启动服务消费者

进入 service-consumer 目录,运行以下命令启动服务消费者:

mvn spring-boot:run

如果一切正常,你应该可以在浏览器中访问 http://localhost:8081/hello?name=World,并看到以下输出:

Hello, World

4. 配置中心与负载均衡

你可以进一步配置配置中心以存储和分发配置文件,并在服务消费者中启用负载均衡,以在多个服务实例之间分发请求。

配置中心示例

config-repo 仓库中创建配置文件 service-provider.yml

spring:application:name: service-provider
server:port: 8080

service-consumer.yml 文件中配置负载均衡:

spring:application:name: service-consumer
server:port: 8081eureka:client:service-url:defaultZone: http://localhost:8761/eureka/spring:cloud:loadbalancer:ribbon:OkToRetryOnAllOperations: true

总结

通过以上步骤,你已经成功创建了一个简单的 Spring Cloud 项目,包括配置服务、服务注册中心、服务提供者和服务消费者模块,并了解了如何使用 FeignClient 调用远程服务。Spring Cloud 提供了丰富的功能,如服务发现、负载均衡、断路器、分布式配置、消息驱动的微服务等,可以帮助你构建高性能、可伸缩的分布式系统。通过深入学习和实践,可以更好地掌握 Spring Cloud 的高级特性和最佳实践,满足实际项目的需求。

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

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

相关文章

Python 潮流周刊#56:NumPy 2.0 里更快速的字符串函数

△△请给“Python猫”加星标 &#xff0c;以免错过文章推送 本周刊由 Python猫 出品&#xff0c;精心筛选国内外的 250 信息源&#xff0c;为你挑选最值得分享的文章、教程、开源项目、软件工具、播客和视频、热门话题等内容。愿景&#xff1a;帮助所有读者精进 Python 技术&am…

Mysql(一):深入理解Mysql索引底层数据结构与算法

众所众知&#xff0c;MySql的查询效率以及查询方式&#xff0c;基本上和索引息息相关&#xff0c;所以&#xff0c;我们一定要对MySql的索引有一个具体到数据底层上的认知。 这一次也是借着整理的机会&#xff0c;和大家一起重新复习一下MySql的索引底层。 本节也主要有一下的…

AOSP : Android编译记录

Android编译记录 1、关注编译配置文件2、编译记录2.1 设置构建环境2.2 记录 1、关注编译配置文件 Android.bp 或 Android.mk Android.bp 文件格式 2、编译记录 2.1 设置构建环境 source build/envsetup.sh lunch product_name-release-build_variant查看当前的启动设置&#…

【PL理论】(25) C- 语言:表达式求值的推理规则 | 执行语句的推理规则 | 语句执行的推理规则

&#x1f4ad; 写在前面&#xff1a;本章我们将继续更新我们的 "C-" 语言&#xff0c;更新表达式求值的推理规则、执行语句的推理规则以及语句执行的推理规则。 目录 0x00 C- 语言更新&#xff1a;表达式求值的推理规则 0x01 C- 语言更新&#xff1a;执行语句的推…

网页五子棋对战项目测试(selenium+Junit5)

目录 网页五子棋对战项目介绍 网页五子棋对战测试的思维导图​ 网页五子棋对战的UI自动化测试 测试一&#xff1a;测试注册界面 测试二&#xff1a;测试登陆界面 测试三&#xff1a;测试游戏大厅界面 测试四&#xff1a;测试游戏房间界面以及观战房间界面 测试五&#…

【技巧】Leetcode 67. 二进制求和【简单】

二进制求和 给你两个二进制字符串 a 和 b &#xff0c;以二进制字符串的形式返回它们的和。 示例 1&#xff1a; 输入:a “11”, b “1” 输出&#xff1a;“100” 示例 2&#xff1a; 输入&#xff1a;a “1010”, b “1011” 输出&#xff1a;“10101” 解题思路 …

软考-架构设计师-综合知识总结(试卷:2009~2022)(下篇)

说明 本文档对2009到2022年试卷的综合知识进行了归纳总结&#xff0c;同时对叶宏主编的《系统架构设计师教程》划分重点。 第十七章&#xff1a;通信系统架构设计 17.2 考题总结 第十八章&#xff1a;安全架构设计 18.1 重要知识点 18.2 考题总结 第十九章&#xff1a;大数据…

传统后端SQL数据层替代解决方案: 内置数据源+JdbcTemplate+H2数据库 详解

内置数据源 我们回顾一下druid数据源的配置方式 通过type属性指定数据源的类型 导入依赖 starter就使用了spring的自动装配功能 格式二是在引入druid的依赖的基础上 进行的一种配置方式 Tomcat内部也可以进行数据源的配置 轻量级中最快的数据源对象 我们切换德鲁伊连接池 我…

OpenDevin 环境配置及踩坑指南

不惧怕任何环境配置 首先 clone 项目&#xff0c;然后查看开发者文档&#xff1a;https://github.com/OpenDevin/OpenDevin/blob/main/Development.md make setup-config 自定义 LLM 配置 首先这个 devin 写的是支持自定义的 LLM 配置&#xff0c;并且提供了交互式命令供我们…

DzzOffice集成功能最丰富的开源PHP+MySQL办公系统套件

DzzOffice是一套开源办公套件&#xff0c;旨在为企业和团队提供类似“Google企业应用套件”和“微软Office365”的协同办公平台。以下是对DzzOffice的详细介绍&#xff1a; 主要功能和应用&#xff1a; 网盘&#xff1a;支持企业、团队文件的集中管理&#xff0c;提供文件标签…

app-ios 内嵌h5的缓存问题

在iOS应用中内嵌H5页面时&#xff0c;可能会遇到缓存问题&#xff0c;导致页面更新不及时。以下是一些解决策略和方法&#xff1a; 目录 方法1&#xff1a;Nginx配置 方法2&#xff1a;使用版本号 方法1&#xff1a;Nginx配置 通过Nginx服务器配置来控制缓存行为。例如&#…

Python开发示例——使用Python实现炫酷的数据动态图

前言 数据可视化是通过图形、图表、地图等可视元素将数据呈现出来&#xff0c;以便更容易理解、分析和解释。它是将抽象的数据转化为直观形象的过程&#xff0c;有助于发现数据中的模式、趋势和关系。数据可视化对于数据科学、商业分析、决策制定等领域都至关重要。当我们想用…

UniApp+Vue3使用Vant-微信小程序组件

第一步&#xff1a;打开创建好的UniappVue3的项目 第二步&#xff1a;下载Vant-Weapp npm i vant/weapp -S --production 第三步&#xff1a;修改目录名称 wxcomponents 必须是wxcomponents 第四步&#xff1a;将下载好的vant中的dist目录剪切到当前wxcomponents目录下 第五…

在 Linux 上刷新 DNS 缓存:告别过时解析,提升网络访问效率

引言 在 Linux 系统中&#xff0c;DNS&#xff08;域名系统&#xff09;缓存对于提高网络访问速度和效率至关重要。然而&#xff0c;当 DNS 记录发生更改或需要更新时&#xff0c;旧的缓存条目可能会导致访问问题或连接到错误的服务器。因此&#xff0c;了解如何在 Linux 上刷…

leetcode打卡#day51 300. 最长递增子序列、674. 最长连续递增序列、718. 最长重复子数组

300. 最长递增子序列 class Solution { public:int lengthOfLIS(vector<int>& nums) {if (nums.size() < 1) return nums.size();vector<int> dp(nums.size(), 1);int result 0;for (int i 1; i < nums.size(); i) {for (int j 0; j < i; j) {if …

牛客网金九银十最新版互联网Java高级工程师面试八股文出炉!面面俱到,太全了

前言 作为一个 Java 程序员&#xff0c;你平时总是陷在业务开发里&#xff0c;每天噼里啪啦忙敲着代码&#xff0c;上到系统开发&#xff0c;下到 Bug 修改&#xff0c;你感觉自己无所不能。然而偶尔的一次聚会&#xff0c;你听说和自己一起出道的同学早已经年薪 50 万&#x…

hive split 特殊用法

日常使用 split(字符串&#xff0c;分割符) &#xff0c;如 split(abcd],dd[,as,,) 则按照分隔符逗号进行分割 但是日常数据处理过程中&#xff0c;还会遇到在某个字符后面的后者某个字符前面的分割符&#xff0c;则此时需要加入正则表达式&#xff1a; 正向前瞻断言 ,(?[)…

编程:单精度浮点型数据与双精度浮点型数据杂谈

单精度浮点型数据与双精度浮点型数据杂谈 文章目录 单精度浮点型数据与双精度浮点型数据杂谈序言浮点数据类型内存占用精度与取值范围  取值范围 序言 在编程计算中&#xff0c;浮点型数据的运算常常用到。嵌入式编程中对于数据的传输&#xff0c;一般是扩大N被取整&#xff…

无线模块通过TCP/IP协议实现与PC端的数据传输解析

在当今的信息时代&#xff0c;无线通信技术的发展日新月异&#xff0c;为我们的工作和生活带来了极大的便利。其中&#xff0c;无线通信模块通过TCP/IP协议向PC端传送数据已经成为了一种常见的通信方式。 无线通信模块是一种能够在无线网络中进行数据传输的设备。它通常集成了…

vue面试题十四

一、Vue 3的Composition API主要包括哪些函数和钩子&#xff1f; Vue 3的Composition API主要包括以下几个方面的函数和钩子&#xff1a; 1. 响应式引用和状态 ref&#xff1a;用于创建响应式引用&#xff0c;接收一个值并返回一个响应式且可变的ref对象。在模板中可以直接访…