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

回到顶部