SpringCloud框架搭建的项目如何实现一个模块调用另一个模块的服务
简介
基于SpringCloud框架搭建的项目,不同模块之间是无法调用各自的服务的,但是经常我们需要使用这样的模式去开发,那么如何实现不同模块之间的服务调用呢?
准备
1.在需要调用其他模块服务的项目中创建一个package包,里面定义三个类,如下图
MemberClient可以随意命名,但是下面的两个尽量保持一致,其中三个类的代码分别是:
MemberClient:
package com.yuwan.qiniuvideo.client;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
@FeignClient(name="member")//book 是service id指明调用的是book这个服务里的接口,再往后所有有关book服务的接口调用都在这里面写
/*Feign 默认就有支持Ribbon 负载均衡,我们只需要不熟多个book微服务就可以了,客户端可以自动轮询选择调用*/
public interface MemberClient {
@GetMapping("/selectMemberInfo")
public RestResult getInfo(@RequestParam("id") Long id);
//如果是 postmapping 的话接受参数 就是用@Requestbody 用map 接参 (@Requestbody Map reqest)
}
注意:
此时发现@FeignClient(name=“member”)中的@FeignClient注解爆红,那是因为没有导入jar包,导入如下jar包即可:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
在MemberClient类中的@FeignClient(name=“member”),name属性对应的值就是被调用服务所在的模块,例如本文档是video模块调用member模块的服务,故name属性对应的是member,类中的@GetMapping("/selectMemberInfo")对应的就是被调用模块中的服务路径(服务的路径暴露在controller层即可),可以按照自己的要求去书写此服务内容。
MemberDTO:
package com.yuwan.qiniuvideo.client