Dubbo:RESTful服务发现

Posted 流楚丶格念

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Dubbo:RESTful服务发现相关的知识,希望对你有一定的参考价值。

文章目录

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父工程中添加依赖管理

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>2.1.3.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Greenwich.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>2.1.0.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>


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

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

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是一个客户端负载均衡器,它的责任是从一组实例列表中挑选合适的实例,其挑选取决于负载均衡策略 。

准备测试环境:

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



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

请求可以请求到:

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

以上是关于Dubbo:RESTful服务发现的主要内容,如果未能解决你的问题,请参考以下文章

基于dubbo快速发布restful服务

分布式服务:Dubbo+Zookeeper+Proxy+Restful

分布式服务:Dubbo+Zookeeper+Proxy+Restful

分布式服务:Dubbo+Zookeeper+Proxy+Restful 分布式架构

JEESZ架构分布式服务:Dubbo+Zookeeper+Proxy+Restful

JEESZ架构分布式服务:Dubbo+Zookeeper+Proxy+Restful