什么是spring cloud ?
- 就是一种开发工具,针对云开发或者微服务架构的实现提供一套简单的开发方式。
- 实现基础就是spring boot
- spring cloud中包含很多子库:比如即将使用的spring cloud netfilx
- spring cloud netfilx中包含很多工具:
- Eurekr---->服务注册于发现
- ribbon---->负载均衡
- zuul--->服务路由和过滤
服务注册与发现
- what
系统中有很多微服务都能独立部署、独立维护、独立扩展。但是各个微服务之间相对比较独立,那么他们之间如果想要互相调用api,就必须知道对方是谁,以及如何才能访问的到。因此使用Eureka搭建一个服务注册服务器,这样每个在系统中的微服务就可以在服务注册服务器上注册。注册之后,各个服务之间就可以通过注册的service id进行通信
- how
- 前面提到spring cloud基于spring-boot,因此构建spring-boot服务器之后只需要简单的添加注解修改config即可完成服务注册服务器的实现
- 在主运行类上添加注解@EnableEurekaServer表明该类是一个服务注册服务器
- 然后对这个springboot项目进行配置在application.propertises中
- eureka.client.register-with-eureka:意思是将当前的服务注册服务器,作为一个普通服务器注册到自身。一般选择false,没必要注册自己
- fetchRegistry:表示是否从eureka服务器获取注册信息,一般选择false(其实这个属性我也不太理解就看大家都选择false)
- eureka.client.serviceUrl.defaultZone:非常重要,设置当前服务注册服务器的地址(为了其他服务器想要注册的时候能够找到服务注册服务器的地址)
demo中的问题
- 发现启动服务注册服务器的时候,现由于没有办法解析引入@EnableEurekaServer而出现的错误导致无法启动?
- 注释掉注解发现可以启动,经过和提供的demo比对发现,在pom.xml中,一旦替换spring Boot的版本就可以启动服务,但是在网上搜索竟然没有发现有人提出这个注解的bug,可能是新的版本中替换了注解
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.6.RELEASE</version> <relativePath/> <!--1.5.6版本一旦被替换成1.3.5.RELEASE就可以正常启动--> </parent>
- 改了版本之后发现仍然不能启动,很明显的报错
Some problems were encountered while processing the POMs'dependencies.dependency.version' for org.springframework.cloud:spring-cloud-starter-zuul:jar is missing.
发现是pom里面的问题 - 但是查看dependencies之后发引入了这两个
<dependency>
<groupId></groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId></groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency> <!--说明包具备完全-->
我搜索官网后看到他推荐使用他给我们配好的pom.xml,发现我们少了dependencyManagement
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Brixton.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
官网也说了The depednencies POM is the one you can use as a BOM for dependency management
心得
- 以后学习新的技术还得边写边看,因为看文档的时候感觉简单但是只有真的跟着写之后才发现原来根本运行不了。
- 使用英文文档!!使用英文文档更加需要边写变看,因为英文不认识会漏掉重点!!