文档章节

微服务框架Spring Cloud介绍 Part2: Spring Cloud与微服务

S
 Sunny_kaka
发布于 2016/09/02 09:45
字数 1866
阅读 1085
收藏 73

之前介绍过微服务的概念与Finagle框架, 这个系列介绍Spring Cloud.

Spring Cloud还是一个相对较新的框架, 今年(2016)才推出1.0的release版本. 虽然Spring Cloud时间最短, 但是相比我之前用过的Dubbo和Finagle, Spring Cloud提供的功能最齐全.

Spring Cloud完全依赖于Spring Boot, 我先简单介绍下Spring Boot. Spring Boot是Pivotal在Spring基础上推出的一个支持快速开发的框架. 如果是新项目, 建议基于Spring Boot而不是Spring. 以前使用Spring的项目, 需要自己指定一大堆项目依赖, 例如依赖Spring Core, Spring MVC, Mybatis等等, Spring Boot将这些依赖都模块化好了, 你不再需要自己手动去添加多个依赖项. 另外Spring Boot默认内嵌了一个Servlet容器, 你的页面可以直接通过main方法启动访问了, 不再需要部署到单独的应用服务器中, 这样应用的开发调试都会方便很多. Spring Boot的这些特点使得它比较适合用来做微服务的基础框架, 但是要开发一个完整的微服务系统可不仅仅是从命令行启动一个web系统这么简单. Pivotal看到了这点, 推出了Spring Cloud.

Spring Cloud基于Spring Boot, 由众多的子项目组成. 例如Spring Cloud Config是一个中心化的配置管理服务, 用来解决微服务环境下配置文件分散管理的难题, Spring Cloud Stream是一个消息中间件抽象层, 目前支持Redis, Rabbit MQ和Kafka, Spring Cloud Netflix整合了Netflix OSS, 可以直接在项目中使用Netflix OSS. 目前Spring Cloud的子项目有接近20个, 如果要使用Spring Cloud, 务必先将子项目都了解一遍, 得知道哪些功能Spring Cloud已经提供了, 避免团队花费大量时间重复造轮子.

Spring Cloud是伴随着微服务的概念诞生的. 毫无疑问, 微服务真正落地是一项艰巨的任务. 不但是技术的变革, 也是开发方式的转变. 仅仅依靠Dubbo或Spring Cloud开发几个互相调用的服务不能算做是微服务. 一个合格的微服务系统必然包括从设计(从业务层面划分服务, 独立数据库), 到开发(选用合适的架构和工具, 解决CAP问题), 到测试(持续集成, 自动化测试), 到运维(容器化, 服务监控, 服务容错)的一系列解决方案.

我这个系列的博客就是介绍如何借助Spring Cloud和Netflix OSS, 来解决上面提到的问题. 之后的博客主要会涉及下面这些技术:
使用eureka和Netflix Ribbon进行服务注册和服务发现
使用Spring Cloud Stream, zookeeper和kafka实现分布式事务
使用hystrix实现服务隔离, 并且用hystrix dashboard和turbine监控hystrix服务
使用Spring MVC和Swagger实现REST API
使用Spring Cloud Config实现配置集中管理
使用Spring Cloud Sleuth与Zipkin实现服务监控
...

内容比较多, 我会分成多篇博客. 我不想泛泛地谈概念, 这样有点无趣, 对实际工作也起不到什么帮助. 我为演示这些技术的使用, 搭建了一个项目: mysteam. 我选择了一个简单的问题域, 电商系统里最基础的下单功能. 围绕下单功能, 系统拆分成了五个服务:
用户服务(user service)
账户服务(account service)
产品服务(product service)
优惠券服务(coupon service)
订单服务(order service)
下面是mysteam的架构示意图: mysteam架构示意图 我们的关注点主要在Backend Services和MQ, MySQL这一部分. 服务之间通过Rest API和事件进行通信. Rest API主要用来进行一些只读等不需要事务的操作, 涉及事务的操作一般使用事件来完成. 具体怎么做后面有专门的博客来介绍.

首先, 让我们来个Hello World, 先介绍如何将mysteam下载下来并启动. 一旦涉及微服务, 项目结构和环境都会比较复杂, 我已经尽量简化了, 请系好安全带: )

####1. 环境准备 JDK 8+
MySQL
kafka 0.8.22
zookeeper (可以下载, 也可以直接使用kafka自带的zookeeper)
Intellij IDEA或Eclipse (这个项目结构比较复杂, IDE能起到很大帮助)

####2. 从GitHub上下载项目 需要下载两个项目:
mysteam
mysteam-config-repo
mysteam是主项目, mysteam-config-repo是配置文件存放仓库, 后面讲Spring Cloud Config的时候会用到.

####3. 修改配置文件 ######1. 修改配置文件读取路径 假设你的mysteam-config-repo项目存放路径是D:/mysteam-config-repo, 打开$YOUR_PATH/mysteam/config/src/main/resources/application.yml, 找到uri: https://github.com/sunnykaka/mysteam-config-repo这一行, 替换为uri: file:///D:/mysteam-config-repo.(如果你是linux系统, 并且mysteam-config-repo项目存放路径是/home/my/mysteam-config-repo, 则改为uri: file:///home/my/mysteam-config-repo).

######2. 修改kafka和zookeeper地址 打开$YOUR_PATH/mysteam/config/src/main/resources/application.yml, 将brokers: 192.168.239.129:9092,192.168.239.129:9093,192.168.239.129:9094修改成你的 kafka地址, 将zkNodes: 192.168.239.129:2181修改成你的zookeeper地址. 打开$YOUR_PATH/mysteam-config-repo/application.yml, 同样, 将brokers: 192.168.239.129:9092,192.168.239.129:9093,192.168.239.129:9094修改成你的 kafka地址, 将zkNodes: 192.168.239.129:2181修改成你的zookeeper地址.

######3. 修改MySQL数据库地址 进入$YOUR_PATH/mysteam-config-repo目录, 打开account.yml, coupon.yml, order.yml, product.yml, user.yml这几个文件, 找到datasource的配置, 将数据库的ip地址和端口, 以及用户名和密码修改成你的配置.

######4. 初始化数据库 数据库初始化文件是$YOUR_PATH/mysteam/docs/init_database.sql. 执行方法(假设你的mysteam目录是D:/mysteam, 数据库在本机3306, 用户名密码都是root):

cd D:/mysteam
mysql -uroot -proot < docs/init_database.sql

执行完成之后, 进入数据库应该可以看见5个数据库已经初始化好了.

####5. 启动Eureka服务, Config服务, 并运行测试. 主要介绍如何在IDE中启动服务. 因为Eureka和Config服务被其他服务使用, 所以要首先启动这两个服务. 其中Eureka服务要最先启动. ######1. 启动Eureka服务, 运行在1111端口 打开$YOUR_PATH/mysteam/eureka/src/main/java/com/akkafun/eureka/EurekaApplication.java, 直接运行main方法. ######2. 启动Config服务, 运行在8888端口. 打开$YOUR_PATH/mysteam/config/src/main/java/com/akkafun/config/ConfigApplication.java, 直接运行main方法. ######3. 运行EventBusTest测试. 打开$YOUR_PATH/mysteam/user/core/src/test/java/com/akkafun/common/event/service/EventBusTest.java, 运行junit测试.

这个测试的运行时间稍长, 在我机器上需要3分钟左右. 如果测试全部通过, 代表环境OK了. 如果运行报错, 则检查下前面的步骤看看问题出在哪儿. 特别关注下kafka和zookeeper的服务是不是启动了, 并且ip是否正确.

下一篇我会介绍mysteam的maven项目结构, 以及实现用户注册功能.

© 著作权归作者所有

S
粉丝 29
博文 1
码字总数 1866
作品 0
朝阳
私信 提问
加载中

评论(7)

__loong
__loong
话说下一步呢?
__loong
__loong
谢谢分享
aspboy
aspboy
很好
行者无疆
行者无疆
alexon
alexon
不错
开源中国CAO
开源中国CAO
good
freehacker
freehacker
nice
SpringCloud--鸿鹄Cloud分布式微服务云系统

简介 鸿鹄云Cloud是基于SpringCloud来封装的,是一系列框架的有序集合。利用Spring Boot的开发模式简化了分布式系统基础设施的开发,如服务发现、注册、配置中心、消息总线、负载均衡、断路器...

itcloud
2018/07/25
0
0
Spring Cloud-honghu Cloud分布式微服务云系统

简介 鸿鹄云Cloud是基于SpringCloud来封装的,是一系列框架的有序集合。利用Spring Boot的开发模式简化了分布式系统基础设施的开发,如服务发现、注册、配置中心、消息总线、负载均衡、断路器...

itcloud
2018/04/25
0
0
跟上时代学Springcloud之介绍(1)

1、概念 Springboot是一个快速开发框架,那Springcloud就是多个springboot框架的有序集合,基本和dubbo的功能差不多。 2、版本号 每一个Springcloud的版本号都对应一个Springboot的版本,至关...

木九天
2018/12/29
0
0
Spring Cloud-Honghu Cloud分布式微服务云系统(一)

简介 鸿鹄云Cloud是基于SpringCloud来封装的,是一系列框架的有序集合。利用Spring Boot的开发模式简化了分布式系统基础设施的开发,如服务发现、注册、配置中心、消息总线、负载均衡、断路器...

明理萝
2018/09/07
0
0
SpringCloud学习资料大全

此篇文章主要整理一些优秀的博客及别人已经整理好的脚手架项目,帮助想用sc(spring cloud简称sc,后文同)而又无处下手的小白快速使用这个高(diao)大(zha)上(tian)的微服务框架。當然...

jackcooper2015
2017/08/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

利用mybatis generator生成实体类、Mapper接口以及对应的XML文件

项目中通常会遇到数据的持久化,如果是采用mybatis的orm,就会涉及到生成xml的问题,刚好mybatis官网提供了这么个插件MyBatis Generator,效果简直是棒呆。 1. 首先需要在build.gradle文件中...

啊哈关关
今天
2
0
SpringSocial相关的知识点

使用SprigSocial开发第三方登录 核心类 ServiceProvider(AbstractOauth2ServiceProvider):主要负责实现server提供商(例如QQ,微信等共有的东西),默认实现类是AbstractOauth2ServiceProvider...

chendom
今天
2
0
Java并发之AQS详解

一、概述   谈到并发,不得不谈ReentrantLock;而谈到ReentrantLock,不得不谈AbstractQueuedSynchronizer(AQS)!   类如其名,抽象的队列式的同步器,AQS定义了一套多线程访问共享资源...

群星纪元
昨天
2
0
Fabric-sdk-java最新教程

Fabric Java SDK是Fabric区块链官方提供的用于Java应用开发的SDK,全称为Fabric-sdk-java,网上可用资料不多,本文列出了精心整理的针对Fabric Java SDK的最新精选教程。 如果希望快速掌握F...

汇智网教程
昨天
3
0
react 子组件监听props 变化

componentWillReceiveProps //已经被废弃 getDerivedStateFromProps// 推荐使用//如果条件不存在必须要返回null static getDerivedStateFromProps(props, current_stat...

一箭落旄头
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部