SpringCloud(三) RestTemplate实现服务间调用

一.给provider01加入controlller层

在这里插入图片描述

@RestController
public class HelloController {

    @GetMapping("/hello")
    public  String hello(){
        return  "hello provider!";
    }
}

二.配置consumer01

因为consumer01要注册到provicer上面所以我们要给他加Client依赖
在这里插入图片描述

三.再去写consumer01的HelloController

@GetMapping("/hello")
    public  String hello() throws IOException {
      /*
      * 根据服务名称去Eureka上查询服务,返回子是一个集合,因为provider01可能都是集群化部署的
       */
        List<ServiceInstance> list = discoveryClient.getInstances("provider01");
        //获取具体的服务,一个轮询负载均衡,这种叫做客户端负载均衡
        ServiceInstance serviceInstance = list.get(0);
        //获取服务的 IP 地址
        String host = serviceInstance.getHost();
        //获取服务的端口号
        int port = serviceInstance.getPort();
        String url = "http://"+host +":"+port +"/hello";
        URL httpurl = new URL(url);

        HttpURLConnection con =(HttpURLConnection) httpurl.openConnection();
        if (con.getResponseCode() ==200){
            BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream()));
            String s = br.readLine();
            return  s;
        }
        return  "" ;
    }

这种写法是最原始的写法非常多漏洞,但是有助于知道最关键的东西
在这里插入图片描述

四.启动consumer01

发现注入成功,而且端口也弄出来了,说明我们查询这个东西的端口和其他的都是可以的。
实际上我们学微服务的初衷就是简化调用。也是为了让调用的过程更加的可靠
在这里插入图片描述

五. 给Provider配置一个HelloController

在这里插入图片描述

@RestController
public class HelloController {

    @Value("$server.port")
    Integer port;

    @GetMapping("/hello")
    public  String hello (){
        return  "hello provider!"+ port;
    }
}

六.重新启动我们的Provider

在这里插入图片描述

七.再开启一个8082的provider端口

再开启一个8082的端口,且启动它这个端口,这样我们就有了两个provider端口了,来实现一个简单的负载均衡吧
在这里插入图片描述

八.再去给Consummer里面加入配置

    @Bean
    RestTemplate restTemplate(){
        return new RestTemplate();
    }

在这里插入图片描述

九.再去给Consummer的Hellotroller里面写入

给Consummer01里面写入restTemplate,注意的是
restTemplate和
在这里插入图片描述

  @GetMapping("/hello")
    public  String hello2() throws IOException {
        /*
         * 根据服务名称去Eureka上查询服务,返回子是一个集合,因为provider01可能都是集群化部署的
         */
        List<ServiceInstance> list = discoveryClient.getInstances("provider01");
        //获取具体的服务,一个轮询负载均衡,这种叫做客户端负载均衡
        ServiceInstance serviceInstance = list.get(count++%list.size());
        //获取服务的 IP 地址
        String host = serviceInstance.getHost();
        //获取服务的端口号
        int port = serviceInstance.getPort();
        String url = "http://"+host +":"+port +"/hello";
        String s = restTemplate.getForObject(url, String.class);
        return s;
    }

在这里插入图片描述

十.这样就启动了

在这里插入图片描述

在这里插入图片描述
所以我们发现是可以进行跳转的。

十一.再给consumer01添加一个restTemplate

   @Bean
    /*
    添加负载均衡拦截器,当这个RestTemplate实力发送请求的时候,这个请求会被
    @LoadBalanced注解拦截下来,拦截下来之后,会对请求的地址进行二次处理,
    使之实现负载均衡。
    */

    @LoadBalanced
    RestTemplate restTemplate(){
        return new RestTemplate();
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值