SpringCloud学习进阶(一)服务调用Fegin
一、Feign简介
Feign是Netflix开源的声明式的HTTP客户端,只需要声明一个接口,Feign可以自动帮我们构造请求地址。(简单来说,Feign可帮助我们更加便捷,优雅的调用服务之间的HTTP API),另外SpringCloud对Feign进行了增强,是Feign支持SpringMVC注解,并整和了Ribbon和Eureka,从而让Feign使用更加便捷。
二、基于Feign的服务调用
(1)pom依赖
<!-- 声明式Http客户端 --><dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
(2)在内容中心微服务启动类添加Feign的支持, 通过@EnableFeignClients主机诶开启Spring Cloud Feign的支持功能:
@SpringBootApplication@EnableFeignClients //开启Feign支持
public class ContentCenterApplication {
public static void main(String[] args) {
SpringApplication.run(ContentCenterApplication.class, args);
}
}
(3)定义UserCenterFeignClient,配置调用用户中心服务的接口:
/** * 声明需要调用的微服务名称
* @FeignClient (name="服务提供者的名称")
*/
@FeignClient(name = "user-center")
public interface UserCenterFeignClient {
/**
* http://user-center/users/{id}
* 配置需要调用的微服务接口
*/
@GetMapping(value = "/users/{id}")
UserDTO findById(@PathVariable Integer id);
}
(4)内容中心通过自动的接口调用用户中心服务
@Slf4j
@Service
public class ShareServiceImpl implements ShareService {
@Autowired
private ShareMapper shareMapper;
@Autowired
private RestTemplate restTemplate;
@Autowired
private DiscoveryClient discoveryClient;
@Autowired
private UserCenterFeignClient userCenterFeignClient;
@Override
public ShareDTO findById(Integer id) {
Share share = shareMapper.selectByPrimaryKey(id);
Integer userId = share.getUserId();
//调用用户微服务的/users/{userId}
/*UserDTO userDTO = this.restTemplate.getForObject(
"http://user-center/users/1",
UserDTO.class);*/
//使用FeignClient来实现远程HTTP调用
UserDTO userDTO = userCenterFeignClient.findById(userId);
//3.消息的装配
ShareDTO shareDTO = new ShareDTO();
BeanUtils.copyProperties(share, shareDTO);
shareDTO.setWxNickname(userDTO.getWxNickname());
return shareDTO;
}
}
(5)测试访问 http://localhost:8888/shares/1 :
请求分别打到了用户中心8080和8081实例上,表明Feign同样实现了负载均衡!
以上是 SpringCloud学习进阶(一)服务调用Fegin 的全部内容, 来源链接: utcz.com/z/519210.html