一、Dubbo介绍
引用官方的一段介绍
Apache Dubbo (incubating) |ˈdʌbəʊ| is a high-performance, java based RPC framework open-sourced by Alibaba. As in many RPC systems, dubbo is based around the idea of defining a service, specifying the methods that can be called remotely with their parameters and return types. On the server side, the server implements this interface and runs a dubbo server to handle client calls. On the client side, the client has a stub that provides the same methods as the server.
Dubbo是阿里出的一个高性能的分布式微服务框架,它的特点是性能高、界面友好、文档齐全(特别是中文文档),是很多中小型公司快速搭建微服务的首选技术。前段时间被阿里重新进行维护,并进入Apache孵化器。迁移到Apache后也推出了新的starter,简单试用后感觉不错,为此特地写下这一系列笔记,用以记录。(整个项目的源码在最后一章,感兴趣的童鞋可以下载自己搭建试试,也可以将其作为脚手架搭建你自己的微服务)
二、搭建注册中心
在dubbo中,每一个服务都是分布式的,消费者与提供者的关系并不是一对一的关系,而是一对多,并且服务提供者的实例位置是未知的,如果都由开发者使用静态文件去维护这个关系显示不合适的,一方面是徒增工作量,另一方面是灵活度不高,如果服务提供者更换了服务器地址,那么需要重新配置等,所以目前比较推崇的方案是所有服务提供者均主动将自己的信息注册到同个地方中,而消费者只要一律从这个地方取他需要的东西即可,这个地方就是所谓的注册中心。目前dubbo可以选择的注册中心包括zookeeper、redis等,一般建议使用zookeeper,下面演示一下在windows中如何搭建zookeeper注册中心。
1、下载zookeeper
直接在官网的镜像站下 (https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/current/zookeeper-3.4.12.tar.gz)
2、解压并配置zookeeper
为了演示,直接使用官方示例配置。把解压出来的zookeeper-3.4.12confzoo_sample.cfg 文件名改为zoo.cfg即可,如下图:
3、运行zookeeper注册中心
双击运行/zookeeper-3.4.12/bin/zkServer.cmd,出现以下窗口代表运行成功。
三、搭建Dubbo Admin
在Dubbo中,一大杀器就是它的可视化监控界面,在这个界面中可以查看服务者、提供者的数量、状态等,并对服务降级、容错、屏蔽等提供了可视化操作。下面演示如何搭建Dubbo Admin。
1、下载源码并解压
点击下面地址下载dubbo admin项目源码 (https://codeload.github.com/apache/incubator-dubbo-ops/zip/master)
下载后解压出来,如下图:
2、打包
打开cmd,进入第一步解压出来的dubbo-admin文件夹中,执行mvn clean package
(ps:要是提示未存在mvn命令,就把maven文件夹的bin目录添加到系统环境变量PATH中)
3、配置dubbo admin
打开上面那步打出来的war包(incubator-dubbo-ops-masterdubbo-adminargetdubbo-admin-2.0.0.war),编辑WEB-INF文件夹中的dubbo.properties文件,如下图
将红框处的IP地址改为你的注册中心的地址,由于我们的注册中心是在本地运行的,故此处无需做修改。
4、运行Dubbo Admin
将war包改名为ROOT.war后放到tomcat的webapp目录中,然后运行tomcat。使用浏览器打开http://127.0.0.1:8080,提示输入账号密码,账号和密码默认均为root,登陆后的界面如下:
四、搭建API项目
由于Dubbo是采用RPC调用方式,这也是与Spring Cloud比较大的区别之一。在Spring Cloud中,服务通过HTTP接口提供给其它服务调用,对于调用者与被调用者来说,只要双方保证满足http接口的契约即可,但是在dubbo中,是严格要求调用接口的类路径、参数等双方一致。所以需要构建一个API项目,该项目里面存放服务接口即公共实体,双方依赖这个项目完成远程调用。
pom.xml
4.0.0com.czh.dubbo dubbo-common 0.0.1-SNAPSHOTUTF-8UTF-81.8
公共实体-People.java
package com.czh.dubbo.common.entity;import java.io.Serializable;public class People implements Serializable { /** * */ private static final long serialVersionUID = 1415852192397895853L; // 人员编号 private int id; // 姓名 private String name; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "People [id=" + id +