扯皮
可能是生在一个好年代的原因所以不清楚这些的来之不易,就像吃米饭长大的我们不知道爷爷那个吃树皮的年代
只知道用起来就一个字 真香
记得webService吗?当需要调用另一个服务的时候需要使用一堆命令生成一堆类然后把这堆类放到你的代码中
你才能调用。为什么要说'才'?明明听上去很简单的样子为啥不说'就'??
这只是一个让SpringCloud项目跑起来的文档,所以我就不过多装逼了(俺也暂时只到这个地步)
关于各个工程的介绍和建议
1、parent 介绍: 父工程主要负责版本控制,cloud是多个工程组成的项目,而每个工程都得导入一些必要的依赖,
而每个工程的依赖需要保持一致,可以使用父工程来控制版本
因为父工程仅仅只做版本控制,所以打包时只需要将其打包为pom文件即可
角色:无
打包方式:pom
2、eureka 介绍:俗称注册中心,可以想象成一个本子上面记录的是某服务的提供者有什么功能。
比如服务的提供者A去注册了一下说我会算1+1,然后注册中心的本子上就记录了A能提供计算1+1的功能
然后服务的调用者B就能去调用A提供的1+1的方法
角色:无
打包方式:jar
3、common 介绍:公共工程,用于放入实体类,工具类的工程,只需要一个java目录不需要resources目录
其他工程需要引入这个工程
角色:无
打包方式:jar
4、ucenter*n 介绍:就是userCenter就是用户中心,随便叫啥都行,作为一个服务的提供者
为什么乘n,因为服务的提供者可以有n个
角色:生产者
打包方式:jar
5、webbase*n 介绍:名字也是随便起的,反正就是一个服务的调用者,服务的调用者也可以是n个所以乘n
角色:消费者
打包方式:jar
这次是和以前一样使用maven骨架创建web工程一样的,使用Spring Initializr创建总是连接异常
区别:骨架需要手动创建java、resources 并且手动Mark Directtory as和手动创建配置文件
而Spring Initializr创建全自动就有了
重点:主要是pom文件依赖导入完整,那种方式创建都无所谓
!!:同级是为了好看
new Project
完整的pom
4.0.0
com.zongyi
demo-parent
1.0-SNAPSHOT
pom
UTF-8
UTF-8
1.8
Finchley.RC2
2.0.2.RELEASE
org.springframework.cloud
spring-cloud-dependencies
${spring-cloud.version}
pom
import
org.springframework.boot
spring-boot-dependencies
${spring-boot.version}
pom
import
spring-milestones
Spring Milestones
https://repo.spring.io/milestone
false
new Module(new Project也行只是路径问题,new Module方便些)
删除src下的main下的webapp文件 因为不需要
然后新建1.main/java 2.main/resources test不需要(建不建无所谓)
建好以后 Mark Directtory as -->
然后在java下新建一个包 通常为groupId 在包下放启动类,
注意:启动类不能直接放在src下面
接下来添加依赖和添加配置文件
最后是启动类的main方法
完整的demo-eureka.pom
4.0.0
demo-parent
com.zongyi
1.0-SNAPSHOT
../demo-parent/pom.xml
demo-eureka
jar
org.springframework.cloud
spring-cloud-starter-netflix-eureka-server
完整的配置文件
spring:
application:
name: demo-eureka #工程名(在注册中心的页面看到的名字)
server:
port: 9990 #端口号
eureka:
client:
register-with-eureka: false #是否注册(eureka本身就是注册中心所以自己就不注册了)
fetch-registry: false #是否获取注册信息
service-url:
defaultZone: http://localhost:9990/eureka/ #其他项目注册时使用这个
instance:
prefer-ip-address: true
server:
enable-self-preservation: false #(默认true;此处设为false,关闭自我保护机制,主动剔除故障的节点)
eviction-interval-timer-in-ms: 5000
注册中心就搞定了运行启动类,然后http://127.0.0.1:9990/ 出现下面页面就是了
这个工程用Spring Initializr创建
注意:!结构都一样,只是有些东西自动生成了
还是要注意路径问题 ,他们是同级的
自动生成的pom中父工程是SpringBoot要改成自己的parent
还有就是自动导的依赖删掉
完整的demo-ucenter.pom
4.0.0
demo-parent
com.zongyi
1.0-SNAPSHOT
../demo-parent/pom.xml
com.zongyi
demo-ucenter
0.0.1-SNAPSHOT
demo-ucenter
Demo project for Spring Boot
org.springframework.cloud
spring-cloud-starter-netflix-eureka-server
org.springframework.cloud
spring-cloud-starter-openfeign
org.springframework.boot
spring-boot-starter-test
test
完整的配置文件yml(整个复制上一个工程的就行,需要改端口号和是否注册)
spring:
application:
name: demo-ucenter #工程名(在注册中心的页面看到的名字)
server:
port: 9991 #端口号
eureka:
client:
register-with-eureka: true #是否注册(服务的提供者是需要注册到注册中心的) 默认就是true
fetch-registry: true #是否获取注册信息
service-url:
defaultZone: http://localhost:9990/eureka/ #这里和注册中心的一样就能注册到注册中心
instance:
prefer-ip-address: true
运行启动类,然后http://127.0.0.1:9990/ 出现下面页面就是了
创建步骤和上面的一样可以使用maven骨架或者Spring Initializr都可以
最后改pom文件就行 改pom 改pom 改pom
我的Spring Initializr不好使 我用maven骨架
初步工程结构
依赖和配置文件复制上一个工程的就行,需要改端口号和工程名
运行启动类,然后http://127.0.0.1:9990/ 出现下面页面就是了
webbase创建好 简单的测试一下 webbase调用ucenter
1、在ucenter(生产者|服务的提供者)工程中创建controller和Springboot的controller一样
2、在webbase(消费者|服务的调用者)工程中创建接口(没有实现|不需要实现) 我管它叫service
3、在webbase工程中写一个controller并注入那个接口,
4、重启工程测试(修改了哪个重启哪个,注册中心一直启动着别关也不需要重启)
http://127.0.0.1:9992/webTestController/test?name=zongyi
至此SpringCloud已经测通
但是
工程与工程之间只传递简单的字符串肯定不满足需求的啊
但是呢他们又只能传递字符串
那咋办 JSON啊,这些SpringCloud其实都自动解决了
那问题是两个工程之间传递的JSON最后都得转换为一个对象啊,
A工程有的类B工程可能没有啊,如果有那就是A和B工程有了两个一毛一样的类?代码都是复制的?
所以common就出现了啊