大家好,我是哪吒。
文末送5本《用户画像:平台构建与业务实践》
前段时间,有个朋友跳槽找工作,去xxx大厂面试,被问到,项目中,服务注册是如何实现的?
他就如实回答了,用的Dubbo,巴拉巴拉说了一痛,很是痛快。
结果直接被录取了,还涨了20K。
后来才知道,他们公司就想招聘一个熟悉Dubbo的,真的是术业有专攻啊,面对这个问题,大家都在说nacos、Zookeeper、Eureka,殊不知,哎,不对口,再牛逼也白搭。
今天,借着这个机会,分享一下Dubbo是如何实现服务注册与发现的,咱们也涨个20K玩玩儿。
Dubbo是一款高性能、轻量级的分布式服务框架,它提供了丰富的服务治理能力,其中服务注册与发现是其中的重要组成部分。服务注册与发现允许服务提供者将自己的服务注册到注册中心,同时让服务消费者从注册中心发现并调用服务。本文将深入探讨Dubbo服务注册与发现的基本概念、架构设计、实现方式、应用场景和优化措施,希望能为读者提供更全面的理解和应用实践。
在 Dubbo 微服务架构中,服务注册和发现是非常重要的基础组件之一。
服务注册是指服务提供方在启动时将自己提供的服务注册到注册中心中,服务消费者在启动时从注册中心中获取所需的服务列表。
服务发现是指在运行时,服务消费者从注册中心中发现服务提供者的 IP 地址和端口号,从而可以调用服务提供方提供的服务。
服务注册与发现的重要性在于可以解决微服务架构中的服务依赖问题。
在微服务架构中,每个服务都会暴露自己的接口供其他服务调用,但是服务之间的调用需要知道对方的地址和端口号,这对于大规模的服务调用来说是非常复杂和困难的。
服务注册与发现通过将服务提供方和服务消费方解耦,使得服务提供方可以随意修改自己的 IP 地址和端口号,而不会影响到服务消费方的调用。
Dubbo 服务注册与发现的实现方式主要有以下几种:
Dubbo 服务注册与发现主要应用于以下场景:
在实际应用中,Dubbo 服务注册与发现可以和其他技术一起使用,比如与 Spring Cloud、Kubernetes 等组合使用,以满足更加复杂的业务需求。
Dubbo 服务注册与发现的总体架构设计如下所示:
在 Dubbo 服务注册与发现的总体架构中,包括以下几个组件和模块:
ServiceRegistry
:服务注册组件,用于将服务提供方的服务注册到注册中心;ServiceDiscovery
:服务发现组件,用于从注册中心获取服务提供方的服务;ServiceInstance
:服务实例对象,包含服务提供方的实例信息,例如 IP 地址、端口号等;DubboProvider
:Dubbo 服务提供方,将服务实例注册到注册中心;DubboConsumer
:Dubbo 服务消费方,从注册中心获取服务实例并调用服务;DubboRegistryFactory
:Dubbo 注册中心工厂,用于创建注册中心的实例;Application
:Dubbo 应用,负责将 Dubbo 服务提供方和 Dubbo 服务消费方注册到应用中。以上组件和模块之间的关系如下所示:
DubboProvider
将服务实例注册到 ServiceRegistry
;DubboConsumer
从 ServiceDiscovery
获取服务实例,并调用服务;DubboRegistryFactory
用于创建 ServiceRegistry
和 ServiceDiscovery
;Application
用于将 Dubbo 服务提供方和 Dubbo 服务消费方注册到应用中。Dubbo 服务注册与发现的架构设计清晰明了,模块化设计使得各个组件之间的耦合度降低,易于扩展和维护。
下面是 Dubbo服务提供方的注册和发现的过程及其流程图:
如上图所示,服务提供方启动时会连接注册中心,并将自己提供的服务注册到注册中心上,注册中心返回注册结果。
下面是 Dubbo 服务消费者端的注册和发现的过程及其流程图:
如上图所示,服务消费者启动时会连接注册中心,并订阅自己所需的服务。注册中心返回可用的服务列表,服务消费者可以从中选择一个服务提供方调用所需的服务。
基于域名的Dubbo服务注册与发现,是指将服务提供者的IP地址解析成域名,将域名注册到注册中心,服务消费者从注册中心获取到域名后再解析成IP地址进行调用。
以下是详细的实现步骤:
在服务提供者的Dubbo配置文件中,需要配置注册中心地址和服务提供者的IP地址,例如:
<dubbo:application name="provider-demo"/>
<dubbo:registry protocol="zookeeper" address="127.0.0.1:2181"/>
<dubbo:protocol name="dubbo" port="20880"/>
<dubbo:service interface="com.example.service.UserService" ref="userService" />
在服务消费者的Dubbo配置文件中,需要配置注册中心地址和服务提供者的域名,例如:
<dubbo:application name="consumer-demo"/>
<dubbo:registry protocol="zookeeper" address="127.0.0.1:2181"/>
<dubbo:reference interface="com.example.service.UserService" id="userService" check="false" url="dubbo://userService.provider-demo"/>
在服务提供者和服务消费者启动后,服务提供者会将自己的IP地址注册到注册中心,服务消费者从注册中心获取到服务提供者的域名,再解析成IP地址进行调用。
基于客户端IP地址的Dubbo服务注册与发现,是指服务提供者注册到注册中心时将自己的IP地址和端口号注册到注册中心,服务消费者通过获取客户端IP地址和端口号进行远程调用。
以下是详细的实现步骤:
在服务提供者的Dubbo配置文件中,需要配置注册中心地址和服务提供者的IP地址和端口号,例如:
phpCopy code<dubbo:application name="provider-demo"/>
<dubbo:registry protocol="zookeeper" address="127.0.0.1:2181"/>
<dubbo:protocol name="dubbo" port="20880"/>
<dubbo:service interface="com.example.service.UserService" ref="userService" />
在服务消费者的Dubbo配置文件中,需要配置注册中心地址和服务提供者的接口信息,例如:
<dubbo:application name="consumer-demo"/>
<dubbo:registry protocol="zookeeper" address="127.0.0.1:2181"/>
<dubbo:reference interface="com.example.service.UserService" id="userService" check="false" />
在服务提供者启动后,服务提供者会将自己的IP地址和端口号注册到注册中心,服务消费者从注册中心获取到服务提供者的接口信息,通过Dubbo框架进行远程调用。
基于端口号的Dubbo服务注册与发现,是指服务提供者注册到注册中心时将自己的IP地址和端口号注册到注册中心,服务消费者通过获取端口号进行远程调用。
以下是详细的实现步骤:
在服务提供者的Dubbo配置文件中,需要配置注册中心地址和服务提供者的IP地址和端口号,例如:
<dubbo:application name="provider-demo"/>
<dubbo:registry protocol="zookeeper" address="127.0.0.1:2181"/>
<dubbo:protocol name="dubbo" port="20880"/>
<dubbo:service interface="com.example.service.UserService" ref="userService" />
在服务消费者的Dubbo配置文件中,需要配置注册中心地址和服务提供者的接口信息,例如:
<dubbo:application name="consumer-demo"/>
<dubbo:registry protocol="zookeeper" address="127.0.0.1:2181"/>
<dubbo:reference interface="com.example.service.UserService" id="userService" check="false" />
在服务提供者启动后,服务提供者会将自己的IP地址和端口号注册到注册中心,服务消费者从注册中心获取到服务提供者的端口号,通过Dubbo框架进行远程调用。
Dubbo和Spring Cloud是两个流行的Java微服务框架。在实现Dubbo服务注册与发现时,可以使用Spring Cloud的服务注册中心和服务发现机制。Spring Cloud提供了多种服务注册中心和服务发现机制的实现,例如Eureka、Consul和Zookeeper等。
下面是基于 Spring Cloud 的 Dubbo 服务注册与发现的流程图:
上述流程中,服务提供者通过 Dubbo 提供的功能将自己注册到注册中心,注册中心将这些服务提供者的信息存储起来。服务消费者在需要调用某个服务时,首先从注册中心获取可用的服务提供者列表,然后根据负载均衡策略选择一台服务提供者进行调用。最终,服务消费者通过网络调用服务提供者提供的服务。
在实现上述流程时,涉及到以下组件、模块:
除此之外,还需要进行一些配置,如服务提供者需要将自己注册到 ZooKeeper 上,服务消费者需要配置 Dubbo 与 Spring Cloud 的整合等。
以下是基于Spring Cloud的Dubbo服务注册与发现实现步骤:
在项目的pom.xml文件中添加Spring Cloud依赖:
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>
dependency>
在项目的pom.xml文件中添加Dubbo依赖:
<dependency>
<groupId>com.alibabagroupId>
<artifactId>dubboartifactId>
<version>2.7.8version>
dependency>
在Spring Boot应用的配置文件中添加Dubbo配置:
dubbo:
application:
name: dubbo-demo-provider
registry:
address: http://localhost:8761/eureka/
protocol:
name: dubbo
port: 20880
scan:
base-packages: com.example.dubbo.demo.provider.service
在Dubbo服务的实现类上添加@DubboService注解,例如:
@DubboService
@Service
public class UserServiceImpl implements UserService {
@Override
public User getUserById(Long id) {
// ...
}
}
在Spring Boot应用的入口类中添加@EnableDubbo注解,例如:
@SpringBootApplication
@EnableDubbo
public class DubboDemoProviderApplication {
public static void main(String[] args) {
SpringApplication.run(DubboDemoProviderApplication.class, args);
}
}
在另一个终端窗口中启动Eureka Server:
$ java -jar eureka-server.jar
在另一个Spring Boot应用中使用Dubbo服务:
@SpringBootApplication
@EnableDubbo
public class DubboDemoConsumerApplication {
@DubboReference
private UserService userService;
public static void main(String[] args) {
SpringApplication.run(DubboDemoConsumerApplication.class, args);
}
@GetMapping("/users/{id}")
public User getUser(@PathVariable Long id) {
return userService.getUserById(id);
}
}
访问http://localhost:8080/users/1
可以调用Dubbo服务并返回用户信息。
Dubbo高手之路1,Dubbo原理和机制,Dubbo的核心组件
Dubbo高手之路2,6种扩展机制详解
Dubbo高手之路3,Dubbo服务消费详解
Dubbo高手之路4,Dubbo服务提供者详解
这是一本从功能模块、技术实现、平台构建、业务应用4个层次由浅入深地讲解用户画像的著作。作者在某头部互联网公司经历了其用户画像平台从0到1并发展为画像中台的全过程,打下了扎实的技术功底,积累了丰富的业务经验,本书从技术和业务双重维度对整个过程进行了复盘。
具体来讲,本书主要包含如下内容:
(1)画像的作用、业界主流的4种商用画像平台的核心功能和实现逻辑;
(2)画像平台的主要功能、画像平台的技术架构与技术选型、画像平台的数据模型;
(3)画像平台4大功能模块:标签管理、标签服务、分群功能、画像分析的实现方案;
(4)从0到1搭建用户画像平台,包括环境搭建和前、后端工程框架搭建;
(5)画像平台在用户的不同生命周期阶段和各种业务场景中如何为业务赋能;
(6)画像平台的优化和最佳实践。
书中有200+设计图和原型图,可以帮助读者更加直观地了解平台的实现原理及功能形态。20+真实应用案例,技术方案和案例均来自真实的项目。本书提供可运行的代码,能帮助读者快速搭建并部署用户画像平台。
图书数量:本次送出 5 本《用户画像:平台构建与业务实践》 !!!
活动时间:截止到 2023-09-22 21:00:00
抽奖方式:
⭐️⭐️点击下方名片,回复0922,即可参与⭐️⭐️
哪吒会在朋友圈公布中奖名单。
名单公布时间:2023-09-22 21:10:00