我是靠谱客的博主 俊秀金毛,最近开发中收集的这篇文章主要介绍SpringCloud-02:通过RestTemplate、OpenFeign发起远程服务掉用,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

通过RestTemplate、OpenFeign发起远程服务掉用

文章目录

    • 通过RestTemplate、OpenFeign发起远程服务掉用
      • 几个概念
      • OpenFeign发起调用的步骤
      • RestTemplate发起远程调用

上一节,介绍了Eureka集群的搭建,以及单个微服务如何向Eureka进行注册。这一节,简单介绍如何在一个服务中,调用另外一个服务(实质是发Http请求)。

几个概念

RestTemplate是Spring提供的对Http客户端的封装类,能够发起Http调用并解析Http响应,比Httpclient使用起来更方便。

Feign基于RestTemplate进行了更进一步的包装,并且实现了声明式的接口调用——内部实现是,读取接口中的信息,自动组装请求的url和参数,发起http调用,解析http响应,然后将调用结果返回给调用者。

OpenFeign则是将Feign实现的功能,纳入SpringMVC注解的管理范畴,能够和SpringBoot进行无缝集成。

OpenFeign发起调用的步骤

  1. 新建一个SpringWeb项目(带Eureka),作为服务提供方,提供一个http接口,如sayHello()。

    application.name叫test-provider

@RestController
public class MainController {

    @Value("${server.port}")
    String port;

    @GetMapping("/sayHello")
    public String sayHello() {
        return "Hi, port="+port;
    }
}

启动该服务作为服务提供方。最好是在两个不同的端口,如9001和9002上分别启动,以便于观察服务消费方,OpenFeign(默认集成了Ribbon)提供的负载均衡功能。

  1. 服务消费方(也是带Eureka的Web项目)的pom.xml中引入openfeign依赖:

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-openfeign</artifactId>
        <version>2.2.2.RELEASE</version>
    </dependency>
    
  2. 在服务消费方的启动类@SpringBootApplication上加注解@EnableFeignClients

  3. 服务消费方,写好接口:

    //ITestApi.java
    public interface ITestApi {
        @GetMapping("/sayHello")
        public String sayHello();
    }
    
    //TestApi.java
    //指定服务提供方的application-name
    @FeignClient(name = "test-provider")
    public interface TestApi extends ITestApi {
    }
    
  4. 消费方发起调用,比如在Controller里面:

    @Autowired
    TestApi testApi;
    
    @GetMapping("/getByFeign")
    public String getByFeign() {
        return testApi.sayHello();
    }
    

    然后,通过浏览器访问服务消费方提供的Http接口:

    http://localhost:8081/getByFeign

    在页面上得到服务提供方返回的信息:

    Hi, port=9001

    Hi, port=9002

    交替出现9001和9002,说明OpenFeign集成的负载均衡策略起作用了。

RestTemplate发起远程调用

在服务消费方@SpringBootApplication服务启动类里面,注册一个单例RestTemplate:

@Bean
@LoadBalanced// 开启负载均衡
RestTemplate restTemplate() {
    return new RestTemplate();
}

在Controller里面直接通过restTemplate向服务提供方发起调用。

@Autowired
RestTemplate restTemplate;

@GetMapping("/getRest")
public String getRestTemplate() {
    String url = "http://test-provider/sayHello";
    String res = restTemplate.getForObject(url, String.class);
    return res;
}

或者注入LoadBalancerClient lb,通过lb.choose(service-name)完成负载均衡。

@Autowired
LoadBalancerClient lb;

@GetMapping("/getLB")
public Object getLB() {
    //ribbon完成客户端的负载均衡,过滤掉了down掉的节点
    ServiceInstance ins = lb.choose("test-provider");
    String url = "http://"+ins.getHost()+":"+ins.getPort()+"/sayHello";
    System.out.println("url:"+url);
    RestTemplate restTemplate = new RestTemplate();
    return restTemplate.getForObject(url, String.class);
}

最后

以上就是俊秀金毛为你收集整理的SpringCloud-02:通过RestTemplate、OpenFeign发起远程服务掉用的全部内容,希望文章能够帮你解决SpringCloud-02:通过RestTemplate、OpenFeign发起远程服务掉用所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(38)

评论列表共有 0 条评论

立即
投稿
返回
顶部