Spring Cloud【Finchley】-06服务消费者整合Feign

简介: Spring Cloud【Finchley】-06服务消费者整合Feign

20190806093230928.jpg


概述


回想下我们在使用Eureka 和 Ribbon的时候是怎么调用注册在Eureka Server上的微服务的地址呢?

20181209213253513.png


可以看到其实是通过拼接的方式,当然了我们上面的这个例子只有一个参数 id,看起来没有这麻烦。


设想下如果有多个参数呢?

假设URL如下

http://localhost:8080/search?name=小工匠&age=20&username=artisan


那我们用RestTemplate如何调用对方的微服务呢? 可以采用如下方式

  @GetMapping("/searchUser")
  public User searchUser(String name ,String age ,String username) {
    Map<String, Object> paraMap = new HashMap<String ,Object>() {
      {
        put("name",name);
        put("age",age);
        put("username",username);
      }  
    };
   return  this.restTemplate.getForObject("http://microservice-provider-user/search?name={name}&age={age}&username={username}", User.class, paraMap);
  }


是不是已经很麻烦了?


Spring Cloud为我们整合了Fegin解决上述苦恼。


Feign官方文档: https://cloud.spring.io/spring-cloud-static/Finchley.SR2/single/spring-cloud.html#_spring_cloud_openfeign


Feign是Netflix开发的声明模板化的HTTP客户端。 在Spring Cloud中使用Feign,只需要创建一个接口,并在接口上添加一些注解即可。 Spring Cloud对Feign进行了增强,使Feign支持了SpringMVC的总结,并整合了Ribbon和Eureka。


实例

新建工程

在父工程上右键,新建Maven Module ,如下


20181209222253911.png

下面根据官方文档操作即可


20181209222608915.png


增加maven依赖

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


创建一个Feign接口,并添加@FeignClient注解

package com.artisan.micorservice.feignclient;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import com.artisan.micorservice.model.User;
@FeignClient("microservice-provider-user")
public interface UserFeignClient {
  @RequestMapping(method = RequestMethod.GET, value = "/user/{id}")
  public User findById(@PathVariable Long id);
}


FeignClient中的microservice-provider-user是要调用的微服务的名称,用于创建Ribbon负载均衡器。


因为我们这里使用了Eureka,所以Ribbon会把microservice-provider-user解析成Eureka Server中注册的服务。


另外,也可以通过url属性指定请求的URL ,比如 @FeignClient("microservice-provider-user", url="http://localhost:8900/")


修改Controller层,将RestTemplate改为调用Feign接口

package com.artisan.micorservice.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import com.artisan.micorservice.feignclient.UserFeignClient;
import com.artisan.micorservice.model.User;
@RestController
public class MovieController {
 @Autowired
 private UserFeignClient userClient;
  @GetMapping("/movie/{id}")
  public User findById(@PathVariable Long id) {
    return userClient.findById(id);
  }
}


启动类增加@EnableFeiginClients注解

package com.artisan.micorservice;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
@EnableDiscoveryClient
@SpringBootApplication
@EnableFeignClients
public class MicorserviceConsumerFeginApplication {
  public static void main(String[] args) {
    SpringApplication.run(MicorserviceConsumerFeginApplication.class, args);
  }
}



测试

  1. 启动eureka server微服务
  2. 启动2个 provider-user微服务
  3. 启动该微服务


20181209225838562.png


2次请求http://localhost:7901/movie/1 ,观察 provider-user微服务的日志打印情况。

8900端口

20181209230212894.png

8901端口

2018120923015076.png



通过日志可以看到不仅实现了声明式的REST API调用,同时也实现了客户端的负载均衡。


源码

https://github.com/yangshangwei/SpringCloudMaster

相关文章
|
11月前
|
存储 数据可视化 Java
基于MicrometerTracing门面和Zipkin实现集成springcloud2023的服务追踪
Sleuth将会停止维护,Sleuth最新版本也只支持springboot2。作为替代可以使用MicrometerTracing在微服务中作为服务追踪的工具。
470 2
|
5月前
|
负载均衡 前端开发 Java
SpringCloud调用组件Feign
本文深入探讨微服务Spring体系中的Feign组件。Feign是一个声明式Web服务客户端,支持注解、编码器/解码器,与Spring MVC注解兼容,并集成Eureka、负载均衡等功能。文章详细介绍了SpringCloud整合Feign的步骤,包括依赖引入、客户端启用、接口创建及调用示例。同时,还涵盖了Feign的核心配置,如超时设置、拦截器实现(Basic认证与自定义)和日志级别调整。最后,总结了`@FeignClient`常用属性,帮助开发者更好地理解和使用Feign进行微服务间通信。
457 1
|
9月前
|
消息中间件 监控 Java
如何将Spring Boot + RabbitMQ应用程序部署到Pivotal Cloud Foundry (PCF)
如何将Spring Boot + RabbitMQ应用程序部署到Pivotal Cloud Foundry (PCF)
135 6
|
9月前
|
Java 关系型数据库 MySQL
如何将Spring Boot + MySQL应用程序部署到Pivotal Cloud Foundry (PCF)
如何将Spring Boot + MySQL应用程序部署到Pivotal Cloud Foundry (PCF)
154 5
|
9月前
|
缓存 监控 Java
如何将Spring Boot应用程序部署到Pivotal Cloud Foundry (PCF)
如何将Spring Boot应用程序部署到Pivotal Cloud Foundry (PCF)
166 5
|
10月前
|
JSON Java 测试技术
SpringCloud2023实战之接口服务测试工具SpringBootTest
SpringBootTest同时集成了JUnit Jupiter、AssertJ、Hamcrest测试辅助库,使得更容易编写但愿测试代码。
278 3
|
11月前
|
JSON Java 数据格式
【微服务】SpringCloud之Feign远程调用
本文介绍了使用Feign作为HTTP客户端替代RestTemplate进行远程调用的优势及具体使用方法。Feign通过声明式接口简化了HTTP请求的发送,提高了代码的可读性和维护性。文章详细描述了Feign的搭建步骤,包括引入依赖、添加注解、编写FeignClient接口和调用代码,并提供了自定义配置的示例,如修改日志级别等。
637 1
|
12月前
|
前端开发 API 微服务
SpringCloud微服务之间使用Feign调用不通情况举例
SpringCloud微服务之间使用Feign调用不通情况举例
1427 2
|
12月前
|
Java API 开发者
【已解决】Spring Cloud Feign 上传文件,提示:the request was rejected because no multipart boundary was found的问题
【已解决】Spring Cloud Feign 上传文件,提示:the request was rejected because no multipart boundary was found的问题
1634 0
|
监控 前端开发 Java
Spring Cloud实战小贴士:Feign的继承特性(伪RPC模式)
Spring Cloud实战小贴士:Feign的继承特性(伪RPC模式)
259 0