Dubbo项目入门

摘要: Dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。 它的特性如下 面向接口代理的高性能RPC调用 智能负载均衡 服务自动注册与发现 高度可扩展能力 运行期流量调度 可视化的服务治理与运维 Talk is cheap, Show me the code。

 

Dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。 
它的特性如下

  • 面向接口代理的高性能RPC调用
  • 智能负载均衡
  • 服务自动注册与发现
  • 高度可扩展能力
  • 运行期流量调度
  • 可视化的服务治理与运维

Talk is cheap, Show me the code。现在来着手搭建一个Dubbo项目吧。

搭建一个xml配置的Dubbo项目

创建三个项目

  • service-api 服务提供者和服务消费者共用的接口
  • service-consumer 服务消费者
  • service-provider 服务提供者

共用的接口

先在service-api定义一个公用接口

public interface DemoService {String sayHello(String name);
}

服务提供者

服务提供者service-provider提供一个DemoService的实现类

public class DemoServiceImpl implements DemoService {@Overridepublic String sayHello(String name) {System.out.println("[" + LocalDate.now() + "] Hello " + name );return "Hello " + name;}}

编写xml配置文件

配置应用名称

<dubbo:application name="demo-provider"/>

配置注册中心

可以使用Multicast、Redis、Zookeeper、Simple这四个作为注册中心。

<dubbo:registry address="multicast://224.5.6.7:1234"/>

配置协议

默认为dubbo

<dubbo:protocol name="dubbo" port="20880"/>

定义bean

然后定义bean,以及将bean作为服务暴露出去

<bean id="demoService" class="com.learnDubbo.demo.provider.DemoServiceImpl"/><dubbo:service interface="com.learnDubbo.demo.DemoService" ref="demoService"/>

main函数

编写一个main函数用于启动服务提供者

public static void main(String[] args) throws Exception {ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("dubbo-provider.xml");context.start();System.in.read();//用于阻塞函数,使其一直运行
}

服务消费者

服务消费者需要调用service-provider 服务提供者提供的DemoService实现类
同样需要编写xml文件,配置文件和服务提供者的类似,不同的是需要将暴露服务的配置修改为引用服务的配置,如下

引用服务

<dubbo:reference id="demoService" interface="com.learnDubbo.demo.DemoService"/>

main函数

编写一个main函数用于启动服务消费者,然后一直循环调用服务提供者提供的服务

public static void main(String[] args) {ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("dubbo-consumer.xml");context.start();DemoService demoService = (DemoService) context.getBean("demoService"); // 调用服务提供者提供的服务while (true) {try {Thread.sleep(1000);String hello = demoService.sayHello("Dubbo"); // call remote methodSystem.out.println(hello); // get result} catch (Throwable throwable) {throwable.printStackTrace();}}
}

测试

先启动service-provider项目,然后在启动service-consumer,输出结果如下 

搭建一个注解的Dubbo项目

服务提供者和服务消费者共用的接口还是使用service-api,新建下面两个项目

  • service-consumer-annotation 基于注解的服务消费者
  • service-provider-annotation 基于注解的服务提供者

基于注解的服务提供者

新建一个springboot项目
同样需要提供一个DemoService的实现类,且在类上增加@Service注解

注:是com.alibaba.dubbo.config.annotation.Service
不是org.springframework.stereotype.Service
别导错了

接下来需要增加dubbo的配置类

@Configuration
public class DubboConfiguration {/*** 对应xml配置:<dubbo:application name="demo-provider"/>* @return*/@Beanpublic ApplicationConfig applicationConfig() {ApplicationConfig applicationConfig = new ApplicationConfig();applicationConfig.setName("demo-provider--annotation");return applicationConfig;}/*** 对应xml配置:<dubbo:registry address="multicast://224.5.6.7:1234"/>* @return*/@Beanpublic RegistryConfig registryConfig() {RegistryConfig registryConfig = new RegistryConfig();registryConfig.setAddress("multicast://224.5.6.7:1234");return registryConfig;}
}

最后一步在启动类上增加注解@DubboComponentScan(basePackages = "com.learnDubbo.demo.provider.service")basePackages自行修改为提供服务类所在的包路径

基于注解的服务消费者

也是需要有一个配置类,和服务提供者类似,这里就不贴代码了 
接下来创建一个Controller,用于测试结果,代码如下

@RestController
public class DemoController {@Referenceprivate DemoService demoService;@GetMapping("sayHello")public String sayHello(){return demoService.sayHello("Dubbo");}
}

@Reference注解表示引用服务类似于xml配置

<dubbo:reference id="demoService" interface="com.learnDubbo.demo.DemoService"/>

在项目启动类上同样需要注解@DubboComponentScan指定dubbo扫描路径

测试

同xml配置的一样,需要先启动服务提供者


配置信息

配置信息主要包括3大块,注册中心、协议和schema配置

注册中心

注册中心总共有4个,如下

注册中心简要说明dubbo文档介绍
Multicast不需要启动任何中心节点,只要广播地址一样,就可以互相发现。链接
zookeeperApacahe Hadoop 的子项目,是一个树型的目录服务,支持变更推送,适合作为 Dubbo 服务的注册中心,工业强度较高,可用于生产环境,并推荐使用。链接
Redis一个高效的 KV 存储服务器 , 从 2.1.0 版本开始支持 。链接
Simple一个普通的 Dubbo 服务,可以减少第三方依赖,使整体通讯方式一致。链接

使用Redis注册中心

当使用Redis注册中心,需先把服务提供方和消费放的注册中心xml配置修改为下方

<dubbo:registry address="redis://localhost:6379"/>

对应的redis会产生如下数据 

可以看到有两个key,分别对应服务提供者和消费者。两个key对应的数据类型为Hash,可以看到服务消费者key的数据如下

1) "consumer://192.168.79.170/com.learnDubbo.demo.DemoService?
application=democonsumer&category=consumers&check=false&dubbo
=2.6.2&interface=com.learnDubbo.demo.DemoService&methods=
sayHello&pid=14208&side=consumer&timestamp=1534389723130"
2) "1534389813690"

第一个为URL址,第二个为过期时间。 
官网给的图如下 

使用Zookeeper注册中心

当使用Zookeeper注册中心,需先把服务提供方和消费放的注册中心xml配置修改为下方

<dubbo:registry address="zookeeper://localhost:2181"/>

对应的Zookeeper会产生如下数据 

下图是官网给出的数据图 

有些出入,但大致还是相同的,多了configurators和routers。
当服务提供者启动时: 会创建对应的目录结构,例如我上面代码中的共用接口名为com.learnDubbo.demo.DemoService,就会创建 /dubbo/com.learnDubbo.demo.DemoService目录,然后在创建providers目录,再在providers目录下写入自己的 URL 地址。 
当服务消费者启动时:会在/dubbo/com.learnDubbo.demo.DemoService目录创建 consumers目录,并在consumers目录写入自己的 URL 地址。 
当监控中心启动时: 订阅 /dubbo/com.learnDubbo.demo.DemoService 目录下的所有提供者和消费者 URL 地址。

协议

协议简要说明dubbo文档介绍
dubboDubbo 缺省协议采用单一长连接和 NIO 异步通讯,适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况。链接
rmiRMI 协议采用 JDK 标准的 java.rmi.* 实现,采用阻塞式短连接和 JDK 标准序列化方式。链接
hessianHessian 协议用于集成 Hessian 的服务,Hessian 底层采用 Http 通讯,采用 Servlet 暴露服务,Dubbo 缺省内嵌 Jetty 作为服务器实现。链接
http基于 HTTP 表单的远程调用协议,采用 Spring 的 HttpInvoker 实现。链接
webservice基于 WebService 的远程调用协议,基于 Apache CXF 的 frontend-simple 和 transports-http 实现 。链接
thrift当前 dubbo 支持的 thrift 协议是对 thrift 原生协议的扩展,在原生协议的基础上添加了一些额外的头信息,比如 service name,magic number 等。链接
memcached基于 memcached实现的 RPC 协议。链接
redis基于 Redis 实现的 RPC 协议。链接
rest基于标准的Java REST API——JAX-RS 2.0(Java API for RESTful Web Services的简写)实现的REST调用支持链接

schema配置的涉及的东西有点多这里就不列出来了


参考资料:Dubbo官网

官网的介绍都很详细了,从官网中一般都能获取到你想到的信息。

有需要查看这篇博文的源码的可以点这里:Github地址

 

原文链接

本文为云栖社区原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/521180.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux 编辑器_Linux的vi编辑器详细总结

《大数据和人工智能交流》头条号向广大初学者新增C 、Java 、Python 、Scala、javascript 等目前流行的计算机、大数据编程语言&#xff0c;希望大家以后关注本头条号更多的内容。vi是linux的文本编辑器&#xff0c;vim是vi编辑器的增强版本&#xff0c;习惯上也称为vi一、vi编…

聊聊困扰很多同学的一个问题:是否要转方向 ?

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | 大飞码字责编 | 阿秃这篇来聊聊困扰很多同学的一个问题&#xff1a;是否要转方向 ?这类问题没有标准的答案&#xff0c;每个人的理解也不一样&#xff0c;我写下的也只是我个人的想法&#xff0c;仅供大家参考。iOS 开发本…

傅里叶变换处理sar图像_SAR和ISAR雷达的基础知识

合成孔径雷达(SAR)和逆合成孔径雷达(ISAR)是使用雷达绘制静止物体(通常为地形)的方法。SAR/ISAR系统部署在飞机或卫星上&#xff0c;它们相对于地球表面或任何可能静止的物体或地形进行高速移动。SAR/ISAR得益于以下现象&#xff1a;相对于地形水平方向上的物体和/或天线&#…

带你玩转Logview: MaxCompute Logview参数详解和问题排查

Logview是MaxCompute Job提交后查看和Debug任务的工具。通过Logview可看到一个Job的运行状态、运行结果以及运行细节和每个步骤的进度。当Job提交到MaxCompute后&#xff0c;会生成Logview的链接&#xff0c;用户可以直接在浏览器上打开Logview链接&#xff0c;进入查看Job的信…

Linux Shell脚本专栏_找出占用CPU/内存过高的进程_05

文章目录找出占用CPU/内存过高的进程1. 脚本2. 运行脚本3. 效果图找出占用CPU/内存过高的进程 1. CPU 过高的进程2. 内存 过高的进程1. 脚本 #/bin/bash echo "----------------------- CPU TOP 10------------------------" ps -eo user,pid,pcpu,pmem,args --sort…

阿里云大数据计算服务MaxCompute命令行工具——odpscmd的操作使用

在MaxCompute生态中&#xff0c;命令行工具究竟处于什么样的位置&#xff1f;它又发挥着什么样的作用&#xff1f;能够帮助开发者如何更好使用MaxCompute&#xff1f;在本文中&#xff0c;阿里巴巴计算平台产品专家曲宁将通过一个完整简单的小例子为大家介绍MaxCompute命令行工…

数组的合并和升序排列_区间调度问题之区间合并

读完本文&#xff0c;你可以去力扣拿下如下题目&#xff1a;56.合并区间-----------上篇文章用贪心算法解决了区间调度问题&#xff1a;给你很多区间&#xff0c;让你求其中的最大不重叠子集。其实对于区间相关的问题&#xff0c;还有很多其他类型&#xff0c;本文就来讲讲区间…

哈工大、清华、CSDN、嵌入式视觉联盟合办的 AIoT 盛会,你怎么舍得错过?!

2019 嵌入式智能国际大会即将来袭&#xff01;随着物联网和人工智能技术的飞速发展与相互渗透&#xff0c;万物智联的新赛道已经开始显现。据中商产业研究院《2016—2021年中国物联网产业市场研究报告》显示&#xff0c;预计到2020年&#xff0c;中国物联网的整体规模将达2.2万…

mysql提交事务_mysql事务的实现原理

此篇文章算是对mysql事务的一个总结&#xff0c;基本把mysql事务相关的知识点都涵盖到了&#xff0c;面试问来问去无非也就是这些&#xff0c;在了解这些之前我们先对mysql在执行的过程中有一个整体的认识&#xff0c;如下图如上图所示&#xff0c;MySQL服务器逻辑架构从上往下…

Linux Shell脚本专栏_查看网卡的实时流量_06

文章目录查看网卡的实时流量1. 脚本内容2. 运行脚本查看网卡的实时流量 一个服务器的流量基本可以评估出当前服务器的负载和业务的访问情况&#xff0c;这样更有利于对当前服务器一个大致的了解&#xff0c;这也是在日常的监控中这个流量是必不可少的&#xff01; 本案例&…

MaxCompute 多租户数据安全体系

很多用户对MaxCompute多租户数据安全体系感兴趣&#xff0c;我们将对其进行系统介绍&#xff0c;主要包括如下内容&#xff1a; MaxCompute 用户认证MaxCompute 项目空间内的访问控制和权限管理MaxCompute 跨项目空间的访问控制和权限管理MaxCompute 常见错误解析 基本术语 p…

如果批评《说好不哭》不自由,则赞美周杰伦无意义

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | 朱小五and王小九责编 | 阿秃从前从前有个人爱你很久&#xff0c;但偏偏风渐渐把距离吹得好远。——《晴天》他来了&#xff0c;他来了&#xff0c;他带着新歌mv和跟他一样胖了一圈的阿信来了。周杰伦新歌《说好不哭》一上线…

面向云数据库,超低延迟文件系统PolarFS诞生了

随着国内首款Cloud Native自研数据库POLARDB精彩亮相ICDE 2018的同时&#xff0c;作为其核心支撑和使能平台的PolarFS文件系统的相关论文"PolarFS: An Ultra-low Latency and Failure Resilient Distributed File System for Shared Storage Cloud Database"也被数据…

Data Lake Analytics-数据分析时代迎来新变革

前言 近期阿里云重磅推出新的数据分析引擎Data Lake Analytics&#xff0c;Data Lake Analytics是Serverless化的交互式联邦查询服务。无需ETL&#xff0c;使用标准SQL即可分析与集成对象存储(OSS)、数据库(PostgreSQL/MySQL/SQL Server等)、NoSQL(TableStore等)数据源的数据。…

这款耳机堪比千元级的AirPods

你如果问我&#xff1a;生活中你觉得必不可少的一件电子产品是什么&#xff1f;那么我会毫不犹豫的回答你&#xff1a;是耳机&#xff01;出门忘带耳机是绝对不能忍听不听没关系&#xff0c;但是有它比较安心我觉得生活中不仅是我很多人都对耳机有一种依赖因为很多人都喜欢音乐…

java 发送邮件_Jenkins实现自动化邮件发送踩坑记录

文章简介本文分享Jenkins实现邮件发送&#xff0c;安装Jenkins可参考jenkins安装。写这篇文章&#xff0c;是在实际使用Jenkins过程中遇到这样一个问题&#xff0c;当每次Jenkins构建成功或者失败后&#xff0c;需要个人登录Jenkins查看构建结果&#xff0c;同时在构建前做了数…

Linux Shell脚本专栏_监控100台服务器磁盘利用率脚本_07

文章目录监控100台服务器磁盘利用率脚本1. 远程连接生成sshkey2. 复制ssh公钥到目标服务器3. 登录目标服务器查看4. 私钥免登录5. 192.168.43.134 服务器创建host,info文件6. 编辑脚本7. 赋予可执行权限8. 运行脚本9. 命令分解监控100台服务器磁盘利用率脚本 1. df -h 查看磁盘…

在linux下安装python3_【转】在Linux下安装python3

原文链接&#xff1a;http://www.cnblogs.com/feng18/p/5854912.html1、linux下安装python3a、 准备编译环境(环境如果不对的话&#xff0c;可能遇到各种问题&#xff0c;比如wget无法下载https链接的文件)2 下载 Python3.5代码包wget https://www.python.org/ftp/python/3.5.0…

【举栗子】Docker 容器磁盘占满的几种情况 | CSDN博文精选

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | isea533转自 &#xff5c; CSDN博客责编 | 阿秃参考文档&#xff1a;https://docs.docker.com/engine/reference/commandline/dockerd/应用日志过多默认情况下&#xff0c;每个 Docker 容器都有 10G 的存储空间&#xff0c;…

下一代智能数据工厂,阿里云发布全新DataWorks

大数据的开发能力已经成为企业的核心竞争力之一, 企业对数据资产的管理、加工、利用的诉求也越来越强烈。 9月5日,阿里云发布了DataWorks V2版本, 可提升数据开发的效率并简化数据操作&#xff0c;为企业提供了安全可靠的一站式大数据智能云研发平台。 众所周知&#xff0c;企…