Spring Cloud 学习笔记——Eureka RestTemplate简化请求代码及自带负载均衡

6.2.1 使用 Eureka 的服务发现工具

  • 引入 DIscoryClient ,用 DiscoveryClient来获取服务地址
@Autowired
    DiscoveryClient discoveryClient;

    @GetMapping("/hello2")
    public String hello2() {
        HttpURLConnection conn = null;
        List<ServiceInstance> services = discoveryClient.getInstances("provider");
        ServiceInstance instance = services.get(0);
        String host = instance.getHost();
        int port = instance.getPort();
        StringBuffer stringBuffer = new StringBuffer();
        stringBuffer.append("http://")
                .append(host)
                .append(":")
                .append(port)
                .append("/hello");
        try {
//            URL url = new URL("http://localhost:1113/hello" );
            System.out.println(stringBuffer);
            URL url = new URL(stringBuffer.toString());
            conn = (HttpURLConnection) url.openConnection();
            if (conn.getResponseCode() == 200) {
                BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
                String s = br.readLine();
                br.close();
                return s;
            }
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "error!";
    } 
  • 访问 http://localhost:1115/hello2,验证可用
    在这里插入图片描述

  • 设置手工线性负载均衡

int count = 0;
    @GetMapping("/hello3")
    public String hello3() {
        HttpURLConnection conn = null;
        List<ServiceInstance> services = discoveryClient.getInstances("provider");
        int index = count ++ %services.size();
        ServiceInstance instance = services.get(index);
        String host = instance.getHost();
        int port = instance.getPort();
        StringBuffer stringBuffer = new StringBuffer();
        stringBuffer.append("http://")
                .append(host)
                .append(":")
                .append(port)
                .append("/hello");
        try {
//            URL url = new URL("http://localhost:1113/hello" );
            System.out.println(stringBuffer);
            URL url = new URL(stringBuffer.toString());
            conn = (HttpURLConnection) url.openConnection();
            if (conn.getResponseCode() == 200) {
                BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
                String s = br.readLine();
                br.close();
                return s;
            }
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "error!";
    }
  • 验证手工线性负载均衡可用,并重复请求验证 provider 集群可用
    在这里插入图片描述
    在这里插入图片描述

6.2.2 简化代码

6.2.2.1 简化请求

  • HttpURLConnection部分代码,替换为 RestTemplate,RestTemplate 是 Spring 自带的类,不是 Spring Cloud 新增的内容。一行代码就实现 Http 调用
  • 在 main 函数中增加如下代码
@Bean
    RestTemplate restTemplateOne(){
        return new RestTemplate();
    }
  • 简化前代码
    在这里插入图片描述
  • 简化后
    在这里插入图片描述
  • 再次调用 http://locahost:1115/hello2
    在这里插入图片描述

6.2.2.1 简化负载均衡

  • 使用 Ribbon 快速实现负债均衡,给 RestTemplate 添加 @LoadBanced 注解;在 main 函数类,新增一个 RestTemplate 的Bean对象;
@Bean
    @LoadBalanced
    RestTemplate restTemplateTwo(){
        return new RestTemplate();
    }
  • 因为有两个 RestTemplate Bean,在 UseHelloController 的 RestTemplate 增加 @Qualifier 注解
  • 改写前如下代码:
    在这里插入图片描述
  • 改写后
@Autowired
    @Qualifier("restTemplateTwo")
    RestTemplate balanceRestTemplate;
    @GetMapping("/hello3")
    public String hello3() {
        String s = balanceRestTemplate.getForObject("http://provider/hello", String.class);
        return s;
    }
  • 再次访问两次 http://localhost:1115/hello3
    在这里插入图片描述
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值