服务消费者整合Feign
使用Eureka 和 Ribbon的时候是怎么调用注册在Eureka Server上的微服务的地址呢?

有多个参数呢?
  @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);
  }
feign是Netflix开发的声明模板化的HTTP客户端。 在Spring Cloud中使用Feign,只需要创建一个接口,并在接口上添加一些注解即可。 Spring Cloud对Feign进行增强,使Feign支持SpringMVC的总结,并整合Ribbon和Eureka。
依赖
<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
创建一个Feign接口,并添加@FeignClient注解
package com.smart.feignclient; import com.smart.model.User; 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; @FeignClient("provider-user") public interface UserFeignClient { @RequestMapping(method= RequestMethod.GET,value="/user/{id}") User findUserById(@PathVariable("id") Long id); }
FeignClient中的provider-user是要调用的微服务的名称,用于创建Ribbon负载均衡器。使用Eureka,所以Ribbon会把provider-user解析成Eureka Server中注册的服务。
修改Controller层,将RestTemplate改为调用Feign接口
package com.smart.controller; import com.smart.feignclient.UserFeignClient; import com.smart.model.User; 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; @RestController public class MovieController { @Autowired private UserFeignClient userFeignClient; @GetMapping("/movie/{id}") public User findById(@PathVariable("id") Long id){ return userFeignClient.findUserById(id); } }
启动类增加@EnableFeiginClients注解
@EnableDiscoveryClient @SpringBootApplication @EnableFeignClients public class ConsumerMovieFeginApplication { public static void main(String[] args) { SpringApplication.run(ConsumerMovieFeginApplication.class, args); } }
构造多参数GET/POST请求
当浏览器或者外部其他请求请求到MovieController,MovieController需要调用UserController服务提供者提供的服务,MovieController会通过接口UserFeignClient来实现调用。在UserFeignClient接口方法里,通过映射UserController的REST API实现调用对端服务。
    立志如山 静心求实
                    
                
                
            
        
浙公网安备 33010602011771号