Dubbo架构

下图是Dubbo官网给出的架构图

下表是节点角色的介绍

序号 角色 作用
1 Provider 服务的提供方,并暴露服务给注册中心
2 Consumer 调用远程服务的服务消费方
3 Registry 服务注册与发现的注册中心,推荐使用Zookeeper
4 Monitor 统计服务的调用次数和调用时间的监控中心
5 Container 服务运行容器,一般使用Tomcat或Jetty

调用关系说明
0:服务容器(Container)负责启动,加载,运行服务提供者。
1:服务提供者(Provider)在启动时,向注册中心(Registry)注册自己提供的服务。
2:服务消费者(Consumer)在启动时,向注册中心(Registry)订阅自己所需的服务。
3:注册中心(Registry)返回服务提供者地址列表给消费者(Consumer),如果有变更,注册中心将基于长连接推送变更数据给消费者(Consumer)。
4:服务消费者(Consumer),从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
5:服务消费者(Consumer)和提供者(Provider),在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

注册中心

对于服务提供方,它需要发布服务,而且由于应用系统的复杂性,服务的数量、类型也不断膨胀;
对于服务消费方,它最关心如何获取到它所需要的服务,而面对复杂的应用系统,需要管理大量的服务调用。
而且,对于服务提供方和服务消费方来说,他们还有可能兼具这两种角色,即既需要提供服务,有需要消费服务。
通过将服务统一管理起来,可以有效地优化内部应用对服务发布/使用的流程和管理。服务注册中心可以通过特定协议来完成服务对外的统一。

注册中心有很多种类型
1.Multicast 注册中心
2.zookeeper 注册中心(Dubbo官网推荐使用)
3.Redis 注册中心
4.Simple 注册中心

Dubbo-Demo分析

项目结构:
dubbo-api : 存放公共的服务接口;
dubbo-provider : 实现远程服务接口;
dubbo-consumer : 调用远程服务;

项目结构图,如下

dubbo-api
该模块是MAVEN项目,拥有独立的pom.xml,用来打包供提供者(Provider)和消费者(Consumer)使用。
只需要声明公共服务接口:

package com.alibaba.dubbo.demo;public interface DemoService {String sayHello(String name);}

dubbo-demo-provider
该模块也是MAVEN项目,有独立的pom.xml,用来打包供消费者(Consumer)使用。
DemoServiceImpl用来实现公共服务接口DemoService,以便消费者(Consumer)调用:

package com.alibaba.dubbo.demo.provider;import com.alibaba.dubbo.demo.DemoService;
import com.alibaba.dubbo.rpc.RpcContext;import java.text.SimpleDateFormat;
import java.util.Date;public class DemoServiceImpl implements DemoService {public String sayHello(String name) {System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "] Hello " + name+ ", request from consumer: " + RpcContext.getContext().getRemoteAddress());return "Hello " + name + ", response form provider: " + RpcContext.getContext().getLocalAddress();}}

公共服务接口DemoService即dubbo-api中声明的接口,只需要在dubbo-demo-provider的pom.xml中加入dubbo-api依赖

 <dependency><groupId>com.alibaba</groupId><artifactId>dubbo-demo-api</artifactId><version>${project.parent.version}</version></dependency>

provider.xml:用 Spring 配置声明暴露服务

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"xmlns="http://www.springframework.org/schema/beans"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsdhttp://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"><!-- 用于配置当前应用信息,不管该应用是提供者还是消费者 --><!-- 提供方应用信息,用于计算依赖关系 --><dubbo:application name="demo-provider"/><!-- 用于配置连接注册中心相关信息,官方推荐使用zookeeper注册中心暴露服务 --><!--使用 zookeeper 注册中心暴露服务,注意要先启动 zookeeper,端口默认2181 --><dubbo:registry address="zookeeper://127.0.0.1:2181"/><!-- 用于配置提供服务的协议信息,协议由提供方指定,消费方被动接受 --><!-- 默认使用dubbo协议在20880端口暴露服务 --><dubbo:protocol name="dubbo" port="20880"/><!-- 和本地bean一样实现服务 --><bean id="demoService" class="com.alibaba.dubbo.demo.provider.DemoServiceImpl"/><!-- 用于暴露一个服务,定义服务的元信息,一个服务可以用多个协议暴露,一个服务也可以注册到多个注册中心 --><dubbo:service interface="com.alibaba.dubbo.demo.DemoService" ref="demoService"/></beans>

Provider.java:加载 Spring 配置,启动服务

package com.alibaba.dubbo.demo.provider;import org.springframework.context.support.ClassPathXmlApplicationContext;public class Provider {public static void main(String[] args) throws Exception {// 获取IPV4地址,这句可以不要System.setProperty("java.net.preferIPv4Stack", "true");  // 加载Spring 配置ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"META-INF/spring/dubbo-demo-provider.xml"});context.start();System.out.println("服务已经启动...");    // 按任意键退出System.in.read(); }}

dubbo-demo-consumer
该模块也是MAVEN项目,有独立的pom.xml,也需要加入dubbo-api依赖

 <dependency><groupId>com.alibaba</groupId><artifactId>dubbo-demo-api</artifactId><version>${project.parent.version}</version></dependency>

consumer.xml:通过 Spring 配置引用远程服务

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"xmlns="http://www.springframework.org/schema/beans"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsdhttp://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"><!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 --><dubbo:application name="demo-consumer"/><!--使用 zookeeper 注册中心暴露服务,注意要先启动 zookeeper,端口默认2181 --><dubbo:registry address="zookeeper://127.0.0.1:2181"/><!-- 生成远程服务代理,可以和本地bean一样使用demoService --><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService"/></beans>

Consumer.java:加载Spring配置,并调用远程服务

package com.alibaba.dubbo.demo.consumer;import com.alibaba.dubbo.demo.DemoService;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class Consumer {public static void main(String[] args) {// 获取IPV4地址,不是必须的System.setProperty("java.net.preferIPv4Stack", "true");// 加载Spring配置ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"META-INF/spring/dubbo-demo-consumer.xml"});context.start();// 获取远程服务代理DemoService demoService = (DemoService) context.getBean("demoService"); System.out.println("消费已经启动...");    while (true) {try {Thread.sleep(1000);// 执行远程方法String hello = demoService.sayHello("world"); // 显示调用结果System.out.println(hello); } catch (Throwable throwable) {throwable.printStackTrace();}}}
}

运行流程和结果,参考上一篇博客Java实习日记(4)

参考链接:
http://dubbo.io/books/dubbo-user-book/
http://blog.csdn.net/noaman_wgs/article/details/70214612
http://blog.csdn.net/zgsdzczh/article/details/78664561
http://blog.csdn.net/top_code/article/details/51010614

Java实习日记(5)相关推荐

  1. 大三暑期去上海亚信实习日记

    实习日记 我是一名某三本院校的大三学生,专业是"数据科学与大数据技术",在钉钉时代,找到了我第一份实习.公司是亚信科技,应聘的岗位是JAVA开发,地点在上海. 2020年6月11日 ...

  2. 【日记】Java学习日记(第63天)持续无聊更新

    前言 Youtube上EJ Media(up主)的视频我依次学完了HTML.CSS.Javascript.Jquery.觉得他教得挺好的(短小精悍),就继续学他教的JAVA.感觉EJ教的都是些语法什么 ...

  3. css碎步测量,隧洞测量实习日记.doc

    隧洞测量实习日记 隧洞测量实习日记 篇一:隧道施工测量实习日记1 今天是我来到中遂股份合福高铁闽赣段七工区的第一天,是把自己所学的理论知识用到实践中来的时候了,很开心!这一天单位上的所有人对我的到来表 ...

  4. 从零基础到拿到网易Java实习offer,我做对了哪些事

    点击上方蓝字可以订阅哦! 作为一个非科班小白,我在读研期间基本是自学Java,从一开始几乎零基础,只有一点点数据结构和Java方面的基础,到最终获得网易游戏的Java实习offer,我大概用了半年左右 ...

  5. Java学习日记1——基础认知

    Java学习日记1--基础认知 学习Java阶段,如果发现不正确的描述,还请指正! 首先附上Java相关下载链接和配置教程链接 Java相关软件工具下载地址:官方下载 Java环境配置(win10配置 ...

  6. Java实习面试重点基础知识

    今天第一次参加面试,十分紧张,加上本身我就学艺不精,没系统学过Java去面Java实习,问出的许多问题我都没有回答出来,估计我的第一次实习生面试凉了. 不过总不能沉溺于过去,总结一下今天面试中我遇到的 ...

  7. java实习报告范文

      篇1:java实习报告范文一.前言 实习时间:20_年02月07号---20_年06月1号 实习地点:河北中信联信息技术有限公司软件开发实习生 实习目的:通过实习,培养学生树立理论联系实际的工作作 ...

  8. 关于java实习心得总结(十篇)

    关于java实习心得总结(篇一) 初次涉及Java领域,感觉到Java入门是好像没有C,C++入门快,工具也没有什么TurboC,VisualC++好用,什么JA_HOME,CLASSPATH,虚拟机 ...

  9. Java 实习要掌握的知识

    1. Java 基础知识: Java 基础语法:包括变量.常量.数据类型.运算符.流程控制语句等. 面向对象编程的概念:如类.对象.继承.多态.接口等. 异常处理机制:如 try-catch-fana ...

  10. 计算机网络维护日记,计算机网络维护实习日记.doc

    计算机网络维护实习日记.doc (11页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 19.90 积分 videoconference, Secreta ...

最新文章

  1. Linux 内核定时器使用 一 低精度定时器
  2. response.setHeader()的用法
  3. 差分约束系统之Bellman_Ford与Spfa判断负权回路
  4. highcharts x轴 按照时间 datetime排序
  5. 产品经理常犯的七大错误
  6. 心玮医疗发布75万股权回购计划 用于招揽和激励员工等
  7. 1201-统计数字问题
  8. 使用AIDL实现进程间的通信之复杂类型传递
  9. 记 计算机 科学学院 教师,学风浓厚,桃李芬芳—记计算机学院金国祥老师
  10. linux: 空指令(:)
  11. 公共管理和社会保障、旅游1994-2019年省级面板数据数据
  12. Xmapp安装配置和连接MySQL
  13. 对象语言和元语言(关于命题公式的证明和估值)
  14. 接受自己平庸真的很难吗?你知道163邮箱登陆界面是什么吗?
  15. 介绍中国传统节日的网页html,介绍中国传统节日
  16. 如何理解国产操作系统,现状又是如何?
  17. 【2010强悍教程】一次性永远激活7290自带浏览器上网和彩信收发功能,不能上网的进。...
  18. 计算机自动控制论文,精选:计算机在自动控制技术实践中的应用分析论文原稿...
  19. 关于时间戳和标准时间、国际标准时间的一些方法
  20. kpu 处理器_KPU · MaixPy 文档

热门文章

  1. biopython安装_Ubuntu中安装Biopython
  2. vue 富文本编辑器wangeditor 上传图片
  3. java文件 空心_解决Eclipse中java文件的图标变成空心J的问题
  4. 自动光学检测系统(AOI)光学成像系统设计
  5. Robomaster视觉教程(二)Win10+VS201x+Opencv3.4.x环境搭建
  6. 微信HOOK-微信逆向-微信公众号爬虫系统
  7. 软件开发成本工作量估算
  8. 微信小程序-weUI组件库
  9. 货币代码php,PHP货币换算程序代码_PHP教程
  10. 三阶科赫雪花PYTHON