Dubbo是阿里巴巴开发的一个开源的高性能、高可用、可扩展的分布式RPC调用框架,致力于提供高性能和透明化的 RPC 远程调用服务解决方案。作为阿里巴巴 SOA 服务化治理方案的核心框架,目前已进入 Apache 孵化器项目。在单体应用时,不同业务模块部署在同一个JVM 进程内,这时通过本地调用就可以解决不同业务模块之间的相互引用;但在多体应用时,不同业务模块大多部署到不同的机器上,这时一个高效、稳定的RPC框架就显得特别重要了。Apache Dubbo 作为阿里巴巴开源的分布式RPC 框架,在进入Apache 孵化器项目后现已毕业。就目前来说Dubbo是java这块做分布式服务的流行方式。加之dubbo在云原生方面的探索都是我们作为java开发者应该且必须掌握的一门编程技术。就目前来说java的rpc框架包括hession都没有像dubbo这样支持负载均衡的功能。我们知道rpc调用其实相比http这种的各种json转化方便很多,而且不用关注类似鉴权等一些操作,个人觉得或许不是最好的解决方案。诸如此,作者计划学习一下dubbo,而本次学习本着深入了解的思路,尽量发掘dubbo的的设计方式,作为学习的开始,我们还是从demo开始吧。

1.创建父工程,其pom.xml为

<properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><my.version>2.7.6</my.version><api.version>1.0</api.version><web.version>2.3.3.RELEASE</web.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>${web.version}</version></dependency><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId><version>${my.version}</version></dependency><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-dependencies-zookeeper</artifactId><type>pom</type><version>${my.version}</version></dependency><dependency><groupId>com.scaffold.learn</groupId><artifactId>my-api</artifactId><version>${api.version}</version></dependency></dependencies></dependencyManagement>

2.创建my-api项目。

public class Entity implements Serializable {private String name;private int age;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Entity{" +"name='" + name + '\'' +", age=" + age +'}';}
}

创建rpc接口

public interface ShowApi {Entity show(String name, int age);
}

创建服务提供者

主要的pom.xml为

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.3.3.RELEASE</version></dependency><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId></dependency><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-dependencies-zookeeper</artifactId><type>pom</type></dependency><dependency><groupId>com.scaffold.learn</groupId><artifactId>my-api</artifactId></dependency></dependencies>

服务提供者实现接口

import com.scaffold.learn.api.ShowApi;
import com.scaffold.learn.api.entity.Entity;
import org.apache.dubbo.config.annotation.Service;@Service
public class ShowProvider implements ShowApi {@Overridepublic Entity show(String name, int age) {System.out.println("request\tname="+name+"\tage="+age);Entity entity=new Entity();entity.setName("dubbo-"+name);entity.setAge(age+1);return entity;}
}

启动函数

@SpringBootApplication
public class ProviderService {public static void main(String[] args) {SpringApplication.run(ProviderService.class,args);}
}

相关配置文件

server.port=8333
dubbo.scan.base-packages=com.scaffold.learn.provider
dubbo.application.name=dubbo-provider
dubbo.protocol.name=dubbo
## Random port
dubbo.protocol.port=-1
## Dubbo Registry
dubbo.registry.address=zookeeper://127.0.0.1:2181

3.服务消费者pom.xml文件   

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.3.3.RELEASE</version></dependency><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId></dependency><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-dependencies-zookeeper</artifactId><type>pom</type></dependency><dependency><groupId>com.scaffold.learn</groupId><artifactId>my-api</artifactId></dependency></dependencies>

对外接口:

@RestController
public class Api {@Referenceprivate ShowApi showApi;@GetMapping(value = "/test")public String testDubbo(){Entity entity = showApi.show("tianjingle",1);System.out.println(entity.toString());return entity.toString();}
}

启动函数

@SpringBootApplication
public class ConsumerService {public static void main(String[] args) {SpringApplication.run(ConsumerService.class,args);}
}

配置文件

server.port=8334spring.application.name=consumer
#dubbo.scan.base-packages=com.scaffold.learn.consumer
embedded.zookeeper.port=2181
## Dubbo Registry
dubbo.registry.address= zookeeper://127.0.0.1:${embedded.zookeeper.port}

4.启动zookeeper

5.启动服务提供者和消费者

在浏览器访问服务消费者接口

http://localhost:8334/test

以上demo我们采用apache dubbo来整合springboot,整个过程比较简单,要注意的是我们仅仅在配置文件中配置了dubbo的相关配置,项目就成功启动了。而在spirngboot中类似这种的自动化的配置,其实依靠的spring.factories这个文件,我们大概找一下就在这里,也就是说dubbo-spring-boot这个包自动的将我们需要暴露的rpc接口和rpc接口的依赖暴露或者注入进来,同时dubbo对于自动化配置解析也是这块做的。

我们学习dubbo本质上是为了更好的工作,了解dubbo中的一些特点和预留接口或许能够让解决很多未来潜在的业务难题,本次文章分享到这里。

午安~

Apace dubbo学习笔记(一)相关推荐

  1. 【转载保存】dubbo学习笔记

    Dubbo Dubbo简介 首先,我理解的Dubbo,从大的方向来看是单体应用到分布式应用过度期的一个产物,具体来说应该是分布式应用从早期的SOA到微服务过度的一个产物. 在编写分布式场景下高并发.高 ...

  2. Dubbo学习笔记:No provider available for the service ...异常问题的解决

    刚开始学习dubbo,先跑了一下github上面down下来的demo,开洞zookeeper,运行provider和consumer,实现远程调用.然后就自己敲代码,对逻辑做一点灵活性的改变.我也指 ...

  3. dubbo学习笔记 一 源码编译

    前面学习了netty和rocketmq,当然前面的文章还会继续更新,继续往下写 2016 没几天了,我打算写下dubbo 2017 继续深入源码,大家有啥问题 都可以一起来讨论 源码搭建 下载源码 同 ...

  4. dubbo学习笔记 第四章构建dubbo的web应用 上

    上一章节介绍了dubbo的开源项目自带的例子,但是这些例子都是直接运行main方法来跑代码,实际应用中我们更多地是需要使用web应用来支撑,接下来介绍一下如何搭建dubbo的web应用,我们将用的sp ...

  5. dubbo学习笔记 第三章简介dubbo的工作原理

    一.工作原理图 这是dubbo官网的关于dubbo工作原理,其中最核心的应该是Registry注册中心,Monitor,Consumer消费者和Provider服务提供者四个部分,注册中心关系这消费者 ...

  6. Dubbo学习笔记(二)

    引言 首先这里介绍一下Dubbo这个框架的官方网站.http://dubbo.apache.org/en-us/ ,提供一个开发文档的地址 http://dubbo.apache.org/en-us/ ...

  7. Dubbo学习笔记(一)

    引言 Dubbo(阿里)是一个被国内很多互联网公司广泛使用的开源分布式服务框架,这里强调的是服务,即使从国际视野来看应该也是一个非常全面的SOA基础框架.作为一个重要的技术研究课题.当当网根据自身的技 ...

  8. Dubbo学习笔记002---安装Zookeeper_并且安装Dubbo的管理控制台

    DUBBO的介绍部分我这里就不介绍了,大家可参考官方文档. DUBBO的注册中心zookeeper的安装在上一章节就有,大家可以参考我的安装过程:http://blog.csdn.net/zsq520 ...

  9. Dubbo学习笔记001---分布式服务调用_Dubbo简介_依赖zookeeper做为注册中心进行服务注册与发现

    JAVA技术交流QQ群:170933152 Dubbo是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000+个服务提供3,000,000,000+次访问量支持,并被广泛应用于阿里巴巴集团的各成员 ...

最新文章

  1. php多文件读写,php使用多个进程同时控制文件读写示例
  2. MySQL表的创建、删除、修改、复制(精品 必看)
  3. 芒果正式版7.1sdk和siverligt Toolkit for 芒果
  4. 四川航空签约神策数据,航司沉淀数据价值
  5. xul 创建一个按钮
  6. 一个域名解析到另一个域名_注册域名公司|教你如何注册一个.net域名
  7. 还对Angel平台一知半解?腾讯专家为你指点迷津!
  8. 2-06 使用网络存储SAN和NAS
  9. POJ 2159 解题报告
  10. JAVA中RGB字串转换为颜色
  11. 教学管理系统java_Java 实现简易教务管理系统的代码
  12. Tomcat热部署问题
  13. Python实现word的基本操作
  14. 但行好事 莫问前程(九月)
  15. 一文详解AndroidX,再也不会傻傻分不清了
  16. R语言的graphics画图功能
  17. 安卓开发学习——第四天
  18. UEFI开发与调试---edk2中的Package
  19. 卷积神经网络分类实战
  20. HC32F460+RTthread U盘使用详解

热门文章

  1. 干货丨如何使用DolphinDB进行机器学习
  2. 十三种基于直方图的图像全局二值化算法原理、实现、代码及效果
  3. 降薪跳槽的打工人:钱少了,快乐回来了
  4. 快手伪原创视频技巧 手机视频md5值修改器
  5. 合作协同进化算法概述(Cooperative Coevolution)
  6. html5在移动应用开发上的应用前景意义,HTML5在移动应用开发上应用与趋势研究.doc...
  7. 使用GITHUB笔记
  8. 太极拳诞生前的创造历程
  9. 为何excel中数据无法计算机,电脑excel表格数据改不了-Excel单元格里面的数字改不动怎么办...
  10. Activity与Service