国内分布式框架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
猜你喜欢
- 枚举是 C# 中最有意思的一部分,大部分开发人员只了解其中的一小部分,甚至网上绝大多数的教程也只讲解了枚举的一部分。那么,我将通过这篇文章向
- 问题介绍:用二维数组表示一个迷宫,设置迷宫起点和终点,输出迷宫中的一条通路实现思路:二维数组表示迷宫:0表示路且未走过、1表示墙、2表示通路
- 1.<constant name="struts.i18n.encoding" value="UTF-8
- 最近在研究android自定义控件属性,学到了TypedArray以及attrs。大家也可以结合《理解Android中的自定义属性》这篇文章
- 本文实例为大家分享了C++实现俄罗斯方块的具体代码,供大家参考,具体内容如下先是效果图:主菜单:游戏:设置:错误处理:代码:#include
- 直接调用HashKit.sha1(String str)方法就可以了,,返回的是16进制的字符串长度是40,也就是用md.digest()方
- 1.@RequestMapping注解1.1@RequestMapping注解的功能从注解名称上我们可以看到,@RequestMapping
- 想要在Ubuntu上运行java程序,可以将java程序编译成功后打包,然后在Ubuntu上用命令执行jar文件具体操作如下:1、Windo
- 本文实例讲述了c#窗体传值用法。分享给大家供大家参考。具体分析如下:对于窗体间的数据传递,是刚开始从事.Net窗体应用程序开发人员碰到的一个
- 1 配置多数据源时,application.yml 的有关mybatis的配置是失效的,因为他不知道配置哪一个数据源2 applicatio
- Statement 和 PreparedStatement之间的关系和区别. 关系:Prepa
- 首先看下面这一段代码:interface a{ void b();}interface a1 extends a{
- 最近需要对接支付宝的支付接口,官方文档写得内容有点分散,整理了一下发布出来,用作记录,同时也希望对不了解情况的人有所帮助,这里以电脑端的网页
- 首先是获取特定进程对象,可以使用Process.GetProcesses()方法来获取系统中运行的所有进程,或者使用Process.GetC
- 访问控制:private 私有的protected 受保护的public 公共的类、方法和变量修饰符abstract 声明抽象class 类
- 1、概述Spring Retry 是Spring框架中的一个组件,它提供了自动重新调用失败操作的能力。这在错误可能是暂时发生的(如瞬时网络故
- java接口返回参数按照请求参数进行排序在项目实际开发中可能遇到过这种问题,接口请求参数顺序是[a,b,c],结果返回的数据是[bObjec
- jdk中自带了很多工具可以用于性能分析,位于jdk的bin目录下,jvisualvm工具可以以图形化的方式更加直观的监控本地以及远程的jav
- 这是之前软工课设我写的java访问mysql工具类,它经过了多轮的测试,应该能够适应大多数的操作需求。比之前大二写的更鲁棒,更易用。pack
- 1,compareTo(Object o)方法是java.lang.Comparable<T>接口中的方法,当需要对某个类的对象