温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

SpringCloud的Ribbon+RestTemplate的三种使用方式分别是什么

发布时间:2021-11-10 18:43:42 来源:亿速云 阅读:164 作者:柒染 栏目:大数据

SpringCloud的Ribbon+RestTemplate的三种使用方式分别是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

方式一:直接使用new实例化RestTemplate对象

@GetMapping("getUserList")

public List getUserList(){

    RestTemplate template = new RestTemplate();

    return template.getForObject(

"http://localhost:8080/getUserList",//

List.class);

}

缺点:

1、url硬编码,如果ip有变动,需要在代码中更改

2、如果client为集群,有多个url,该方法只能配一个url;不能使用集群模式

方式二:注入LoadBalancerClient ,获得应用名称为providerServcidName(备注:服务提供者名称)的应用的其中一个实例,获得url,再使用RestTemplate获取数据,实现负载均衡

@RestController

public class UserController {

@Autowired

    private LoadBalancerClient loadBalancerClient;

    @GetMapping("getUserList")

    public List getUserList() {

        RestTemplate template = new RestTemplate();

         // 选择服务实例,根据传入的服务名serviceId,

         // 从负载均衡器中挑选一个对应服务的实例。 

        ServiceInstance instance = loadBalancerClient

              .choose("providerServcidName");

        String url = String.format("http://%s:%s", 

              instance.getHost(), 

      instance.getPort() + "/getUserList");

        return template.getForObject(url, List.class);

    }

}

方式三:RestTemplate通过配置注入Spring容器来使用

import org.springframework.cloud.client.loadbalancer.LoadBalanced;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import org.springframework.web.client.RestTemplate;

@Configuration

public class RestTemplateConfig {

    @Bean

    @LoadBalanced

    public RestTemplate restTemplate(){

        return new RestTemplate();

    }

}

在controller中注入RestTemplate对象,直接调用getForObject方法,注意url中直接写应用名称,不要写ip:port

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.web.bind.annotation.GetMapping;

import org.springframework.web.bind.annotation.RestController;

import org.springframework.web.client.RestTemplate;

@RestController

public class UserController {

    @Autowired

    private RestTemplate restTemplate;

    @GetMapping("getUserList")

    public String getUserList() {

        return restTemplate

    .getForObject("http://providerServcidName/getUserList", List.class);

    }

}

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI