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


    一.给provider01加入controlller层

    在这里插入图片描述

    @RestController
    public class HelloController {
    
        @GetMapping("/hello")
        public  String hello(){
            return  "hello provider!";
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    二.配置consumer01

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

    三.再去写consumer01的HelloController

    @GetMapping("/hello")
        public  String hello() throws IOException {
          /*
          * 根据服务名称去Eureka上查询服务,返回子是一个集合,因为provider01可能都是集群化部署的
           */
            List 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  "" ;
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

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

    四.启动consumer01

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

    五. 给Provider配置一个HelloController

    在这里插入图片描述

    @RestController
    public class HelloController {
    
        @Value("$server.port")
        Integer port;
    
        @GetMapping("/hello")
        public  String hello (){
            return  "hello provider!"+ port;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    六.重新启动我们的Provider

    在这里插入图片描述

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

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

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

        @Bean
        RestTemplate restTemplate(){
            return new RestTemplate();
        }
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

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

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

      @GetMapping("/hello")
        public  String hello2() throws IOException {
            /*
             * 根据服务名称去Eureka上查询服务,返回子是一个集合,因为provider01可能都是集群化部署的
             */
            List 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;
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    在这里插入图片描述

    十.这样就启动了

    在这里插入图片描述

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

    十一.再给consumer01添加一个restTemplate

       @Bean
        /*
        添加负载均衡拦截器,当这个RestTemplate实力发送请求的时候,这个请求会被
        @LoadBalanced注解拦截下来,拦截下来之后,会对请求的地址进行二次处理,
        使之实现负载均衡。
        */
    
        @LoadBalanced
        RestTemplate restTemplate(){
            return new RestTemplate();
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
  • 相关阅读:
    dp秒杀优惠券
    gici-open示例数据运行(1.1开阔环境数据运行)
    【C++】队列
    Android11 Wifi 加密类型详解
    Linux设备树 01 ———— 内核笔记
    Linux入门
    [k8s] 常见yml配置和详细解释
    如何高效运用《霍格沃茨之遗》风灵月影修改器:全面教程与技巧
    postgresql-子查询
    数据化运营13 工具与方法:如何运用 3A3R 模型将数据转化为运营策略
  • 原文地址:https://blog.csdn.net/weixin_43189971/article/details/126471737