在微服务架构中经常遇到的另一个组件,springcloud中的openfeign服务调用。
在微服务之间进行调用可以采用RestTemplate,访问URL是采用字符串拼接的方式,但是如果input 参数有很多,拼接起来就相当麻烦,使用Feign可以简化服务调用。
在上篇文章的基础上,一共4个微服务工程,分别为eureka服务注册与发现、zuul网关、consumer服务、provider服务
eureka服务不变、zuul服务不变
consumer实例
1添加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
2启动类
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class ConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class, args);
}
}
3调用接口
@FeignClient(name = "provider")
public interface ProviderApi {
@RequestMapping(value = "rest2/items")
String items();
}
4测试接口及资源接口
@Resource
private ProviderApi providerApi;
/**
* 测试通过feign调用其他微服务获取数据
* @return
*/
@GetMapping("hello2")
public String hello2() {
String result = providerApi.items();
return result;
}
/**
* 提供被feign调用的资源
* @return
*/
@GetMapping("items")
public String items() {
return "consumer:items";
}
provider实例
1添加依赖同consumer
2启动类与consumer同理
3调用接口
@FeignClient(name = "consumer")
public interface ConsumerApi {
@RequestMapping(value = "rest1/items")
String items();
}
4测试接口及资源接口
@Resource
private ConsumerApi consumerApi;
/**
* 测试通过feign调用其他微服务获取数据
* @return
*/
@GetMapping("hello2")
public String hello2() {
String result = consumerApi.items();
return result;
}
/**
* 提供被feign调用的资源
* @return
*/
@GetMapping("items")
public String items() {
return "provider:items";
}
测试
启动eureka、zuul、consumer、provider
访问如下
简单应用已完成,还行考虑容错和降级。