开发一个分布式架构的WEB应用系统可能具有很大的挑战性。它的复杂性已从应用程序层转移到网络层(由单一的应用模块发展为多个由网络连接起来的应用模块),并要求网络上各个应用模块之间进行更多的交互。将分布式的应用模块代码之间的交互实现“本地化”要处理12个技术难点,例如外部配置,无状态,日志记录以及连接到后备服务。Spring Cloud项目包含了使应用程序在云中运行所需的各种服务中间组件。

相信大家都有过自学的经历,对于软件技术来讲我是一路从自学走过来已经好多年了,从刚开始的迷茫到逐渐对整个技术体系的明朗经历了很多很多,时至今日,软件技术每天都在飞速的发展可谓之“日新月异”。在小学的时候曾今看到过一本书,书中说到当今社会要树立终生学习的思维,当时感觉很不明白,现在看来确实一语中的,我们每个人在互联网的大潮中确实要每天进行学习,才能跟上时代的步伐。

对于软件行业,学习一门新的技术从我多年自学的经验来看,最好就是从实例开始以“问题驱动”的模式进行学习会起到事半功倍的效果,那么对Spring框架新推出的Cloud框架来说最好的学习方式也是从实例开始。

此时此刻我对SpringCloud来说也是一个门外汉,也是一知半解,为了跟上时代的快速的发展,所有从事软件开发行业的人都需要学习它,那就跟着我的学习轨迹来进行吧,

这里面所有的篇幅都是我自己对于技术的理解和阐释,如果有错误的地方也请多多担待,毕竟Spring Cloud框架对我来说也是一个“初学者”。

接下来我们开始进入学习,对于一门新的技术,刚开始我们大家会有一万个为什么,特别是现在有些技术中的一些翻译过来的“名词”让人听起来云里雾里,完全摸不着头脑,其实大家刚开始的时候完全没必要去理解它的含义,只需要跟着我的思想:从实例开始就可以了!

使用Spring Cloud LoadBalancer进行客户端负载均衡

打开Spring Cloud官方的文档可以看到,官方在示例中给了我们一个这样的例子,让我们按照步骤创建一个使用Spring Cloud LoadBalancer的微服务应用程序,这个例子的功能说到底就是对HTTP请求做了进一步的封装,在客户端和服务端的请求中间又添加了一个处理器,这个处理器的功能就是对请求进一次的处理和分配,最终需要分配到一个服务端中进行处理。首先我们按照如下步骤先来创建这个项目:

JDK1.8及以上版本、Gradle4及以上版本、IntelliJ IDEA集成开发工具

,我使用的是git clone,IntelliJ IDEA可以直接对项目进行git clone,操作顺序如下图所示:

注意最后git clone完毕后IntelliJ IDEA会提示是否创建项目,这时候不要选择是,直接选择否即可,如下图:

三、项目构建使用IntelliJ IDEA导入项目,并等待构建完成;这里需要说明的是,如果你是晚上构建这个项目可能不会成功,因为gradle要到国外的仓库下载相关的jar包,国内晚上对于外网的访问丢包比较严重,所以会很慢最后可能导致项目构建失败(如下图),我第一次构建的时候就是晚上,构建了十几次都没有成功,最后到第二天早上才顺利构建完成

四、源码分析构建完项目后,项目就可以直接运行了,我先不考虑运行,先来看看它的源代码。根据源码可以知道,这个项目中包含了两个模块的功能,分别为:“say-hello”和“user”,首先来看“say-hello”模块的功能:1、打开功能实现代码,路径为:say-hello/src/main/java/hello/SayHelloApplication.java通过查看源码可以了解到此模块的功能为:通过访问URL:“/greeting”,将从三个问候语中随机返回任意一个问候语2、打开配置文件,路径为:say-hello/src/main/resources/application.yml此文件为项目模块的配置文件,查看文件内容可以很容易看懂它的含义,分别设置了项目的名称:say-hello 和项目运行的默认端口号 8090看完了“say-hello”模块的功能后,如果你是一个有开发经验的人,相信很容易就能理解它的功能和实现,即使有些注解我们可能不太了解具体的含义和用处,但是也能大致了解它的用法了。回过头来我们再看第二个模块“user”的功能:1、打开功能实现代码:user/src/main/java/hello/UserApplication.java根据源码大致可以看出来它的功能为:提供访问URL:“/hi”和“/hello”,可以看到它们的代码实现其实是调用到了“say-hello”模块,但是其中使用到了loadBalancedWebClientBuilder类,说到底就是对请求的处理又多了一层的处理,然后再请求到“say-hello”模块做最终的处理。2、打开配置文件可以看到和“say-hello”模块的配置文件大致一样

了解了一些源代码后,我们运行一下程序看一下它的结果状态是否和我们分析的一致,首先单独运行“say-hello”:

通过运行观察“say-hello”运行后每次对它的访问都可以输出内容,但是“user”再多次的访问中,只有三分之一的时候会显示正常的内容,其他时候都会返回一堆英文字符,如下图所示,这是因为“user”项目模块中使用到了负载均衡(Spring Cloud LoadBalancer)的配置,我们需要再对源码进行分析才能让它每次请求都能运行正常

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注