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

posted @ 2020-03-30 10:45  是柯南君  阅读(310)  评论(0编辑  收藏  举报