一、开始使用Spring Cloud实战微服务
1、SpringCloud是什么?
云计算的解决方案?不是
SpringCloud是一个在SpringBoot的基础上构建的一个快速构建分布式系统的工具集(全家桶)。
SpringCloud拥有SpringBoot的特点。
2、关于SpringCloud的版本?
大部分spring软件的版本是以:主版本.次版本.增量版本.里程碑版本的形式命名。
Spring Cloud Angel SR6???
Angel是SpringCloud的一个大版本,Service Release6版本,标识一个bug修复的版本。
3、SpringCloud的特点?
1)、约定优于配置
2)、开箱即用、快速启动
3)、适用于各种环境(PC Server、云环境、Subtopic、容器Docker)
4)、轻量级的组件(如服务发现中整合的Eureka)
5)、组件支持很丰富、功能很齐全(如提供配置中心、注册中心、智能路由…)
6)、选型中立(服务发现中使用Eureka、Zookeeper、Consul等都可以)
二、需要的技术储备
1、java(scala、Groovy…均可)
2、构建工具
1)、Maven
2)、Gradle
将maven项目转换成gradle项目:(在pom文件的上一级目录执行如下命令,使用cmd操作)
gradle init --type pom
3)、SpringBoot:http://cnblogs.com/mmzs/category/1192166.html
三、使用的软件版本
1、原则:使用最新的版本进行讲解
2、JDK 1.8
3、Maven 3.3.9
4、IDE(Spring Tool Suite 3.8.2、IDEA、Eclipse)
5、Spring Boot
6、SpringCloud Camden SR1
建议:大家学习时,尽量使用相同的版本进行选择,避免采坑
四、创建工程
1、创建调用关系的微服务
创建存在调用关系的微服务,调用关系如下
![302d2181aa7bae558f566072b9c73c38.png](https://i-blog.csdnimg.cn/blog_migrate/73dfce3007b646fee4a7d1e1df01b5f1.jpeg)
服务消费者:服务的调用方,调用别的微服务的微服务(即:依赖其他服务的服务)
服务提供者:服务的被调用方,提供API的微服务(即:为其他服务提供服务的服务)
2、编写一个服务提供者
登陆:http://start.spring.io/
填写信息:
![5301a41494f0b1136f27960ed1f49cfb.png](https://i-blog.csdnimg.cn/blog_migrate/c6c6a227a83a7d00b8095701132dad81.jpeg)
(1)、将生成的maven工程导入eclipse
然后一次创建如下选中的类和配置文件。
![2afa94114f7353d447eda781bdf73f3c.png](https://i-blog.csdnimg.cn/blog_migrate/590455c80f439054aee2512ab78b341e.jpeg)
(2)、data.sql和schema.sql
data.sql
schema.sql
(3)、配置文件application.yml
schema.sql
(4)、创建UserController
UserController
(5)、创建UserRepository
UserRepository
(6)、创建实体类User
User
注:此处采用的是jpa,使用的是h2数据库,如果访问时出现实体类转化json格式错误,则需要在实体类前面加上如下这句注释:
@JsonIgnoreProperties(value = { "hibernateLazyInitializer", "handler" })
错误提示:disable SerializationFeature.FAIL_ON_EMPTY_BEANS
(7)、执行MicroserviceSimpleProviderUserApplication类,然后进行访问测试
![053181262afe51533169f916019e28cf.png](https://i-blog.csdnimg.cn/blog_migrate/09657e29c56614b863b6e930dcd670ce.jpeg)
3、编写一个服务消费者
登陆:http://start.spring.io/
填写信息:
![c05a666002b9a72287c6745082677bc8.png](https://i-blog.csdnimg.cn/blog_migrate/4acf82f3a2078b329f5f75bf4e3af8c7.jpeg)
(1)、将生成的maven工程导入eclipse
然后一次创建如下选中的类和配置文件。
![c88a6912d8da2bbbeea5c26253f0457f.png](https://i-blog.csdnimg.cn/blog_migrate/034cda36283afb46408d95dcd9628bbb.jpeg)
(2)、配置文件application.yml
server:
port: 6901
(3)、创建GoodsController
GoodsController
(4)、创建实体类User
User
(5)、在MicroserviceSimpleConsumerGoodsApplication类中注入Bean
其中11-16行表示注入的Bean
MicroserviceSimpleConsumerGoodsApplication
(5)、执行MicroserviceSimpleConsumerGoodsApplication类,然后进行访问测试
![589f0730a484692f18b69dd6ab61111d.png](https://i-blog.csdnimg.cn/blog_migrate/92a36d5697006c27ca793a257b606992.jpeg)
4、小小优化一下
主要优化的点是在GoodsController类中的硬编码部分。简单优化如下:
@RestController
public class GoodsController {
@Autowired
private RestTemplate restTemplate;
//优化部分
@Value("${user.userServicePath}")
private String userServicePath;
//优化后此处的硬编码字符串,修改为变量获取
@GetMapping("/goods/{id}")
public User findById(@PathVariable Long id) {
//采用了硬编码注册user服务
return this.restTemplate.getForObject(this.userServicePath + id, User.class);
}
}
这样子的话,userServicePath的具体值需要通过配置文件application.yml来配置,故application.yml文件修改为:
server:
port: 6901
# 优化部分
user:
userServicePath: http://localhost:6900/user/
注: 其实这样子的优化也不是很好,因为当微服务过多时,层层调用,需要修改的部分也会越来越多,不便于维护和修改。具体措施,详见下回分解。