SpringCloud微服务——Feign调用其他服务

前言

在微服务中,有多个服务:A、B、C等等。如果前端访问A服务做一个业务,其中一个环节是需要B服务的支持,也就是在A服务中,要调用B服务,这个时候,可以使用Feign来实现。假定A调用B,则A为客户端,B为服务端。服务端的写法,不用说了,就和Spring MVC中Contoller的代码写法一样。以下就介绍客户端的写法。

添加jar包

这里只是给出了feign的包,其他的依赖包根据项目而定:

<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

开启feign支持

起启动类上,加入注解:@EnableFeignClients

@EnableFeignClients
@EnableEurekaClient
@SpringBootApplication
@ComponentScan({"com.boco.fyk.controller.**", "com.boco.fyk.service.**", "com.boco.fyk.config.**", "com.boco.fyk.core.config.**"})
@MapperScan("com.boco.fyk.dao.**")
public class BasicApplication {

	public static void main(String[] args) {
		SpringApplication.run(BasicApplication.class, args);
	}
	
}

定义Feign客户端

编写一个接口:

@FeignClient("fyk-business-cxf")
public interface QqOnlineFeignClient {
	@GetMapping("/testQqOnline/qqCheckOnline")
	public String qqCheckOnline(@RequestParam String qqCode);
}

这里,fyk-business-cxf就是Feign服务端的服务名(spring.application.name配置指定)。然后/testQqOnline/qqCheckOnline就是指定的是客户端要方位服务端的地址:如下,就是服务端的代码,Feign客户端要调的就是以下方法:

@RestController
@RequestMapping("/testQqOnline")
public class TestQqOnlineFeignService {
	@GetMapping("qqCheckOnline")
	public String qqCheckOnline(String qqCode) throws Exception {
		String resultStr = qqOnLineService.qqCheckOnline(qqCode);
		return resultStr;
	}
}

测试结果

写好如下代码之后,就测试一下:

@RestController
@RequestMapping("testFeign")
public class TestFeignContoller {

	@Autowired
	private QqOnlineFeignClient qqOnlineFeignClient;
	
	@GetMapping("test")
	public String test(String qqCode) {
		// do something
		return qqOnlineFeignClient.qqCheckOnline(qqCode);
	}
	
}

问题

在使用Feign的时候,会遇到一些问题,解决方案查看以下具体的文章:

  1. Feign客户服务端配置了server.servlet.context-path,客户端无法调用
  2. Feign客户端指定为Get方式,但是服务端接收的请求却为Post方式
  3. Feign客户端连接超时:feign.RetryableException: Read timed out executing xxxxxxxxxx
  4. 如果是在客户端和服务端都加了oauth2认证方式,那么客户端在调用客户端的时候,也要带上token,Feign带token的方式可以参见:基于security+oauth2的安全保护(三):资源服务
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值