仅用5分钟极速入门Dubbo使用教程

Dubbo是什么?

Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需要用的,只有在分布式的时候,才有dubbo这样的分布式服务框架的需求,并且本质上是个服务调用的东东,说白了Dubbo就是个远程服务调用的分布式框架(告别Web Service模式中的WSdl,以服务者与消费者的方式在dubbo上注册)

其核心部分包含:
1. 远程通讯: 提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。
2. 集群容错: 提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。
3. 自动发现: 基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器。

Dubbo能做什么?

1.透明化的远程方法调用,就像调用本地方法一样调用远程方法,只需简单配置,没有任何API侵入。     
2.软负载均衡及容错机制,可在内网替代F5等硬件负载均衡器,降低成本,减少单点。
3. 服务自动注册与发现,不再需要写死服务提供方地址,注册中心基于接口名查询服务提供者的IP地址,并且能够平滑添加或删除服务提供者。

介绍

在使用Dubbo开发时,我们一般将项目分为如下3个模块

api:将服务提供者和服务消费者都需要用到的接口放在api层
consumer:服务消费者
producer:服务提供者

假如有如下一个场景,我们需要查询用户的信息,用户请求发送到consumer这个服务,然后consumer这个服务调用producer这个服务获取到用户信息,并返回给用户

Api模块实现

用户信息封装到UserInfo类中,因为需要网络传输,所以需要实现序列化接口

public class UserInfo implements Serializable {

    private String userId;
    private String phoneNum;
    private String userAddress;

    public String getUserId() {
        return userId;
    }

    public void setUserId(String userId) {
        this.userId = userId;
    }

    public String getPhoneNum() {
        return phoneNum;
    }

    public void setPhoneNum(String phoneNum) {
        this.phoneNum = phoneNum;
    }

    public String getUserAddress() {
        return userAddress;
    }

    public void setUserAddress(String userAddress) {
        this.userAddress = userAddress;
    }
}

用户信息接口,producer模块写这个接口的实现,consumer模块写这个接口的调用

producer模块实现

我们只需要引入对应的starter和zookeeper模块即可方便的使用dubbo

<dependency>
  <groupId>org.apache.dubbo</groupId>
  <artifactId>dubbo-spring-boot-starter</artifactId>
  <version>2.7.3</version>
</dependency>
<dependency>
  <groupId>org.apache.dubbo</groupId>
  <artifactId>dubbo-dependencies-zookeeper</artifactId>
  <version>2.7.6</version>
  <type>pom</type>
  <exclusions>
    <exclusion>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
    </exclusion>
  </exclusions>
</dependency>

producer模块写接口的实现即可

@Service
public class UserServiceImpl implements UserService {

    @Override
    public UserInfo hello(String username) {
        UserInfo userInfo = new UserInfo();
        userInfo.setUserId("10");
        userInfo.setPhoneNum("15810554635");
        userInfo.setUserAddress("北京昌平");
        return userInfo;
    }
}

需要注意的一点是@Service注解是dubbo中的,初学者容易导入成spring框架的@Service,导致服务导出失败

import org.apache.dubbo.config.annotation.Service;

启动类上需要加上@EnableDubbo注解

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

application.yaml

server:
  port: 8081

spring:
  application:
    name: springboot-dubbo-producer

dubbo:
  registry:
    # 注册中心地址及协议
    address: zookeeper://myhost:2181

在application.yaml指定服务启动的端口,服务名字和注册中心的地址

consumer模块实现

consumer端只需要在需要调用的接口上加上@Reference注解,即可调用到producer端

@RestController
public class UserController {

    @Reference(check = false)
    private UserService userService;

    @RequestMapping("hello")
    public UserInfo hello(@RequestParam("id") String id) {
        return userService.hello(id);
    }

}

@Reference中check=false表示启动的时候不去管UserService服务是否能正常提供服务,这个值默认为true,表示当UserService不能提供服务时,会导致consumer端启动失败

application.yaml

server:
  port: 8080

spring:
  application:
    name: springboot-dubbo-consumer

dubbo:
  registry:
    protocol: zookeeper
    address: myhost:2181

同样在application.yaml指定服务启动的端口,服务名字和注册中心的地址

curl http://localhost:8080/hello

{
  "userId": "10",
  "phoneNum": "158****4635",
  "userAddress": "北京昌平"
}

可以看到使用RPC框架后,调用远程方法和调用本地方法一样简单

本文github地址:https://github.com/erlieStar/dubbo-learning

以上就是仅用5分钟极速入门Dubbo使用教程的详细内容,更多关于Dubbo使用的资料请关注我们其它相关文章!

(0)

相关推荐

  • 使用dubbo+zookeeper+spring boot构建服务的方法详解

    前言 互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,Dubbo是一个分布式服务框架,在这种情况下诞生的.现在核心业务抽取出来,作为独立的服务,使前端应用能更快速和稳定的响应. Dubbo是什么 Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合).从服务模型的角度来看,Dubbo采用的是一种非常简单的模型,要么是提供方提供服务,要么是消费方消费服

  • 使用Cloud Toolkit在IDEA中极速创建dubbo工程

    环境系统: 系统:win10专业版 1903 IDEA版本:ULTIMATE 2019.2.4 JDK: openjdk version "1.8.0_40" 一.安装Cloud Toolkit插件 1.在IDEA的欢迎页面中点击Configure菜单(标注1)下拉列表中的Plugins(标注2)进入IDEA插件管理面板 2.在插件搜索框(标注3)中输入Alibaba Cloud Toolkit后按Enter回车键后,下面的搜索列表(标注4)中会显示搜索出来的插件,点击右侧的插件介绍页

  • dubbo 管理控制台安装和使用详解

    关于dubbo的配置使用已经配置好了简单的示例,下面先记录下dubbo管理控制台的安装和使用(用的zookeeper的注册中心),在网上找了些按照示例 dubbo管理控制台开源部分主要包含: 提供者  路由规则  动态配置  访问控制  权重调节  负载均衡  负责人,等管理功能. 1.下载dubbo 我上传地址:http://download.csdn.net/detail/liweifengwf/7784901 官方地址:http://code.alibabatech.com/mvn/rel

  • Dubbo在Spring和Spring Boot中的使用详解

    一.在Spring中使用Dubbo 1.Maven依赖 <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>2.5.3.6</version> <exclusions> <exclusion> <groupId>log4j</groupId> <artif

  • springboot使用dubbo和zookeeper代码实例

    这篇文章主要介绍了springboot使用dubbo和zookeeper代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 创建服务接口模块 接口工程只提供接口,不提供实现,在后面的提供者和消费者中使用 在使用接口的模块中只需要写具体实现类,避免了在每个模块中重复编写接口 在接口中引入依赖包 <dependency> <groupId>org.projectlombok</groupId> <artifact

  • springcloud如何使用dubbo开发rpc服务及调用

    这篇文章主要介绍了springcloud如何使用dubbo开发rpc服务及调用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 spring cloud中基于springboot开发的微服务,是基于http的rest接口,也可以开发基于dubbo的rpc接口. 一,创建goodsService模块 1, 在创建的goodsService模块中再创建goodsServiceApi和goodsServiceServer模块 2,在oodsServic

  • 使用docker部署dubbo项目的方法步骤

    1.首先用springboot构建一个简单的dubbo测试程序,并引入相关依赖 编写公共接口api 编写provider实现UserSvice的方法,并暴露服务 编写provider的配置文件 编写Consumer 通过调用provider的服务获取user信息并返回 consumer的配置文件 测试程序已完成 在本地启动,看看程序是否能正常调用服务 启动zookeeper 先启动provider端再启动consumer端 通过dubbo的控制台看到我们的服务已经注册成功 通过访问本地,看到我们

  • 仅用5分钟极速入门Dubbo使用教程

    Dubbo是什么? Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案.简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需要用的,只有在分布式的时候,才有dubbo这样的分布式服务框架的需求,并且本质上是个服务调用的东东,说白了Dubbo就是个远程服务调用的分布式框架(告别Web Service模式中的WSdl,以服务者与消费者的方式在dubbo上注册) 其核心部分包含: 1. 远程通讯: 提供对多种基于长连接的NIO框架抽

  • 10 分钟快速入门 Python3的教程

    Python 是由吉多·范罗苏姆(Guido Van Rossum)在 90 年代早期设计. 它是如今最常用的编程语言之一.它的语法简洁且优美,几乎就是可执行的伪代码. 欢迎大家斧正.英文版原作 Louie Dinh @louiedinh 邮箱 louiedinh [at] [谷歌的信箱服务].中文翻译 Geoff Liu. 注意:这篇教程是基于 Python 3 写的.如果你想学旧版 Python 2,我们特别有另一篇教程. # 用井字符开头的是单行注释 """ 多行字符串

  • 21分钟 MySQL 入门教程

    21分钟 MySQL 入门教程 目录 一.MySQL的相关概念介绍 二.Windows下MySQL的配置 配置步骤 MySQL服务的启动.停止与卸载 三.MySQL脚本的基本组成 四.MySQL中的数据类型 五.使用MySQL数据库 登录到MySQL 创建一个数据库 选择所要操作的数据库 创建数据库表 六.操作MySQL数据库 向表中插入数据 查询表中的数据 更新表中的数据 删除表中的数据 七.创建后的修改 添加列 修改列 删除列 重命名表 删除整张表 删除整个数据库 八.附录 修改 root

  • Vue.js 60分钟快速入门教程

    vuejs是当下很火的一个JavaScript MVVM库,它是以数据驱动和组件化的思想构建的.相比于Angular.js,Vue.js提供了更加简洁.更易于理解的API,使得我们能够快速地上手并使用Vue.js. 如果你之前已经习惯了用jQuery操作DOM,学习Vue.js时请先抛开手动操作DOM的思维,因为Vue.js是数据驱动的,你无需手动操作DOM.它通过一些特殊的HTML语法,将DOM和数据绑定起来.一旦你创建了绑定,DOM将和数据保持同步,每当变更了数据,DOM也会相应地更新. 当

  • 30分钟快速入门掌握ES6/ES2015的核心内容(下)

    前言 在 30分钟掌握ES6/ES2015核心内容(上)我们讲解了es6最常用的一些语法:let, const, class, extends, super, arrow functions, template string, destructuring, default, rest arguments 俗话说打铁要趁热,今天我们继续讲es6其他几个非常有用的新特性. import export 这两个家伙对应的就是es6自己的module功能. 我们之前写的Javascript一直都没有模块化

  • 30分钟快速入门掌握ES6/ES2015的核心内容(上)

    前言 ECMAScript 6(以下简称ES6)是JavaScript语言的下一代标准.因为当前版本的ES6是在2015年发布的,所以又称ECMAScript 2015. 也就是说,ES6就是ES2015. 虽然目前并不是所有浏览器都能兼容ES6全部特性,但越来越多的程序员在实际项目当中已经开始使用ES6了.所以就算你现在不打算使用ES6,但为了看懂别人的你也该懂点ES6的语法了... 在我们正式讲解ES6语法之前,我们得先了解下Babel. Babel Babel是一个广泛使用的ES6转码器,

  • spring boot整合redis实现RedisTemplate三分钟快速入门

    引入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> RedisTemplate五种数据结构的操作 redisTemplate.opsForValue(); //操作字符串 redisTemplate.opsForHash();

  • 10分钟快速上手VueRouter4.x教程

    目录 写在前面 URL.hash与History 安装与使用流程 router-link和router-view router-link router-view 路由懒加载 动态路由 匹配所有路由 路由嵌套 写在最后 写在前面 Vue Router是Vue团队的研发的一款与Vue.js核心深度集成的一款路由插件,使Vue构建单页面程序变得非常的简单:Vue Router目前最新版本是4.X,也是Vue3推荐使用的版本,这篇文章我们就来学习一下Vue Router4.X. URL.hash与His

  • 详谈Ubuntu PowerShell(小白入门必看教程)

    早在去年八月份PowerShell就开始开源跨平台了,但是一直没有去尝试,叫做PowerShell Core. 这里打算简单介绍一下如何安装和简单使用,为还不知道PowerShell Core on Ubuntu的同学们提供一点小小的入门帮助,谢谢大家支持~ PowerShell Core是由Microsoft开发的运行在.Net Core上的开源跨平台的任务自动化和配置管理系统. 1.在Ubuntu 16.04上安装PowerShell Core a)导入公共存储库GPG秘钥 curl htt

  • VMware下仅主机模式(host-only)下的ip配置教程分享

    在编程学习中,很多时候,我们希望将数据库和软件的运行进行分离,比如软件通过ip地址连接到数据库进行存储操作,但由于学习成本有限,我们通常的办法是将数据库装在虚拟机上,在主机(host)上模拟一个远程连接的操作,此时就需要主机通过ip可以访问到VMware上安装的虚拟机. VMware的网络配置有三种:桥接.仅主机模式.NAT模式.桥接模式在连接有线的时候,可以直接获取ip,主机通过该ip可以访问虚拟机.但有时候我们是无线联网的状态,此时我们可以通过仅主机模式来使得主机可以访问到虚拟机. 1.右键

随机推荐