4. openfeign远程调用模块
4.1. 快速集成OpenFeign
在cloud-api的pom.xml中引入
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
新建df.zhang.api
包,api包提供项目下所有RPC接口,引导feign扫描包时,亦可指定包前缀为df.zhang.api
,以便快速扫描。
添加UserApi
,并提供根据用户名获取用户信息的接口。
import df.zhang.base.BaseApi;
import df.zhang.base.pojo.ApiResult;
import df.zhang.api.dto.output.UserOutputDTO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;
/**
* 管理后台的用户模块远程调用接口。该接口由管理后台应用实现。
*
* @author df.zhang Email: 84154025@qq.com
* @date 2019-04-22
* @since 1.0.0
*/
@FeignClient(value = "user-api", url = "http://localhost")
public interface UserApi extends BaseApi {
/**
* 根据用户名获取用户信息,该用户信息包含密码。用于鉴权模块的用户登录。
*
* @param username 用户名
* @return df.zhang.base.pojo.ApiResult<df.zhang.api.dto.output.UserOutputDTO>
* @date 2019-04-22 00:30
* @author df.zhang
* @since 1.0.0
*/
@GetMapping("user")
ApiResult<UserOutputDTO> getByUsername(@RequestParam("username") String username);
}
在类UserApi
上添加@FeignClient
注解,标明这是一个远程服务,指定服务名称、URL(截止目前尚未使用到eureka服务发现框架);
在方法getByUsername
添加@GetMapping
注解,标明为openfeign将使用HTTP-GET请求的方式调用远程服务接口。注解基于spring-webmvc,即openfeign支持spring-webmvc的web注解配置。
要点:
- 非对象接收参数,应使用注解
@RequestParam
并指定参数名称(value or name); - 参数为对象的,须使用注解
@PostMapping
,openfeign会自动发起POST请求,此时@GetMapping
无效 - 当不同API的注解
@FeignClient
有相同contextId
或serviceId
或value
或name
时,应该设置spring.main.allow-bean-definition-overriding=true