国内分布式框架Dubbo使用详解
作者:肥学 发布时间:2022-05-10 13:38:27
介绍
Dubbo 是一款高性能、轻量级的 Java RPC 框架,由阿里巴巴开源并贡献至 Apache 基金会。它能够提供服务的注册与发现、负载均衡、服务治理等功能,简化了分布式系统的开发过程。下面我们将详细介绍 Dubbo 的原理和使用方法,并附上相关的 Java 代码示例。
Dubbo的原理
Dubbo 的核心是一个基于 Java 序列化的远程过程调用(RPC)框架,它的工作流程可以分为如下几个步骤:
服务提供者向注册中心注册自己提供的服务。
服务消费者从注册中心获取服务提供者的地址,并建立连接。
服务消费者通过 RPC 调用远程服务,实现分布式调用
Dubbo 的架构中包含以下几个重要组件:
Provider:服务提供者,将服务发布到注册中心,供 Consumer 调用。
Consumer:服务消费者,从注册中心获取 Provider 的地址,并发起 RPC 调用。
Registry:注册中心,存储 Provider 的地址信息,供 Consumer 获取。
Monitor:监控中心,用于统计 Provider 的运行状态和性能指标。
Dubbo 支持多种协议和序列化方式,包括 Dubbo 协议、HTTP 协议、Hessian 协议、Thrift 协议等。同时,它还提供了负载均衡、服务容错、动态路由等功能,可以根据不同的需求进行配置。
基本使用
编写服务接口
public interface HelloService {
String sayHello(String name);
}
实现服务接口
public class HelloServiceImpl implements HelloService {
public String sayHello(String name) {
return "Hello, " + name;
}
}
配置Dubbo 在Dubbo的XML配置文件中定义服务提供者和注册中心,配置服务接口和实现类的关联。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
<!-- 指定服务提供者应用名 -->
<dubbo:application name="hello-provider"/>
<!-- 指定注册中心地址 -->
<dubbo:registry address="zookeeper://127.0.0.1:2181"/>
<!-- 指定通信协议和端口号 -->
<dubbo:protocol name="dubbo" port="20880"/>
<!-- 暴露服务 -->
<dubbo:service interface="com.example.HelloService" ref="helloService"/>
<!-- 服务接口和实现类的关联 -->
<bean id="helloService" class="com.example.provider.HelloServiceImpl"/>
</beans>
启动服务提供者 在服务提供者的main方法中启动Dubbo。
public class Provider {
public static void main(String[] args) throws Exception {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("provider.xml");
context.start();
System.in.read(); // 按任意键退出
}
}
服务提供者通过启动 Spring 容器来启动 Dubbo 服务,这里使用的是 ClassPathXmlApplicationContext,它会从类路径下加载 provider.xml 文件,初始化 Spring 容器并启动 Dubbo 服务。
编写服务消费者
public class Consumer {
public static void main(String[] args) {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("consumer.xml");
HelloService helloService = (HelloService) context.getBean("helloService");
String result = helloService.sayHello("world");
System.out.println(result);
}
}
配置Dubbo 在Dubbo的XML配置文件中定义服务消费者和注册中心。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
<!-- 指定服务消费者应用名 -->
<dubbo:application name="hello-consumer"/>
<!-- 指定注册中心地址 -->
<dubbo:registry address="zookeeper://127.0.0.1:2181"/>
<!-- 引用远程服务 -->
<dubbo:reference id="helloService" interface="com.example.HelloService"/>
</beans>
启动服务消费者
public class Consumer {
public static void main(String[] args) {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("consumer.xml");
HelloService helloService = (HelloService) context.getBean("helloService");
String result = helloService.sayHello("world");
System.out.println(result);
}
}
简单的使用就是这样,关于zookeeper我们下次在详细说一下。
来源:https://juejin.cn/post/7209919510722265149


猜你喜欢
- ActiveMQ 结合 Spring 收发消息直接使用 ActiveMQ 的方式需要重复写很多代码,且不利于管理,Spring 提供了一种更
- 这篇文章主要介绍了如何基于Java实现对象List排序,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋
- FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写FreeMarker被设计用来生成HTML Web
- 背景:新需求需要引入新jar包,引入后发现本地启动没有报错,发到测试环境提示某个bean无法创建,nested exception is j
- 前言我们之前学的单链表,默认只能从链表的头部遍历到链表的尾部,在实际中应用太少见,太局限;而双向链表,对于该链表中的任意节点,既可以通过该节
- 1、定义方法的格式 访问修饰符 返回类型 方法名 (参数列表) { // 方法的主体… }2、静态方法在大多数时候,我们定义写一个方法,会把
- 本文讲述了Android应用程序模型之应用程序,任务,进程,线程。分享给大家供大家参考,具体如下:大多数操作系统,在应用程序所寄存的可执行程
- 引导语Socket 面试最终题一般都是让你写一个简单的客户端和服务端通信的例子,本文就带大家一起来写这个 demo。1、要求可以使用 Soc
- @Order控制配置类/AOP/方法/字段的加载顺序1.AOP加载顺序 @Component &nbs
- 本文实例为大家分享了Android自定义View实现拖动自动吸边的具体代码,供大家参考,具体内容如下自定义View,一是为了满足设计需求,二
- 第一篇是纯利用现有JDK提供的绘图类(ImageIO)类制作,这个过程比较复杂且需要了解ImageIO类。这一篇文章是利用Hutool工具类
- from jnius import autoclass>>> Stack = autoclass('java.ut
- 1.剖析异或运算(^) 二元 ^ 运算符是为整型和 bool 类型预定义的。对于整型,^ 将计算操作数的按位“异或”。对于 bool 操作数
- 验证码逻辑以前在项目中也做过验证码,生成验证码的代码网上有很多,也有一些第三方的jar包也可以生成漂亮的验证码。验证码逻辑很简单,就是在登录
- 什么是状态管理状态管理是一个十分广泛的概念,因为状态无处不在。从广义角度讲状态管理就是页面跟代码、跟服务器进行数据同步。例如:你在某购物应用
- 本文实例为大家分享了Java实现学生管理系统的具体代码,供大家参考,具体内容如下1.学生管理系统(控制台界面实现)//学生类,继承Seria
- 本文实例讲述了Java Web实现添加定时任务的方法。分享给大家供大家参考,具体如下:定时任务时间控制类/** * 定时任务时间控制 * *
- 这几天Java项目中需要用到Redis,于是学习了一下使用Jedis来操作Redis服务器的相关知识,下面为具体的配置和代码。1、Maven
- Android权限一般是在AndroidManifest.xml中声明,在安装或首次使用的时候系统会自动提示用户是否提供权限Android官
- 一、题目描述题目实现:不同的客户端之间需要进行通信,一个客户端与指定的另一客户端进行通信,实现一对一聊天功能。实现一个客户端与指定的另一客户