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实现解决 :
- 服务发现客户端从服务发现中心获取服务列表
- 服务消费方通过负载均衡获取服务地址
在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+Zookeeper+Proxy+Restful
分布式服务:Dubbo+Zookeeper+Proxy+Restful
分布式服务:Dubbo+Zookeeper+Proxy+Restful 分布式架构