spring cloud 分布式项目 基础部分 2
如果有任何疑问,我有任何地方说的不对,欢迎指正 QQ:1286238812 ,谢谢各位哥哥批评指正。 你的批评,会拯救更多的人。
先说5个问题。
1、什么是微服务。
2、什么是服务注册与发现。
服务注册与发现介绍:
1:http://www.cnblogs.com/skyblog/p/4953445.html
2:http://www.jianshu.com/p/c144a577f3d1
3、spring boot 和 spring cloud 的关系。
Spring Cloud是在Spring Boot的基础上构建的,用于简化分布式系统构建的工具集,为开发人员提供快速建立分布式系统中的一些常见的模式。
4、spring cloud config server 和 client 的关系。
一句话的差异就是, server ,就是 client 的配置管理中心。
5、Eureka server 和 client 的关系。
比较基础的,只有 这5个问题。
1 和 2 ,我就不说了,直接从 3开始。
3、spring boot 和 spring cloud 的关系。
spring cloud 项目,肯定是 spring boot 项目,但是反过来不行。
这两者最大的差别,就在于 新建项目之后的 pom.xml 文件中。
**************下面是 spring boot 项目 ****************
新建一个spring boot 项目,会根据选择的版本,生成 pom.xml ,其中有一段代码如下:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.1.RELEASE</version> <!-- 新建的项目,版本不可能是 1.4.1 。我这里的版本是我自己改的 -->
<relativePath /> <!-- lookup parent from repository -->
</parent>
然后,会根据项目的需要,在<dependencies></dependencies> 中,引入其他项目需要的jar包。样例代码如下:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>1.2.3</version>
</dependency>
</dependencies>
新加以来后,maven -->update ,会根据你的maven 下载需要的jar ,可以在 <dependency></dependency> 中,指定版本。
**************spring boot 项目 pom.xml 介绍 end *****************
****************下面 是 spring cloud 项目 的pom.xml 说明。***************************
说一个问题。如果你 的项目,属于 spring cloud 项目。区别就在于 <parent></parent> 这里。
<parent>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-parent</artifactId>
<version>1.0.1.RELEASE</version>
<relativePath/>
</parent>
在一个 parent 属于 org.springframework.boot 的pom.xml 文件中 ,如果 <dependencies ></dependencies > 中,加入了属于 spring cloud 的jar 就是,groupId 是这个的<groupId>org.springframework.cloud</groupId> ,就会报错。
所以,如果 在<dependencies > 有 groupId 属于 .cloud 的,一定是 cloud 项目。
这是我遇到的第一个坑。错误如图下:
如果只看出错信息,会以为是 jar 包找不到,其实不是,是引用的不对。
**********************************org.springframework.cloud 说明 end***************************************************
还有一种情况,你在 pom.xml 中,看到 的< parent> ,不是 org.springframework.boot ,也不是org.springframework.cloud 。(好多博客就是这样的,但是没有说明原因。)
这个,我引用 汪云飞 大大 的代码 demo 解释一下。(如果看不清,可以右键,新标签页打开图片)
some 和好多其他的项目,属于 ch12 的一个子项目, 因此,在ch12 中的pom.xml 指定parent 为org.springframework.cloud ,并在这个 pom.xml 中,引入一些通用性的<dependencies></dependencies> jar 包。
然后,在子项目的pom.xml 中,指定 parent 为 父项目就可以了。也不需要引入跟 父项目相同的 jar ,只需要引入自己需要 的 jar 就可以。
4、spring cloud config server 和 client 的关系。
借用一个图,来描述这个关系,原链接如下:http://blog.csdn.net/linlzk/article/details/53911395
一句话总结,就是 Config server ,是 client 的配置管理中心,两者共同构成了 spring cloud config 。
也就是说,在 多个 client 中,需要使用的 配置文件,无论是重复,还是有差异,都可以放到 server 中进行配置。 统一管理的好处,一个是 配置管理方便,另一个就是,可以通过使用Spring Cloud Netflix Bus ,来对配置进行 不停机刷新。Spring Cloud Netflix Bus 介绍和使用:https://segmentfault.com/a/1190000006226542
5、Eureka server 和 client 的关系。
看这个问题之前,首先要明白,什么是 服务注册和发现。因为 Eureka server ,算是,服务注册发现中心。
而spring cloud 集成了 Eureka ,可以通过注解@EnableEurekaServer ,直接实现 Eureka server ,不需要额外部署 Eureka 服务器。
Eureka server,属于服务注册发现中心,所有的服务,都会在 server 中看到。
client ,属于注册的服务。任何一个项目,都可以作为注册服务,比如 spring cloud config server ,也可以注册服务,到Eureka server 上,client 使用@EnableEurekaClient 注解,并在 bootstrap.yml 或者 application.properties 中进行配置 需要注册的服务端。
持续补充中。