zoukankan      html  css  js  c++  java
  • Spring Cloud教程之SpringCloud Rest+Ribbon

    服务消费者Rest+ribbon

    Spring Cloud Ribbon 是一个基于 HTTP 和 TCP 的客户端负载均衡工具,它基于 Netflix Ribbon 实现。 通过 Spring Cloud 的封装, 可以让我们轻松地将面向服务的 REST 模板请求自动转换成客户端负载均衡的服务调用。 Spring Cloud Ribbon 虽然只是一个工具类框架,它不像服务注册中心、 配置中心、 API 网关那样需要独立部署, 但是它几乎存在于每一个Spring Cloud 构建的微服务和基础设施中。 因为微服务间的调用,API 网关的请求转发等内容实际上都是通过伈bbon 来实现的。

    3.2 搭建SpringCloudRibbon

    3.2.1 启动eureka-service和 service-hi 这里注意,service-hi可以多端口启动,来实现多服务注册

    具体步骤如下

     

    至此,我们可以通过修改server-hi的端口号来模拟多个服务

    可以看到server-hi 的地址有两个,8763和8762。

    3.2.2 创建Ribbon-service模块

    步骤略,创建完毕的pom.xml包含如下

    3.2.3 配置application.yml

    eureka:
      client:
        service-url:
          defaultZone: http://localhost:8761/eureka/ #服务注册中心的地址
    ​
    ​
    server:
      port: 8764   #端口号
    ​
    spring:
      application:
        name: service-ribbon  #服务名

    3.2.4 创建restful

    @SpringBootApplication
    @EnableEurekaClient
    @EnableDiscoveryClient
    public class ServiceRibbonApplication {
    ​
        public static void main(String[] args) {
            SpringApplication.run(ServiceRibbonApplication.class, args);
        }
    ​
        @Bean
        @LoadBalanced
        RestTemplate restTemplate(){
            return new RestTemplate();
        }
    }
    ​
    

    其中

    @EnableDiscoveryClient表明向服务中心注册服务;

    @Bean 表明向程序中注入一个restTemplate;

    @LoadBalanced:开启负载均衡

    @Service
    public class HelloService {
    ​
        @Autowired
        RestTemplate restTemplate;
    ​
        public String hiService(String name){
            return restTemplate.getForObject("http://service-hi/hi?name="+name,String.class);
        }
    }
    

    创建Service, 注入restTemplate来消费SERVICE-HI服务的hi接口;

    http://service-hi?name ==》 service-hi就是我们的服务提供方的application-name,在ribbon中,它会根据服务名来选择具体的服务实例,根据服务实例在请求的时候会用具体的url替换掉服务名

    @RestController
    public class HelloController {
        @Autowired
        HelloService helloService;
    ​
        @GetMapping(value = "/hi")
        public String hi(@RequestParam String name){
            return helloService.hiService(name);
        }
    }
    

    3.2.5 启动并调用服务

     

     

    服务调用成功!

    此时系统构架如下

    此时架构图.png

    EureKa-server作为服务注册中心,端口号为8761

    service-hi提供了两个实例, 一个是端口号8762、另一个为8763,并向服务注册中心注册

    service-ribbon 端口号为8764,向服务中心注册

    service-ribbon通过restTemplate的方式调用service-hi的hi接口,rebbon进行了负载均衡,故会轮流请求8762、8763端口

    参考地址

    https://www.cnblogs.com/snake23/p/9490063.html

    不忘初心,方得始终,以梦为马,不负韶华
  • 相关阅读:
    jenkins集成python时出现"Non-ASCII character 'xe6' in file"错误解决方法
    【转】/bin/bash^M: bad interpreter: No such file or directory
    解决Jenkins中执行jmeter脚本后不能发报告(原报告被覆盖、新报告无法保存)的问题
    【转】shell脚本中如何传入参数
    Hibernate学习笔记
    struts2学习笔记
    oracle表空间相关SQL语句
    javaMail
    Mysql 5.7.7
    设计模式之享元模式
  • 原文地址:https://www.cnblogs.com/newz/p/12597087.html
Copyright © 2011-2022 走看看