SpringCloud实现一个模块调用另一个模块的服务
简介
基于SpringCloud框架搭建的项目,不同模块之间是无法调用各自的服务的,但是经常我们需要使用这样的模式去开发,那么如何实现不同模块之间的服务调用呢?
准备
1.在需要调用其他模块服务的项目中创建一个package包,里面定义三个类,如下图
在要调用别的模块的模块加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
在启动类添加注解
@EnableFeignClients //启用Feign客户端
package com.yuwan.qiniuvideo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients//启用Feign客户端
public class VideoApplication {
@Bean
@LoadBalanced//对restTemplate进行负载均衡
public RestTemplate restTemplate () {
return new RestTemplate();
}
public static void main(String[] args) {
SpringApplication.run(VideoApplication.class, args);
}
}
创建接口
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)
}
然后在控制层创建MemberClient就可以调用了