# Fenix's Bookstore后端:以Spring Cloud微服务实现
<GitHubWrapper>
<p align="center">
<a href="https://icyfenix.cn" target="_blank">
<img width="180" src="https://raw.githubusercontent.com/fenixsoft/awesome-fenix/master/.vuepress/public/images/logo-color.png" alt="logo">
</a>
</p>
<p align="center">
<a href="https://icyfenix.cn" style="display:inline-block"><img src="https://raw.githubusercontent.com/fenixsoft/awesome-fenix/master/.vuepress/public/images/Release-v1.svg"></a>
<a href="https://travis-ci.com/fenixsoft/microservice_arch_springcloud" target="_blank" style="display:inline-block"><img src="https://travis-ci.com/fenixsoft/microservice_arch_springcloud.svg?branch=master" alt="Travis-CI"></a>
<a href='https://coveralls.io/github/fenixsoft/microservice_arch_springcloud?branch=master'><img src='https://coveralls.io/repos/github/fenixsoft/microservice_arch_springcloud/badge.svg?branch=master' target="_blank" style="display:inline-block" alt='Coverage Status' /></a>
<a href="https://www.apache.org/licenses/LICENSE-2.0" target="_blank" style="display:inline-block"><img src="https://raw.githubusercontent.com/fenixsoft/awesome-fenix/master/.vuepress/public/images/License-Apache.svg" alt="License"></a>
<a href="https://creativecommons.org/licenses/by/4.0/" target="_blank" style="display:inline-block"><img src="https://raw.githubusercontent.com/fenixsoft/awesome-fenix/master/.vuepress/public/images/DocLicense-CC-red.svg" alt="Document License"></a>
<a href="https://icyfenix.cn/introduction/about-me.html" target="_blank" style="display:inline-block"><img src="https://raw.githubusercontent.com/fenixsoft/awesome-fenix/master/.vuepress/public/images/Author-IcyFenix-blue.svg" alt="About Author"></a>
</p>
</GitHubWrapper>
如果你此时并不曾了解过什么是“The Fenix Project”,建议先阅读<a href="https://icyfenix.cn/introduction/about-the-fenix-project.html">这部分内容</a>。
直至现在,由不同编程语言、不同技术框架所开发的微服务系统中,基于Spring Cloud的解决方案仍然是最为主流的选择。这个结果既是Java在服务端应用所积累的深厚根基的体现,也是Spring在Java生态系统中统治地位的体现。从Spring Boot到Spring Cloud的过渡,令现存数量极为庞大的、基于Spring和Spring Boot的单体系统得以平滑地迁移到微服务架构中,令这些系统的大部分代码都能够无需修改,或少量修改即可保留重用。微服务时代的早期,Spring Cloud就集成了[Netflix OSS](https://netflix.github.io/)(以及Spring Cloud Netflix进入维护期后对应的替代组件)成体系的微服务套件,基本上也能算“半透明地”满足了在微服务环境中必然会面临的服务发现、远程调用、负载均衡、集中配置等非功能性的需求。
笔者个人是一直不太倾向于Spring Cloud Netflix这种以应用代码去解决基础设施功能问题的“解题思路”,以自顶向下的视角来看,这既是虚拟化的微服务基础设施完全成熟之前必然会出现的应用形态,也是微服务进化过程中必然会被替代的过渡形态。不过,笔者的看法如何无关重要,基于Spring Cloud Netflix的微服务在当前是主流,直至未来不算短的一段时间内仍会是主流,而且以应用的视角来看,能自底向上观察基础设施在微服务中面临的需求和挑战,能用我们最熟悉的Java代码来解释分析问题,也有利于对微服务的整体思想的深入理解,所以将它作为我们了解的第一种微服务架构的实现是十分适合的。
## 需求场景
小书店Fenix's Bookstore生意日益兴隆,客人、货物、营收都在持续增长,业务越发复杂,对信息系统并发与可用方面的要求也越来越高。由于业务属性和质量属性要求的提升,信息系统需要更多的硬件资源去支撑,这是合情合理的,但是,如果我们把需求场景列的更具体些,便会发现“合理”下面的许多无可奈何之处:
- 譬如,制约软件质量与业务能力提升的最大因素是人而非硬件。多数企业即使有钱也很难招到大量的靠谱的开发者。此时,无论是引入外包团队,抑或是让少量技术专家带着大量普通水平的开发者去共同完成一个大型系统就成为了必然的选择。在单体架构下,没有什么有效阻断错误传播的手段,系统中“整体”与“部分”的关系没有物理的划分,系统质量只能靠研发与项目管理措施来尽可能地保障,少量的技术专家很难阻止大量螺丝钉式的程序员或者不熟悉原有技术架构的外包人员在某个不起眼的地方犯错并产生全局性的影响,并不容易做出整体可靠的大型系统。
- 譬如,技术异构的需求从可选渐渐成为必须。Fenix's Bookstore的单体版本是以目前应用范围最广的Java编程语言来开发,但依然可能遇到很多想做Java却不擅长的事情。譬如想去做人工智能,进行深度学习训练,发现大量的库和开源代码都离不开Python;想要引入分布式协调工具时,发现近几年ZooKeeper已经有被后起之秀Golang的Etcd蚕食替代的趋势;想要做集中式缓存,发现无可争议的首选是ANSI C编写的Redis,等等。很多时候为异构能力进行的分布式部署,并不是你想或者不想的问题,而是没有选择、无可避免的。
- 譬如,……
微服务的需求场景还可以列举出很多,这里就不多列举了,总之,系统发展到一定程度,我们总能找到充分的理由去拆分与重构它。在笔者设定的演示案例中,准备把<a href="https://icyfenix.cn/exploration/projects/monolithic_arch_springboot.html">单体的Fenix's Bookstore</a>拆分成为“用户”、“商品”、“交易”三个能够独立运行的子系统,它们将在一系列非功能性技术模块(认证、授权等)和基础设施(配置中心、服务发现等)的支撑下互相协作,以统一的API网关对外提供与原来单体系统功能一致的服务,应用视图如下图所示:
<GitHubWrapper>
<p align="center">
<img src="https://raw.githubusercontent.com/fenixsoft/awesome-fenix/master/.vuepress/public/images/springcloud-ms.png" >
</p>
</GitHubWrapper>
## 运行程序
以下几种途径,可以运行程序,浏览最终的效果:
- 通过Docker容器方式运行:<br/>微服务涉及到多个容器的协作,通过link单独运行容器已经被Docker官方声明为不提倡的方式,所以在工程中提供了专门的配置,以便使用<a href="https://icyfenix.cn/appendix/deployment-env-setup/setup-docker.html#安装docker-compose">docker-compose</a>来运行:
```bash
# 下载docker-compose配置文件
$ curl -O https://raw.githubusercontent.com/fenixsoft/microservice_arch_springcloud/master/docker-compose.yml
# 启动服务
$ docker-compose up
```
然后在浏览器访问:[http://localhost:8080](http://localhost:8080),系统预置了一个用户(`user:icyfenix,pw:123456`),也可以注册新用户来测试。
- 通过Git上的源码,以Maven编译、运行:<br/>由于笔者已经在配置文件中设置好了各个微服务的默认的地址和端口号,以便于本地调试。如果要在同一台机运行这些服务,并且每个微服务都只启动一个实例的话,那不加任何配置、参数即可正常以Maven编译、以Jar包形式运行。由于各个微服务需要从配置中心里获取具体的参数信息,因此唯一的要求只是“配置中心”的微服务必须作为第一个启动的服务进程,其他就没有别的前置要求了。具体的操作过程如下所示:
``` bash
# 克隆获取源码
$ git clone https://github.com/fenixsoft/micros
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
资源推荐
资源详情
资源评论
收起资源包目录
基于 Spring Cloud 的微服务架构示例工程,含多种运行及配置方式.zip (207个子文件)
public.cert 458B
public.cert 458B
public.cert 458B
public.cert 458B
mvnw.cmd 7KB
app.13440f960e43a3574b009b7352447f18.css 245KB
app.acff6d0da14b65448084a2639e44b2ef.css 245KB
gitalk.css 26KB
Dockerfile 491B
Dockerfile 462B
Dockerfile 370B
Dockerfile 366B
Dockerfile 366B
Dockerfile 346B
Dockerfile 324B
index.html 563B
gitalk.html 517B
favicon.ico 4KB
maven-wrapper.jar 50KB
PaymentService.java 9KB
JAXRSResourceBase.java 6KB
OAuthClientDetailsService.java 6KB
JWTAccessToken.java 5KB
AuthorizationServerConfiguration.java 5KB
MavenWrapperDownloader.java 5KB
AccountValidation.java 4KB
ResourceServerConfiguration.java 4KB
StockpileService.java 4KB
Payment.java 4KB
AuthenticationServerConfiguration.java 4KB
CommonResponse.java 4KB
ProductResource.java 3KB
PreAuthenticatedAuthenticationProvider.java 3KB
UsernamePasswordAuthenticationProvider.java 3KB
JWTAccessTokenService.java 3KB
PaymentApplicationService.java 3KB
Account.java 3KB
AccountResource.java 3KB
Product.java 3KB
AccountRepository.java 3KB
AuthenticAccount.java 3KB
PaymentResource.java 3KB
WalletService.java 3KB
RSA256JWTAccessToken.java 3KB
ProductResourceTest.java 3KB
PaymentResourceTest.java 2KB
JerseyConfiguration.java 2KB
StockpileResource.java 2KB
ProductService.java 2KB
ProductServiceClient.java 2KB
SettlementValidator.java 2KB
CodedMessage.java 2KB
Stockpile.java 2KB
SettlementResource.java 2KB
Settlement.java 2KB
AccountResourceTest.java 2KB
AuthenticAccountDetailsService.java 2KB
Specification.java 2KB
ProductApplicationService.java 2KB
ViolationExceptionMapper.java 2KB
Wallet.java 2KB
NotConflictAccount.java 2KB
AccountApplicationService.java 2KB
Encryption.java 2KB
Advertisement.java 2KB
AuthenticatedAccount.java 2KB
UniqueAccount.java 2KB
StockpileApplicationService.java 2KB
AdvertisementResource.java 2KB
ExistsAccount.java 2KB
SufficientStock.java 1KB
BaseExceptionMapper.java 1KB
ProductServiceClientMock.java 1KB
FeignConfiguration.java 1KB
Purchase.java 1KB
WarehouseApplication.java 1KB
AccountApplication.java 1KB
BaseEntity.java 1KB
AuthenticAccountRepository.java 1KB
AuthResourceTest.java 1KB
CacheConfiguration.java 1KB
ProductRepository.java 1KB
WalletRepository.java 1KB
AdvertisementRepository.java 1KB
Role.java 1KB
PaymentRepository.java 1KB
HS256JWTAccessToken.java 1KB
RSA256PublicJWTAccessToken.java 1KB
AccessDeniedExceptionMapper.java 1KB
StockpileRepository.java 1KB
DBRollbackBase.java 1KB
AccountServiceClientMock.java 1023B
Item.java 951B
CacheRepository.java 891B
WebSecurityConfiguration.java 830B
AccountServiceClient.java 794B
SecurityApplication.java 693B
GatewayApplication.java 657B
PaymentApplication.java 611B
RegistryApplication.java 582B
共 207 条
- 1
- 2
- 3
资源评论
pk_xz123456
- 粉丝: 2172
- 资源: 1840
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功