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 项目。
这是我遇到的第一个坑。错误如图下:

spring cloud 分布式项目 基础部分 2


spring cloud 分布式项目 基础部分 2

如果只看出错信息,会以为是 jar 包找不到,其实不是,是引用的不对。

**********************************org.springframework.cloud 说明 end***************************************************


还有一种情况,你在 pom.xml 中,看到 的< parent> ,不是 org.springframework.boot ,也不是org.springframework.cloud 。(好多博客就是这样的,但是没有说明原因。)

这个,我引用 汪云飞 大大 的代码 demo 解释一下。(如果看不清,可以右键,新标签页打开图片

spring cloud 分布式项目 基础部分 2


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

spring cloud 分布式项目 基础部分 2

一句话总结,就是 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 中进行配置 需要注册的服务端。


持续补充中。