栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Dubbo:RESTful服务发现

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Dubbo:RESTful服务发现

文章目录
  • RESTful服务发现
    • 1. 测试环境
    • 2. 服务注册
    • 3. 服务发现
    • 4. 负载均衡
      • 准备测试环境:

RESTful服务发现 1. 测试环境

Spring Cloud是一套微服务开发框架集合 ,包括微服务开发的方方页面 ,Spring Cloud是一套微服务开发的标准 , 集成了很多优秀的开源框架 ,比如有名的Netflix公司的众多项目。
Spring Cloud 项目地址 :https://spring.io/projects/spring-cloud

本测试环境采用阿里开源的Spring Cloud Alibaba微服务开发框架 ,Spring Cloud Alibaba是阿里巴巴公司基于 Spring Cloud标准实现一套微服务开发框架集合 ,它和Netflix一样都是Spring Cloud微服务开发实现方案。

Spring Cloud Alibaba项目地址 :https://github.com/alibaba/spring-cloud-alibaba

通过Spring Cloud Alibaba实现解决 :

  1. 服务发现客户端从服务发现中心获取服务列表
  2. 服务消费方通过负载均衡获取服务地址

在nacos-discovery父工程中添加依赖管理


    
        
            org.springframework.boot
            spring-boot-dependencies
            2.1.3.RELEASE
            pom
            import
        
        
            org.springframework.cloud
            spring-cloud-dependencies
            Greenwich.RELEASE
            pom
            import
        
        
            com.alibaba.cloud
            spring-cloud-alibaba-dependencies
            2.1.0.RELEASE
            pom
            import
        
    


分别在服务提供及服务消费工程中添加依赖 ,此依赖的作用是服务发现


    com.alibaba.cloud
    spring-cloud-starter-alibaba-nacos-discovery

2. 服务注册

在服务提供工程中配置nacos服务发现相关的配置 :

服务提供 :

spring:
  application:
    name: nacos-restful-provider #服务名
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848  #服务发现中心地址


启动nacos(bin目录下)
启动服务提供(启动这个springboot应用服务)

观察nacos服务列表 ,有nacos-restful-provider这个服务名,表示注册成功

3. 服务发现

在服务消费工程中配置nacos服务发现相关的配置 (application.yml):

服务消费 :

spring:
  application:
    name: nacos-restful-consumer #服务名
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848  #服务发现中心地址

修改Controller中远程调用的代码 :

//指定服务名
String serviceId = "nacos-restful-provider";

//通过负载均衡发现地址,流程是从服务发现中心拿nacos-restful-provider服务的列表,通过负载均衡算法获取一个地址
@Autowired
LoadBalancerClient loadBalancerClient;

@GetMapping(value = "/service1")
public String service1(){
    //远程调用
    RestTemplate restTemplate = new RestTemplate();

    //发现一个地址
    ServiceInstance serviceInstance = loadBalancerClient.choose(serviceId);
    //获取一个http://开头的地址,包括ip和端口
    URI uri = serviceInstance.getUri();
    String result = restTemplate.getForObject(uri + "/service", String.class);
    return "consumer invode|"+result;
}

执行流程 :
1、 服务提供方将自己注册到服务注册中心
2、 服务消费方从注册中心获取服务地址
3、进行远程调用

4. 负载均衡

在RESTful服务发现的流程中 ,ServiceA通过负载均衡调用ServiceB ,下边来了解一下负载均衡 :

负载均衡就是将用户请求(流量) 通过一定的策略 ,分摊在多个服务实例上执行 ,它是系统处理高并发、 缓解网络 压力和进行服务端扩容的重要手段之一。 它分为服务端负载均衡和客户端负载均衡。

服务器端负载均衡 :


在负载均衡器中维护一个可用的服务实例清单,当客户端请求来临时,负载均衡服务器按照某种配置好的规则(负载均衡算法)从可用服务实例清单中选取其一去处理客户端的请求。这就是服务端负载均衡。

例如Nginx,通过Nginx进行负载均衡,客户端发送请求至Nginx,Nginx通过负载均衡算法,在多个服务器之间选择一个进行访问。即在服务器端再进行负载均衡算法分配。

客户端服务负载均衡:

上边使用的LoadBalancerClient就是一个客户端负载均衡器,具体使用的是Ribbon客户端负载均衡器。 Ribbon在发送请求前通过负载均衡算法选择一个服务实例,然后进行访问,这是客户端负载均衡。即在客户 端就进行负载均衡的分配。

Ribbon是一个客户端负载均衡器,它的责任是从一组实例列表中挑选合适的实例,其挑选取决于负载均衡策略 。

准备测试环境:

启动多个服务提供方进程,为保证端口不冲突,通过启动参数配置端口,并启动这两个进程。



再启动服务消费者,访问服务消费者:

请求可以请求到:

也进行了负载均衡,两台机器均被:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1019783.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号