专辑目录:SpringCloud学习日志
(之后我贴代码比较少,更多是截图说明,因为会上传源码包)
先前搭建的项目都是一个服务一个项目,因为还没有涉及到实体类所以好像没什么问题。
但是一旦涉及到实体类,分开存放意味着要拷贝多份实体类这显然不利于开发和维护。
所以这回我们来搭建一个比较完善的项目结构。
如图结构,首先新建一个Maven项目,取名为parents,package 设为pom,用来作为根项目。
然后在parents下新建一个Module,取名为api-service,package设为pom,用来存放接口项目。
然后在api-service下新建两个Module,取名为api-member-service和api-order-service,package设为jar,用来存放会员接口类和订单接口类。
然后在parents下新建两个Module,取名为api-service-member-impl和api-service-order-impl,package设为jar,用来存放会员实现类代码和订单接口类代码。
package的设定总结起来就是末端jar,其他都是pom。根据需要来建Module,我这里只是举例member和order。
最后把上篇的springcloud2-eureka-server复制一份用import Module的方式导进来(不导进来放在新的窗口运行也行)。
项目都是新建的,parents的pom.xml如下设置:
4.0.0
com.study
parents
1.0-SNAPSHOT
api-service
api-service-member-impl
api-service-order-impl
pom
org.springframework.boot
spring-boot-starter-parent
2.0.1.RELEASE
org.springframework.cloud
spring-cloud-dependencies
Finchley.M7
pom
import
org.springframework.boot
spring-boot-starter-web
org.springframework.cloud
spring-cloud-starter-netflix-eureka-server
org.springframework.cloud
spring-cloud-starter-openfeign
org.projectlombok
lombok
spring-milestones
Spring Milestones
https://repo.spring.io/libs-milestone
false
org.springframework.boot
spring-boot-maven-plugin
其实也是从其他原来的工程里拷贝过来,加了Lombok而已。如果没有安装Lombok的还要自己百度一下如何安装了。或者你不用Lombok,它只是自动帮你写了get、set、toString而已,从下图可以看到,我只是加了个@Data,它隐藏式的帮我实现了几个常用的方法,如果不用Lombok就自己右键生成。
parents 就不用动了。接下来我们在member-service 定义一个接口,在member-impl 实现它,如何通过Controller访问。
上图实体类User已经展示了,非常简单,只加了名字和年龄。下面贴一下接口的代码图片。
一般来说接口是不需要@RequestMapping的,但是为了方便后面使用Feign,在这里先加上。注意看左边项目结构,不要建错位置。
然后如上图在member-impl建一个impl实现类,其实这里和普通的springboot开发没什么区别,就是controller而已。这里我们只是测试一下能不能用controller的方式直接访问。当然这里会报错,因为不是同一个工程,member-impl访问不到service-member的类,这时我们需要在member-impl加入service-member的依赖。
写一个启动类AppMember,这里还用不到@EnableFeignClients,但是后面要用到所以先加上也没关系。
然后yaml配置应该不用多说了。
先启动AppEureka,然后再启动AppMember。浏览器验证。
好,测试通过!至于为什么浏览器把它当做xml好像也不重要。
接下来我们用引入Feign了。仍然是order调用Member。
order一样需要先有接口
然后也要和member-impl一样,先在pom.xml加上order-service的依赖。
接着在我们要和上篇那样使用feign来进行RPC调用的话。首先要有Feign接口。
然而这是在order-impl项目中,要继承member-service的接口,还得引入member-service的依赖
因为在MemberService中已经定义了getMemberByName方法,而且还加了RequestMapping注解,所以里继承之后就不需要写了,节省了代码。
然后就和上篇差不多了。
通过autowired自动注入feign,然后调用。启动类和yaml也不用我贴出来了吧。按顺序依次启动。
我们在浏览器测试一下
可以看到,成功的从order调用了member的方法。但是name和上篇一样拿不到。
这是因为springmvc的缘故,我们在member的接口和实现类上加上@RequestParam就可以了
记住,接口和实现类都要加,而且必须填value ,不然会报错或者无效。