学习springcloud的一些心得体会——老卫的天气预报系统

article/2025/9/19 20:37:07

1:建立天气预报springboot系统

首先先建立一个天气预报的springboot系统,具体流程如下:

(1)从cityList.xml中获取城市信息,

(2)然后根据下面的链接获取各个城市的天气预报信息,缓存在redis中,天气预报信息半个小时同步一次

http://wthrcdn.etouch.cn/weather_mini?citykey=?

http://wthrcdn.etouch.cn/weather_mini?city=?

(3)用thymeleaf建立report的页面,控制器,去redis获取天气信息

2:由springboot转换成springcloud,拆分天气预报项目到spingcloud模式

springcloud:Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring Cloud并没有重复制造轮子,它只是将各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。springcloud说白了就是多个springboot工程

天气预报系统就拆分为四个工程,分别是:

(1)城市数据工程(主要是更新城市数据列表,以方便让其他工程获取城市信息)

(2)天气数据采集同步工程(主要是获取全部城市的天气信息,然后同步到redis数据库中,并每隔半个小时更新数据)

(3)天气数据获取API工程(就是通过编写控制器写两个方法,根据城市id和根据城市名称获取城市天气信息)

(4)天气预报报告工程(通过获取城市数据信息以及天气数据获取API,实现数据的展示)

redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

 

3:注册发现—— eureka,使上一步骤拆分的天气预报工程真正变成springcloud工程

eureka:

Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。SpringCloud将它集成在其子项目spring-cloud-netflix中,以实现SpringCloud的服务发现功能。

Eureka包含两个组件:Eureka Server和Eureka Client。

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

Eureka Client是一个java客户端,用于简化与Eureka Server的交互,客户端同时也就是一个内置的、使用轮询(round-robin)负载算法的负载均衡器。

在应用启动后,将会向Eureka Server发送心跳,默认周期为30秒,如果Eureka Server在多个心跳周期内没有接收到某个节点的心跳,Eureka Server将会从服务注册表中把这个服务节点移除(默认90秒)。

Eureka Server之间通过复制的方式完成数据的同步,Eureka还提供了客户端缓存机制,即使所有的Eureka Server都挂掉,客户端依然可以利用缓存中的信息消费其他服务的API。综上,Eureka通过心跳检查、客户端缓存等机制,确保了系统的高可用性、灵活性和可伸缩性。

 

总的思想:建立euraka注册服务器,然后把天气预报系统的各个自工程注册在eureka服务器上,执行程序

(1)eureka注册服务器工程搭建

第一步:引入eureka服务端和springcloud架包

第二步:修改application配置

第三步:在启动类中增加启动eureka服务器配置

 

第四步:启动程序,开启eureka服务器

 

(2)修改天气预报四个子工程,然后注册到eureka服务器中

四个子工程改造差不多,我就随便举一个,就举例天气预报数据采集同步工程吧

第一步:添加springcloud和eureka客户端架包

(2)修改application配置:配置了该工程注册在eureka服务器上的工程名以及注册服务器的地址

(3)在启动类中增加启动eureka客户端配置

 

(4)启动客户端程序,该子工程就会注册在服务器上

4:服务之间调用——feigh

Feign是Netflix开发的声明式、模板化的HTTP客户端, Feign可以帮助我们更快捷、优雅地调用HTTP API。

在Spring Cloud中,使用Feign非常简单——创建一个接口,并在接口上添加一些注解,代码就完成了。Feign支持多种注解,例如Feign自带的注解或者JAX-RS注解等。

Spring Cloud对Feign进行了增强,使Feign支持了Spring MVC注解,并整合了Ribbon和Eureka,从而让Feign的使用更加方便。

Spring Cloud Feign是基于Netflix feign实现,整合了Spring Cloud Ribbon和Spring Cloud Hystrix,除了提供这两者的强大功能外,还提供了一种声明式的Web服务客户端定义的方式。

Spring Cloud Feign帮助我们定义和实现依赖服务接口的定义。在Spring Cloud feign的实现下,只需要创建一个接口并用注解方式配置它,即可完成服务提供方的接口绑定,简化了在使用Spring Cloud Ribbon时自行封装服务调用客户端的开发量。

Spring Cloud Feign具备可插拔的注解支持,支持Feign注解、JAX-RS注解和Spring MVC的注解。

https://www.jianshu.com/p/94177e224ef8

总的来说就是在天气预报四个子工程之间互相调用接口,同时实现负载均衡

第一点:天气预报采集同步系统需要调用城市信息系统的信息

第二点:天气预报预报系统需要调用城市信息系统的信息,以及天气预报获取Api系统信息

所以我们总的改造就是天气预报采集系统和天气预报预报系统

(1)两个子系统改造,都一样,我就举例天气预报采集同步系统

第一步:增加feigh架包

第二步:增加feigh的配置

第三步:在启动类中增加启动feigh的配置

第四步:新增调用城市列表service

第五步:在job任务中调用上一步的service

(2)启动服务器和客户端,

执行report显示天气的时候,feigh自动会实现负载均衡,执行其中调用务中的一个

(3)特别注意点:关于天气预报采集和同步中定时任务项目启动不同步,到了下一个间隔点才同步的问题

主要是springcloud的一些启动项妨碍了同步定时任务的执行,具体可以看下面的博客的解决,我之前也纠结了很久

https://my.oschina.net/ouminzy/blog/3080261

 

5:API网关——zuul

Zuul包含了对请求的路由和过滤两个最主要的功能:是路由网关

其中路由功能负责将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础而过滤器功能则负责对请求的处理过程进行干预,是实现请求校验、服务聚合等功能的基础.

Zuul和Eureka进行整合,将Zuul自身注册为Eureka服务治理下的应用,同时从Eureka中获得其他微服务的消息,也即以后的访问微服务都是通过Zuul跳转后获得.

注意:Zuul服务最终还是会注册进Eureka

提供=代理+路由+过滤三大功能)

总的来说,之前的feigh+eureka已经实现springcloud的功能,为了在服务之间调用统一起来,需要使用zuul来生成统一的API网关

主要的项目格式是,我们主要改造天气预报报告项目,同时我们还要注册一个zuul网关客户端:

(1)生成zuul网关客户端

第一步:新建zuul项目,导入zuul架包

第二步:添加配置,包括注册eureka的地址,注册的名称,API网关的名称,以及API网关对用的服务的名称

第三步:启动类配置zuul的配置

 

(2)改造天气预报报告项目

第一步:直接修改dataservice就好

 

6:熔断机制——hystrix

Hystrix是一个为服务关于服务保护的框架,是Netflix开源的一款针对分布式系统的延迟和容错解决框架,目的是用来隔离分布式服务故障.它提供线程和信号隔离,以减少不同服务之间的资源竞争带来的相互影响;提供熔断机制使得服务可以快速失败,而不是一直阻塞等待服务响应,并能从中快速恢复.Hystrix通过这些机制来阻止级联失败并保证系统弹性,可用.

https://www.jianshu.com/p/8f85e8064ad6

主要改造天气预报报告系统

第一步:添加hystrix的架包

第二步:修改application文件

第三步:修改启动类添加hystrix配置

第四步:添加熔断代码在dataservice中

第五步:修改thymeleaf页面代码,让熔断没有值得时候前端不报错,提示系统不可用

7:配置中心-config(介绍,不和天气预报系统有关)

Spring Cloud Config是一个解决分布式系统的配置管理方案,为分布式系统外部化配置提供了支持,包含Config Server和Config Client两部分,Server提供配置文件存储,对外提供接口以获取配置文件的内容,Client通过接口获取数据,并初始化自己。

https://zhuanlan.zhihu.com/p/65654453

在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件。在Spring Cloud中,有分布式配置中心组件spring cloud config ,它支持配置服务放在配置服务的内存中(即本地),也支持放在远程Git仓库中。在spring cloud config 组件中,分两个角色,一是config server,二是config client。https://www.jianshu.com/p/8b26f8729bf4

 

(1)config服务器端

第一步:新建config服务器工程,引入config服务器架包

 

第二步:新增配置,配置存放配置文件的github路径

 

第三步:启动类新增config服务端配置信息

(2)config客户端

第一步:新增config客户端工程,新增config客户端架包

 

第二步:新增配置

默认生成规则,工程名-profile,上面就是micro-weather-config-client-dev

 

在github上就是这个

 

8 一些思考

第一个问题:一台服务器的并发量有多少,由什么决定?

 因素一:服务器网络带宽

 因素二:服务器系统内存(注意是内存不是硬盘哦)

 因素三:web容器

 因素四:程序代码

 

服务器网络带宽

       假如你的服务器带宽是5M,如果你的http求头是8k,那么你的服务器最大并发数是 5M/8k =640

操作系统内存

        假如你的操作系统内存是8G,如果你的每个请求占用内存256K,那么你的服务器最大支持并发数就是8G/256K=32758。这就是为啥购买服务器,内存越大,配置越高 支持的并发数越大的原因(当然money越多)。

web容器

       web容器的选择和配置也是至关重要的,比如说tomcat 的 baseio 和nio的区别就很大,tomcat配置一般启用的是线程池,maxThreads 一般配置为操作系统支持的最大并发数

程序代码

        程序代码放到第四才介绍,可见他的重要性,做了这么多年的程序猿,以前要是想提高并发,我总是抓破头皮的想如何提高代码质量,其实他别不那么重要(也许这样说你会感到很沮丧),更直接的且有效的方式就是提高服务器的配置即。但是,代码质量也是起着不可小觑的作用的,通常在所有的硬件条件都确定的情况下,入门级测试并发工具是 loaderrunner,我们通常挑选系统常用且耗资源的请求来测试,即可得到我们软件的并发量了。

        纠错:查询一些资料,介绍说系统并发数是65535,这个认识是不正确的。65535是2的16次方的值。操作系统的端口是用一个16位的二进制表示,因此65535代表的是操作系统的端口数,0-1023端口属于保留端口,不对外开放使用。

 小知识:

    FTP 默认端口       21

    HTTP默认端口      80

    SMTP默认端口      25

    TCP默认端口       22

    Telnet默认端口       23


第二个问题:自动扩展的是监控吗,如何监控服务器是否会爆掉?

 


http://chatgpt.dhexx.cn/article/H3vulVuf.shtml

相关文章

学习springboot项目的一些心得-----老卫的博客系统

去年年底接触了springboot框架,这两天复习了一遍,主要是跟着老卫博客系统这个课程学习的。 springboot介绍:总的感觉springboot就是基于spring开发的一套框架,好处就是不用配置复杂的依赖包,xml的一些文件&#xff0c…

thymeleaf和spring boot的集成踩坑总结(练习项目是老卫的博客项目)

bug1: 2019-08-08 16:44:38.102 ERROR 19810 — [nio-8080-exec-8] org.thymeleaf.TemplateEngine : [THYMELEAF][http-nio-8080-exec-8] Exception processing template “users/list”: Error resolving template “users/list”, template might not exist or might not be …

《跟老卫学 HarmonyOS 开发》:以父之名・码力全开!写段 HarmonyOS 祝父亲节

#父亲节祝福语# 爸爸在我心中就像旗帜 他教会我做人与处事的方向 在父亲节这个特别的日子里 我想对爸爸说长大以后我就要成为您 使用ArkUI开发“父亲节的祝福” 使用ArkUI开发“父亲节的祝福”,效果如下: 使用DevEco Studio整体开发HarmonyOS整体时…

【老卫搞机】090期:键盘?主机?全功能键盘主机!

这是一台我个人DIY的第二代键盘主机(第一代见:【老卫搞机】074期:键盘?主机?键盘主机!_哔哩哔哩_bilibili)。相比与第一代的作品,第二代产品除了USB 3接口、USB 2接口、mini HDMI接口…

【老卫拆书】009期:Vue+Node肩挑全栈!《Node.js+Express+MongoDB+Vue.js全栈开发实战》开箱

今天刚拿到一本新书,叫做《Node.jsExpressMongoDBVue.js全栈开发实战》,做个开箱。 外观 先从外观上讲,这本是全新的未开封的,膜还在。 这本书介绍从技术原理到整合开发实战,以丰富的项目展现全栈开发的一个技巧。 …

【老卫搬砖】034期:HarmonyOS 3.1 Beta 1初体验,我在本地模拟器里面刷短视频

今天啊打开这个DevEco Studio的话,已经提示有3.1Beta1版本的一个更新啊。然后看一下它的一些特性。本文也演示了如何在本地模拟器里面运行HarmonyOS版短视频。 主要特性 新特性包括: Added support for Windows 11 64-bit and macOS 13.x OSs, as well…

【老卫搞机】135期:华为开发者联盟社区2022年牛人之星奖品开箱!

首先祝大家兔年大吉,身体安康,钱兔似锦!今天咱们来开箱一件特殊的奖品,来自华为开发者联盟社区的新年祝福——2022年牛人之星。 华为有钱!惯例用的是顺丰快递,各位看一下这里面是有很多件的 有这两件。第一…

【老卫搞机】136期:华为开发者联盟社区2022年度战码先锋2期开源贡献之星

首先祝大家兔年大吉,身体安康,钱兔似锦!接上次的“2022年牛人之星”( https://developer.huawei.com/consumer/cn/forum/topic/0203109930647268095),今天咱们来开箱另外一件特殊的奖品,来自华为…

老卫带你学---SVM支持向量机

老卫带你学—SVM支持向量机 学习目标: 理解支持向量机的知识结构理解支持向量机的原理与目标理解算法推导的核心过程和意义(关键是损失函数与约束条件的意义)理解核函数的意义与方法 知识结构 hard margin SVM:可以容易的找到…

老卫带你学---推荐系统

机器学习的一种重要应用就是推荐系统。 比如我们的淘宝推荐,豆瓣推荐,优酷电影推荐等等都用到了推荐系统。 那我们来谈一谈推荐系统的细节。 推荐系统评价指标 要了解推荐系统,先了解其评价指标。 1.准确度 precisionTP/TPFP; recallTP/TP…

老卫带你学---最大熵模型与EM算法

最大熵模型与EM算法 最大熵模型与EM算法在机器学习里面尤为重要。接下来我们一步一步的介绍相关细节: 先验概率与后验概率 后验概率就是通过已有的数据来推断未知的数据,先验概率就是直接对未知的数据进行预测。 所以,我们机器学习的目标就…

SQL创建数据库提示“无法获得数据库 ‘model‘ 上的排他锁。请稍后重试该操作”处理方法

use master --选择数据库 go declare sql varchar(100) while 11 begin select top 1 sql kill cast(spid as varchar(3)) from master..sysprocesses where spid > 50 and spid <> spid and dbid db_id(model)if rowcount 0 break ;print(sql) --打印杀掉进…

SQL Server 数据库创建与删除

目录 &#xff08;一&#xff09;前言 &#xff08;二&#xff09;创建数据库方式 1. 数据库创建方式一 SSMS 方式 &#xff08;1&#xff09; 点击新建数据库想选项 &#xff08;2&#xff09; 新建数据库页面配置 2. 数据库创建方式二 T-SQL 方式 &#xff08;三&…

SQL Server基础学习——用代码创建数据库和表

&#xff11;.连接成功后出现下述页面&#xff0c;那么我们学习第一步先建个数据库和表 &#xff12;.建立之前要了解基础SQL语言 SQL语言是集DDL、DML、DCL 于一体的数据库语言。 &#xff11;&#xff09;DDL语句引导词&#xff1a;Create&#xff08;建立&#xff09;、Alt…

SQL Server数据库(创建及管理)

做好学习记录,方便随时查看。^ v ^一、数据库文件:系统数据库+用户数据库 1、系统数据库: 随程序一起安装,用户提供系统所需要的数据的数据库,是SQL Server运行的基础。 1)master数据库(主数据库) 用于记录SQL Server的所有系统级别的信息,若被损坏,SQL Server将无…

SQL Server 创建数据库

使用SQL Server2014创建数据库有两种方法&#xff1a;使用图形化界面创建数据库和使用T—SQL语句创建数据库。 下面就以创建testdb数据库为例 创建一个名字为testdb的数据库&#xff0c;该数据库包含一个数据文件和一个日志文件&#xff0c;逻辑文件名为testdb_data,磁盘文件…

SQL数据库的连接、创建操作

目录&#xff1a; 1、数据库的连接、创建 2、对字段的操作&#xff1a;&#xff08;alter table&#xff09; 3、对数据的操作&#xff08;插入、修改、删除&#xff09; 4、数据查询&#xff08;select&#xff09; 5、多表查询&#xff08;join on&#xff09; 6、约束…

用T-SQL语句创建数据库

点击新建查询&#xff0c;后开始 --创建数据库 create database DBTEST on --数据文件 (nameDBTEST,--逻辑名称filenameD:\data\DBTEST.mdf,--物理路径和名称size5MB,--文件初始大小maxsize100MB,--最大存储空间filegrowth2MB--文件的增长方式&#xff0c;可写大小&#xff0c;…

用 SQL 创建数据库一系列操作(详细举例)

文章目录 创建如下表1.我用的是SQL2008&#xff1b;如图2.点击“新建查询”&#xff0c;如图&#xff1a;3.创建数据库 create Database 数据库名称4.很重要一步&#xff0c;刷新数据库&#xff0c;不然找不见。点住数据库按F5。5.使用当前数据库。6.创建表7.删除表8.查看、修改…

SQL学习笔记——创建数据库和表

一、创建数据库和表 1、创建数据库 打开 SSMS&#xff08;Microsoft SQL Server Management Studio&#xff09;→新建查询→输入如下图的sql语句→点击执行 CREATE DATABASE CPXS ON (NAME CPXS_Data,FILENAME C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER…