1. 简介

Dubbo就是资源调度和治理中心的管理工具。

是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000+个服务提供3,000,000,000+次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点

Dubbo 就是类似于webservice的关于系统之间通信的框架,并可以统计和管理服务直接的调用情况(包括服务被谁调用了,调用的次数是如何,以及服务的使用状况)。

2. Dubbox工作原理

2.1 节点说明

2.1.1 Provider

暴露服务的服务提供方

2.1.2 Consumer

调用远程服务的服务消费方

2.1.3 Registry

服务注册与发现的注册中心

2.1.4 Monitor

统计服务的调用次调和调用时间的监控中心

2.1.5 Container

服务运行容器

2.2 调用关系说明

1) 0 服务容器负责启动,加载,运行服务提供者。

2) 1 服务提供者在启动时,向注册中心注册自己提供的服务

3) 2 服务消费者在启动时,向注册中心订阅自己所需的服务

4) 3 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者

5) 4 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用

6) 5 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心

可以通俗的理解成房主与租客的关系,提供方(Provider)是房东,消费方(Consumer)是租客,但是,租客不知道房东的信息,所以租客可以去找中介,中介有很多房源信息即房东的信息,注册中心(Registry)就好比中介,当房东要租房的时候,就像中介发布房源信息,中介将房源信息记录下,等到租客订阅。所以租客不必自己去找房东要房东的信息,直接找中介就可以了。

3. 注册中心

注册中心是一个软件,市面上注册中心有很多,dubbox官方推荐的注册中心是Zookeeper

关于Zookeeper的介绍,在另一篇笔记Zookeeper中有记载。

4. Dubbox本地 JAR包部署

因为Dubbox的坐标在maven仓库中没有,所以,我们需要手动将dubbox的jar包安装到我们的本地仓库中。

操作步骤:

1)将 dubbo-2.8.4.jar 文件放在本地磁盘的某个地方,例如,我存放在D盘根目录下,如图;

2)打开cmd控制台:输入命令;

mvn install:install-file -Dfile=d:\dubbo-2.8.4.jar -DgroupId=com.alibaba -DartifactId=dubbo -Dversion=2.8.4 -Dpackaging=jar

,如图:

查看本地仓库,如图:

5. 入门案例

5.1 服务提供者开发

完整项目GitHub地址:点击下载

5.1.1 创建service服务工程

5.1.2 文件内容

1)web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"><!-- 加载spring容器 --><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext*.xml</param-value></context-param><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener>
</web-app>

2)pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.bjc.dubbox.demo</groupId><artifactId>serviceDemo</artifactId><version>0.0.1-SNAPSHOT</version><packaging>war</packaging><properties>     <spring.version>4.2.4.RELEASE</spring.version></properties><dependencies><!-- Spring --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aspects</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jms</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId><version>${spring.version}</version></dependency>  <!-- dubbo相关 --><dependency><groupId>com.alibaba</groupId><artifactId>dubbo</artifactId><version>2.8.4</version>            </dependency><dependency><groupId>org.apache.zookeeper</groupId><artifactId>zookeeper</artifactId><version>3.4.6</version></dependency><dependency><groupId>com.github.sgroschupf</groupId><artifactId>zkclient</artifactId><version>0.1</version></dependency><dependency><groupId>javassist</groupId><artifactId>javassist</artifactId><version>3.11.0.GA</version></dependency></dependencies><build>  <plugins><plugin>  <groupId>org.apache.maven.plugins</groupId>  <artifactId>maven-compiler-plugin</artifactId>  <version>2.3.2</version>  <configuration>  <source>1.7</source>  <target>1.7</target>  </configuration>  </plugin>  <plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><configuration><!-- 指定端口 --><port>8081</port><!-- 请求路径 --><path>/</path></configuration></plugin></plugins>  </build></project>

3)applicationContext-service.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:p="http://www.springframework.org/schema/p"xmlns:context="http://www.springframework.org/schema/context"xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsdhttp://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"></beans>

4)业务接口与类编写

package com.bjc.service;public interface UserService {String getName();
}
package com.bjc.service.impl;import com.alibaba.dubbo.config.annotation.Service;
import com.bjc.service.UserService;// 注意:这里的service注解用的是dubbox的
@Service
public class UserServiceImpl implements UserService{@Overridepublic String getName() {return "Mary";}}

5)在配置文件applicationContext-service.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:p="http://www.springframework.org/schema/p"xmlns:context="http://www.springframework.org/schema/context"xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsdhttp://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"><!-- 访问Dubbox所要占用的端口(自己要占用的端口) 该配置可以省略 默认是20880--><dubbo:protocol name="dubbo" port="20881"></dubbo:protocol><!-- 当前服务工程名称,用于注册中心识别显示的名称 --><dubbo:application name="dubboxdemo-service"/>  <!-- 指定的注册中心的地址 这里的端口是服务端提供的端口号,是服务器上注册中心提供的端口--><dubbo:registry address="zookeeper://192.168.25.130:2181"/> <!-- 包扫描,扫描业务逻辑所在的包 --><dubbo:annotation package="com.bjc.service.impl" /> </beans>

6)测试

右键项目——>run as ——> maven build,如图:

在弹窗中Goals中输入tomcat启动命令:tomcat7:run

点击debug启动,如图:

5.2 服务调用者(消费者)开发

完成项目GitHub地址:点击下载

1)创建消费者工程

2)配置文件

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"><display-name>dubboxDemo_web</display-name><welcome-file-list><welcome-file>index.html</welcome-file><welcome-file>index.htm</welcome-file><welcome-file>index.jsp</welcome-file><welcome-file>default.html</welcome-file><welcome-file>default.htm</welcome-file><welcome-file>default.jsp</welcome-file></welcome-file-list><!-- 解决post乱码 --><filter><filter-name>CharacterEncodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>utf-8</param-value></init-param><init-param>  <param-name>forceEncoding</param-name>  <param-value>true</param-value>  </init-param>  </filter><filter-mapping><filter-name>CharacterEncodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>   <servlet><servlet-name>springmvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!-- 指定加载的配置文件 ,通过参数contextConfigLocation加载--><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:springmvc.xml</param-value></init-param></servlet><servlet-mapping><servlet-name>springmvc</servlet-name><url-pattern>*.do</url-pattern></servlet-mapping></web-app>

pom.xml

案例中与提供者一致就可以了

springMVC.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:p="http://www.springframework.org/schema/p"xmlns:context="http://www.springframework.org/schema/context"xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsdhttp://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"><mvc:annotation-driven ><mvc:message-converters register-defaults="false"><bean class="org.springframework.http.converter.StringHttpMessageConverter">  <constructor-arg value="UTF-8" /></bean>  </mvc:message-converters>  </mvc:annotation-driven></beans>

3)业务类编写

1. 拷贝提供方的service接口到消费方工程,如图:

2. 编写Controller

UserController.java

package com.bjc.controller;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;import com.alibaba.dubbo.config.annotation.Reference;
import com.bjc.service.UserService;@Controller
@RequestMapping("/user")
public class UserController {// 注意:这里需要使用dubbox提供的应用注解,该注解的作用是远程注入@Referenceprivate UserService userService;@RequestMapping("/showName")@ResponseBodypublic String showName(){return userService.getName();}}

注意:这里service注入使用的注解是@Reference

4)在springMvc.xml文件中 引入dubbox服务配置

<?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:p="http://www.springframework.org/schema/p"xmlns:context="http://www.springframework.org/schema/context"xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsdhttp://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"><mvc:annotation-driven ><mvc:message-converters register-defaults="false"><bean class="org.springframework.http.converter.StringHttpMessageConverter">  <constructor-arg value="UTF-8" /></bean>  </mvc:message-converters>  </mvc:annotation-driven><!-- 引用dubbo 服务 --><dubbo:application name="dubboxdemo-web" /><dubbo:registry address="zookeeper://192.168.25.130:2181"/><dubbo:annotation package="com.bjc.controller" /></beans>

5)测试

在浏览器输入网址:http://localhost:8082/user/showName.do

结果如图:

注意:有可能会报zookeeper timeOut 的错误,可能原因是Linux的防火墙没关闭,关闭防火墙就可以了

以root身份执行命令:chkconfig iptables off  关闭防火墙。

6. 管理中心部署

我们在开发时,需要知道注册中心都注册了哪些服务,以便我们开发和测试。我们可以通过部署一个管理中心来实现。其实管理中心就是一个web应用,部署到tomcat即可。

6.1 管理端安装

6.1.1 懒人方式获取war文件

所谓懒人方式就是直接将war包部署到tomcat上,点击下载,m1lv

6.1.2 源码编译方式生成war文件

该方式需要我们下载dubbox的源码dubbox-master.zip,将其解压之后,编译其中的dubbo-admin,如图:

源码下载地址:hcxf

操作步骤:

1)进入dubbo-admin,复制其地址D:\pinyougouSource\soft\dubbo\dubbox-master\dubbo-admin

2)打开cmd控制台,进入dubbo-admin目录,如图:

3)执行maven命令:mvn package -Dmaven.skip.test=true,如图:

注意: -Dmaven.skip.test=true 表示跳过测试

4)等待控制台出现如图所示信息,表示打包完成

5)查看admin目录,发现生成了一个target目录,如图:

6)进入target目录,文件 dubbo-admin-2.8.4.war 就是我们需要的war文件,如图:

6.1.3 部署war包

将生成的war上传到Linux服务器上的tomcat的webapps目录,如图:

6.2 运行

运行tomcat,在本地浏览器输入网址:http://192.168.25.130:8080/dubbo-admin/  ,如图:

输入用户名和密码:用户名与密码均为root,如图:

点击登录,进入管理控制台,如图:

6.3 管理中心简单使用

6.3.1 查看服务

选择 服务治理——>服务,如图:

点击服务,可以查看服务列表,如图;

6.3.2 查看服务提供者

服务治理——> 提供者,如图;

点击提供者,如图:

6.3.3 服务消费者

如图:

Dubbox——基本认识相关推荐

  1. 【分布式事务】tcc-transaction分布式TCC型事务框架搭建与实战案例(基于Dubbo/Dubbox)...

    一.背景 有一定分布式开发经验的朋友都知道,产品/项目/系统最初为了能够快速迭代上线,往往不太注重产品/项目/系统的高可靠性.高性能与高扩展性,采用单体应用和单实例数据库的架构方式快速迭代开发:当产品 ...

  2. 分布式服务框架 dubbo/dubbox 入门示例(转)

    dubbo是一个分布式的服务架构,可直接用于生产环境作为SOA服务框架. 官网首页:http://dubbo.io/ ,官方用户指南 http://dubbo.io/User+Guide-zh.htm ...

  3. dubbox 编译 和 测试

    因为 dubbox 并没有发布到maven中央仓库仓库中,所以需要我们自己到官网下载,自己编译,install 到本地. 1. 首先安装git客户端工具 TortoiseGit, 然后使用它将 dub ...

  4. 【Lolttery】项目开发日志 (五)目标dubbox,前进

    距离上一次开始使用dubbo已经有一段时间了,这段时间在项目的开发和实践中,对于dubbo有了更深的了解.今天终于决定抛弃原有的netty框架,正式转战dubbox dubbox是在阿里停止对dubb ...

  5. 分布式服务框架 dubbo/dubbox 入门示例

    dubbo是一个分布式的服务架构,可直接用于生产环境作为SOA服务框架. 官网首页:http://dubbo.io/ ,官方用户指南 http://dubbo.io/User+Guide-zh.htm ...

  6. 项目如何用jetty运行_阿里大牛教你如何用Dubbox+SpringBoot+Docker架构,实现双11项目...

    前言 本篇围绕秒杀抢购应用场景,对当下流行的Dubbox+ Spring Boot+Docker微服务架构解决方案进行讲解.主要内容包括微服务架构介绍.Dubbox 原理及运用.使用Spring Bo ...

  7. dubbo学习 三 dubbox概述

    当当网根据自身的需求,对dubbo进行了扩展就叫成了dubbox.具体的使用方法可以参照官网各种例子:http://dangdangdotcom.github.io/dubbox/ 支持rest风格远 ...

  8. SpringBoot之Dubbox

    2019独角兽企业重金招聘Python工程师标准>>> 上次springboot集成dubbo写过一个简单的demo调用的方式,由于spring版本的问题,这次使用duboox,完全 ...

  9. 在Windows平台上安装Dubbox框架

    在Windows平台上安装Dubbox框架 一.分布式系统概述 分布式处理方式越来越受到业界的青睐--计算机系统正在经历一场前所未有的从集中式向分布式架构的变革.分布式系统是一个硬件或软件组件分布在不 ...

  10. dubbox开发rest+json指南【转】

    http://dangdangdotcom.github.io/dubbox/rest.html 目录 概述 REST的优点 应用场景 快速入门 标准Java REST API:JAX-RS简介 RE ...

最新文章

  1. jdk和cglib代理
  2. linux目录默认权限是什么,linux文件目录默认权限(详解)
  3. Ganymed SSH-2 for Java
  4. Neutron 物理部署方案 - 每天5分钟玩转 OpenStack(68)
  5. 有向无环图的拓扑排序
  6. 多线程同步 通过实现Runnable的示例
  7. android xml 焦点,android TV 焦点选中放大效果
  8. 在64位的 CentOS 上只安装64位的软件包
  9. 清华大学操作系统OS学习(九)——页面置环算法:最优算法、先进先出算法(FIFO)、最近最久未使用算法(LRU)、 CLOCK法、最不常用算法(LFU) 、工作集置换算法、缺页率置环算法
  10. Base64原理及魔改更换码表
  11. 可以拍c语言答案的软件下载,c语言二级考试题库app下载-C语言二级考试题库 安卓版v2.3-PC6安卓网...
  12. R语言学习笔记(一)
  13. 【三年前端开发的思考】如何有效地阅读需求?
  14. 中国大学生实习大数据分析报告
  15. 如何将视频里的音乐提取出来
  16. 【转】C#sm2签名验签实现
  17. LeetCode刷题Python实录
  18. [The Java8 Virtual Machine Specification述]Chapter2
  19. 超详细的AR增强现实开发入门总结
  20. 【芝麻IP代理】详解Python爬虫必备框架—Scrapy

热门文章

  1. java玩gbc,GB/GBC游戏能玩?
  2. 【matlab excel数据相互导入】matlab数据导至excel,excel数据导至matlab
  3. 我的微语录周记2011-11-14---2011-…
  4. linux中python编译器_linux下python编译器
  5. 数据挖掘岗面试总结(拿到百度sp,腾讯offer)
  6. BlueHost香港虚拟主机稳定性分析
  7. 图片转换成文字怎么做?教你几种图片转文字方法
  8. eyemore发布全球首款AI视觉专用成像芯片,能否助推AI视觉产业跃迁?丨Xtecher 观察
  9. 信道编码与交织(理论与MATLAB实现)
  10. 使用星环科技transwarp根据日期增量迁移数据