Spring Cloud学习进阶(一)- 服务调用Fegin

為{幸葍}努か 提交于 2020-08-10 14:05:07

一、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同样实现了负载均衡!

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!