项目中需要使用feign去调用其他服务的接口时,我们要进行下面的步骤:
- 在项目的启动类加上注解@EnableFeignClients,目的是启用feign客户端。
示例如下:
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
@MapperScan("com.zdww.mapper")
public class ScenesWebApplication {
public static void main(String[] args) {
SpringApplication.run(ScenesWebApplication.class, args);
}
}
需要的依赖为(pom中需要添加的):
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>2.2.3.RELEASE</version>
</dependency>
- @FeignClient此注解用来定义feigh客户端,比如我想要调用其他服务中和用户相关的一个接口,则我需要新建一个接口类,假设类名为UserCenterClient。
@FeignClient(name = "ump-apis", url = "http://ump-apis.com:8780")
@Service
public interface UserCenterClient {
@RequestMapping(value = "/apis/config/getConfigByAppAndCode", params = { "configCode", "appCode" }, method = RequestMethod.GET)
ResultMsg getConfigByAppAndCode(
@ApiParam(value = "access_token", required = true) @RequestParam(value = "access_token") String access_token,
@ApiParam(value = "configCode", required = true) @RequestParam(value = "configCode") String configCode,
@ApiParam(value = "appCode", required = true) @RequestParam(value = "appCode") String appCode);
其中@FeignClient中name参数名称是需要调用的微服务名称
(spring.application. name=ump-apis)
url为指定调用服务的全路径
也就是该例子定义了一个feign客户端,将远程服务http://ump-apis.com:8780/apis/config/getConfigByAppAndCode映射为一个本地Java方法调用。
其中此处写的getConfigByAppAndCode中的参数及类型必须和ump-apis这个远程服务中此接口的参数及类型保持一致。
3. 最后我们便是要去使用这个方法了,在需要使用的地方将此接口使用@Autowired注入,直接调用即可。
@Autowired
private UserCenterClient userCenterClient;
@Test
public void testSelect() {
String accessToken = securityUtil.getClientToken();
ResultMsg resultMsg = userCenterClient.listDictionaryByParentCode(accessToken,"FIELD_TYPE","qhzfw");
System.out.println(resultMsg);
}
}
总结:前两步:定义feign客户端
第三步:是使用所定义的feign客户端
注入的userCenterClient相当于一个代理对象,和我们平常代码中的接口注入类似。
不当之处可多多指正