1.RPC  基本概念
1.1 RPC  协议(Remote Procedure Call Protocol)
远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC 协议假定某些传输协议的存在,如 TCP 或 UDP,为通信程序之间携
带信息数据。在 OSI 网络通信模型中,RPC 跨越了传输层和应用层。RPC 使得开发包括网络分布式程序在内的应用程序更加容易。
RPC 采用客户机/服务器模式。请求程序就是一个客户机,而服务提供程序就是一个务器。首先,客户机调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息。在服务器端,进程保持睡眠状态直到调用信息到达为止。当一个调用信息到达,服务器获得进程参数,计算结果,发送答复信息,然后等待下一个调用信息,最后,客户端调用进
程接收答复信息,获得进程结果,然后调用执行继续进行。

1.2 RPC  框架
在单机时代一台电脑运行多个进程,进程之间无法通讯,显然这会浪费很多资源,因此后来出现 IPC(Inter-process communication: 单机中运行的进程之间的相互通信 ),这样就
能允许进程之间进行通讯,比如在一台计算机中的 A 进程写了一个吃饭的方法,那在以前如果在 B 进程中也要有一个吃饭的方法,必须要在 B 进程中进行创建,但有了 RPC 后 B 只需
要调用 A 进程的程序即可完成,再到后来网络时代的出现, 大家电脑都连起来,这时可不可以调用其他电脑上的进程呢,当然可以,这样 RPC 框架就出现了。严格意义上来讲:Uni的生态系统中 RPC 可以在同一台电脑上不同进程进行,也可以在不同电脑上进行;而在windows 里面同一台电脑上不同进程间的通讯还可以采用 LPC(本地访问)。综上:RPC 或 LPC
是上层建筑,IPC 是底层基础。RPC 框架有很多:比如 Thrift、dubbo、grpc 等。

1.3 RPC 与 与 HTTP 、TCP 、UDP 、Socket  的区别
TCP/UDP: 都是传输协议,主要区别是 tcp 协议连接需要 3 次握手,断开需要四次挥手,是通过流来传输的,就是确定连接后,一直发送信息,传完后断开。udp 不需要进行连接,
直接把信息封装成多个报文,直接发送。所以 udp 的速度更快写,但是不保证数据的完整性。
Http:超文本传输协议是一种应用层协议,建立在 TCP 协议之上Socket:是在应用程序层面上对 TCP/IP 协议的封装和应用。其实是一个调用接口,方便程序员使用 TCP/IP 协议栈而已。程序员通过 socket 来使用 tcp/ip 协议。但是 socket 并不是一定要使用 tcp/ip 协议,Socket 编程接口在设计的时候,就希望也能适应其他的网络协议。
小结:我们把网络传输类比于一条公路,那 TCP/UDP 就是货车,HTTP 就是货物,而 socket就是发动机。
RPC 是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。所以 RPC 的实现可以通过不同的协议去实现比如可以使 http、RMI 等。

1.4 RPC  的运行流程
首先,要解决通讯的问题,主要是通过在客户端和服务器之间建立 TCP 连接,远程过程调用的所有交换的数据都在这个连接里传输。连接可以是按需连接,调用结束后就断掉,也
可以是长连接,多个远程过程调用共享同一个连接。

第二,要解决寻址的问题,也就是说,A 服务器上的应用怎么告诉底层的 RPC 框架,如何连接到 B 服务器(如主机或 IP 地址)以及特定的端口,方法的名称名称是什么,这样才能完成调用。比如基于Web服务协议栈的RPC,就要提供一个endpoint URI,或者是从UDDI(一种目录服务,通过该目录服务进行服务注册与搜索)服务上查找。如果是 RMI 调用的话,还需要一个 RMI Registry 来注册服务的地址。
第三,当 A 服务器上的应用发起远程过程调用时,方法的参数需要通过底层的网络协议如 TCP 传递到 B 服务器,由于网络协议是基于二进制的,内存中的参数的值要序列化成二
进制的形式,也就是序列化(Serialize)或编组(marshal),通过寻址和传输将序列化的二进制发送给 B 服务器。

第四,B 服务器收到请求后,需要对参数进行反序列化(序列化的逆操作),恢复为内存中的表达方式,然后找到对应的方法(寻址的一部分)进行本地调用,然后得到返回值

第五,返回值还要发送回服务器 A 上的应用,也要经过序列化的方式发送,服务器 A 接到后,再反序列化,恢复为内存中的表达方式,交给 A 服务器上的应用

JAVAEE 里面的 stub 是为屏蔽客户调用远程主机上的对象,必须提供某种方式来模拟本地对象,这种本地对象称为存根(stub),存根负责接收本地方法调用,并将它们委派给各自的具
体实现对象
Skeleton:服务器的骨架

1.5 RPC  基于 RMI 的 的 简单实现

2.Dubbo
2.1  框架基本概念

Dubbo 是由阿里巴巴开源的一个高性能、基于 Java 开源的远程调用框架。正如在许多RPC 系统中一样,dubbo 是基于定义服务的概念,指定可以通过参数和返回类型远程调用的方法。在服务器端,服务器实现这个接口,并运行一个 dubbo 服务器来处理客户端调用。在客户端,客户机有一个存根,它提供与服务器相同的方法。

Dubbo 提供三个核心功能:基于接口的远程调用、容错和负载均衡,以及服务的自动注册与发现。Dubbo 框架广泛的在阿里巴巴内部使用,以及京东、当当、去哪儿、考拉等都在
使用。

2.2 Dubbo  快速入门
2.2.1  系统要求
jdk1.6 以上和 maven3.0 以上,采用 maven 分模块构建 api 模块,provider
模块以及 consumer 模块
2.2.2  导包 Dubbo的坐标

2.2.3  定义服务接口
由于服务的生产者和消费者都会依赖这个接口,因此强烈建议把这个接口定义在一个独立的模块,然后由生产者模块和消费者模块各自依赖即可

2.3.4

2.3.5  配置 生产者
将服务接口进行发布 dubbo-demo-provider.xml 服务接口的发布,推荐使用spring 集成配置

<?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:dubbo="http://code.alibabatech.com/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/bea
ns http://www.springframework.org/schema/beans/spring-
beans.xsd http://code.alibabatech.com/schema/dubbo
http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<dubbo:application name="demo-provider"/>
<dubbo:registry address="multicast://224.5.6.7:1234"/>
<dubbo:protocol name="dubbo" port="20880"/>
<dubbo:service interface="com.shsxt.service.DemoService"
ref="demoService"/>
<bean id="demoService" class="
com.shsxt.impl.DemoServiceImpl"/>
</beans>

2.3.6  启动服务提供程序

public class Provider {
public static void main(String[] args) throws Exception {
ClassPathXmlApplicationContext context = new
ClassPathXmlApplicationContext(
new String[] {"classpath:dubbo-demo-
provider.xml"});
context.start();
System.in.read(); // press any key to exit
}
}

2.3.7配置服务的消费端

消费端配置 dubbo-demo-consumer.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:dubbo="http://code.alibabatech.com/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/bea
ns http://www.springframework.org/schema/beans/spring-
beans.xsd http://code.alibabatech.com/schema/dubbo
http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<dubbo:application name="demo-consumer"/>
<dubbo:registry address="multicast://224.5.6.7:1234"/>
<dubbo:reference id="demoService" interface="
com.shsxt.service.DemoService"/>
</beans>

2.3.8  启动服务消费 端 进行消费

public class Consumer {
public static void main(String[] args) throws Exception {
ClassPathXmlApplicationContext context = new
ClassPathXmlApplicationContext(
new String[]{"classpath:dubbo-demo-
consumer.xml"});
context.start();
DemoService demoService = (DemoService)
context.getBean("demoService"); // obtain proxy object for
remote invocation
String hello = demoService.sayHello("world"); //
execute remote invocation

System.out.println(hello); // show the result
}
}

3.Dubbo schema配置

https://dubbo.gitbooks.io/dubbo-user-book/configuration/xml.html

Dubbo  配置项说明

dubbo:application

应⽤信息配置。对应的配置类:com.alibaba.dubbo.config.ApplicationConfig

dubbo:registry

注册中⼼配置。对应的配置类: com.alibaba.dubbo.config.RegistryConfig。同时如果有多
个不 同的注册 中⼼, 可以声 明多个 <dubbo:registry> 标签 ,并在 <dubbo:service> 或
<dubbo:reference> 的 registry 属性指定使⽤的注册中⼼

dubbo:protocol

服务提供者协议配置。对应的配置类:com.alibaba.dubbo.config.ProtocolConfig,同时, 如
果需要⽀持多协议, 可以声明多个 <dubbo:protocol> 标签, 并在 <dubbo:service> 中通过
protocol 属性指定使⽤的协议

dubbo:service

服务提供者暴露服务配置。对应的配置类:com.alibaba.dubbo.config.ServiceConfig

dubbo:reference

服务消费者引⽤服务配置。对应的配置类: com.alibaba.dubbo.config.ReferenceConfig

dubbo:monitor

dubbo:module
模块信息配置。 对应的配置类 com.alibaba.dubbo.config.ModuleConfig

dubbo:provider

服务提供者缺省值配置。 对应的配置类: com.alibaba.dubbo.config.ProviderConfig 。 同时
该标签为 <dubbo:service>和 <dubbo:protocol> 标签的缺省值设置。

dubbo:consumer服务消费者缺省值配置。

配置类: com.alibaba.dubbo.config.ConsumerConfig 。 同时
该标签为 <dubbo:reference> 标签的缺省值设置。

dubbo:method

⽅法级配置。 对应的配置类: com.alibaba.dubbo.config.MethodConfig 。 同时该标签
为 <dubbo:service> 或<dubbo:reference> 的⼦标签, ⽤于控制到⽅法级。

Multicast  注册中心

配置

zookeeper注册中心

Zookeeper 是 Apacahe Hadoop 的子项目,是一个树型的目录服务,支持变更推送,适合作
为 Dubbo 服务的注册中心,工业强度较高,可用于生产环境,并推荐使用。

流程说明:
• 服务提供者启动时: 向 /dubbo/com.foo.BarService/providers 目录下写入自己
的 URL 地址
• 服务消费者启动时: 订阅 /dubbo/com.foo.BarService/providers 目录下的提供
者 URL 地址。并向 /dubbo/com.foo.BarService/consumers 目录下写入自己的
URL 地址
• 监控中心启动时: 订阅 /dubbo/com.foo.BarService 目录下的所有提供者和消费
者 URL 地址

支持以下功能:
• 当提供者出现断电等异常停机时,注册中心能自动删除提供者信息
• 当注册中心重启时,能自动恢复注册数据,以及订阅请求
• 当会话过期时,能自动恢复注册数据,以及订阅请求
• 当设置 <dubbo:registry check="false" /> 时,记录失败注册和订阅请求,后台
定时重试
• 可 通 过 <dubbo:registry username="admin" password="1234" /> 设 置
zookeeper 登录信息
• 可通过 <dubbo:registry group="dubbo" /> 设置 zookeeper 的根节点,不设置将
使用无根树
• 支持 * 号通配符 <dubbo:reference group="*" version="*" /> ,可订阅服务的
所有分组和所有版本的提供者

在 provider 和 consumer 中增加 zookeeper 客户端 jar 包依赖

Dubbo 支持 zkclient 和 curator 两种 Zookeeper 客户端实现

使用 curator

zookeeper 单机配置(provider和consumer都需要配置),一般来说,provider四个dubbo的标签,consumer三个dubbo的标签

Zookeeper  集群配置

同一 Zookeeper,分成多组注册中心

zookeeper 安装
安装方式参见: Zookeeper 安装手册,只需搭一个原生的 Zookeeper 服务器,并将 Quick
Start 中 Provider 和 Consumer 里 的 conf/dubbo.properties 中
的 dubbo.registry.addrss 的值改为 zookeeper://127.0.0.1:2181 即可使用。

修改配置文件

下载zookeeper之后

1,将zoo_sample.cfg重命名为zoo.cfg

2,修改zoo.cfg

dataDir=F:\data
dataLogDir=F:\log

3,打开bin目录,启动

provider的配置

consumer的配置

linux环境下大致同window

Linux 下Zookeeper 配置与启动
1.下载并解压
http://mirrors.hust.edu.cn/apache/zookeeper/zookeeper-3.4.13/zookeeper-3.4.13.tar.gz
2.准备zoo.cfg
添加
dataDir=/home/software/zkp/data
dataLogDir=/home/software/zkp/log
3.启动服务器
cd bin
./zkServer.sh start|stop|restart
客户端连接
cd bin
./zkCli.sh
4.节点查看命令
ls /
ls /dubbo/com.shsxt.api.IUserService
Dubbo 应用配置
provider 和 consumer
<dubbo:registry address="zookeeper://192.168.132.10:2181"></dubbo:registry>
坐标添加
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.3.3</version>
</dependency>

<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency>

ssm与dubbo的集成

https://github.com/liuqingfeng123456789/ssm_dubbo

dubbo的初探的更多相关文章

  1. Dubbo zookeeper 初探

    先把zookeeper在本地给安装好, 安装方法参考:http://blog.csdn.net/wxwzy738/article/details/16330253 这里的话讲述了两个工程一个工程是提供 ...

  2. Dubbo初探

    Dubbo是什么? 1.阿里巴巴开源项目.2.Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案. ps: SOA(面相服务的体系结构) RPC( ...

  3. DUBBO初探-搭建DUBBO开发环境

    我所理解的DUBBO 相对于传统web开发框架,dubbo更加适合于并行系统开发,分布式,模块化.将server和client都注册到zookeeper注册中心上,然后由最外层客户端发起请求到相应cl ...

  4. dubbo 初探

    dubbo官网:http://dubbo.io Dubbo背景和简介(摘自 http://blog.csdn.net/noaman_wgs/article/details/70214612) Dubb ...

  5. dubbo初探(转载)

    1. Dubbo是什么? Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案.简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需 ...

  6. Java分布式服务框架Dubbo初探(待实践)

    Dubbo是什么? Dubbo[]是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案. 其核心部分包含: 远程通讯: 提供对多种基于长连接的NIO框架抽象封 ...

  7. Spring+Dubbo+TestNG接口测试初探

    最近因工作原因,需要测试dubbo接口,通过公司同事写的框架,再结合度娘的帮助,自己做了一些总结记录. 通过下文意在说明如何搭建一个spring + dubbo + testng的测试环境,并完成一个 ...

  8. (转)Dubbo + Zookeeper入门初探

    一.搭建java和tomcat环境 二.搭建zookeeper 三.搭建dubbo监控中心 四.配置项目 4.1 服务提供方代码 4.2 服务使用方代码 五.测试 2018年2月15日,阿里巴巴的du ...

  9. 中间件——dubbo

    DUBBO初探-搭建DUBBO开发环境 2016年10月13日 12:27:49 NeroJings 阅读数:1697 标签: dubbo 更多 个人分类: dubbo   我所理解的DUBBO 相对 ...

随机推荐

  1. 给定一个字符串str,将str中连续两个字符为a的字符替换为b(一个或连续超过多个字符a则不替换)

    需求:给定一个字符串str,将str中连续两个字符为a的字符替换为b(一个或连续超过多个字符a则不替换) 如: a 不替换 b 不替换  ab 不替换 ba 不替换 aba 不替换  aab 替换为 ...

  2. gcc 与g++的区别

    原文 http://www.cnblogs.com/wb118115/p/5969775.html 什么是gcc / g++ 首先说明:gcc 和 GCC 是两个不同的东西 GCC:GNU Compi ...

  3. CNN-2: AlexNet 卷积神经网络模型

    1.AlexNet 模型简介 由于受到计算机性能的影响,虽然LeNet在图像分类中取得了较好的成绩,但是并没有引起很多的关注. 知道2012年,Alex等人提出的AlexNet网络在ImageNet大 ...

  4. K8S从入门到放弃系列-(4)kubernetes集群之kubectl命令行工具部署

    摘要:随着版本的不断迭代,k8s为了集群安全,集群中趋向采用TLS+RBAC的安全配置方式,所以我们在部署过程中,所有组件都需要证书,并启用RBAC认证. 我们这里采用二进制安装,下载解压后,把对应组 ...

  5. 20191011-构建我们公司自己的自动化接口测试框架-Util的htmlreport模块

    生成htmlreport的模块是我在网上随意找的一个版本,主要生成的report包括接口名称,接口url,请求数据,响应数据,断言词,断言结果等 具体的htmlreport代码如下: # -*- en ...

  6. 跟我一起学编程—《Scratch编程》第24课:幸运大转盘

    同学你好,欢迎来到<跟我一起学编程>,我是包老师.这是<Scratch3.0编程>课程的第24课,我这节课教你做一个抽奖游戏:幸运大转盘. 学习目标: 1. 能够熟练使用造型工 ...

  7. SAS学习笔记17 SAS生成随机数函数(rand function)

  8. 如何用Dome4j(2.2.1)创建Xml

    XML解析器常见的有两种: 1.SAX解析器,用于xml的简单API 2.DOM解析器,文档对象模型 DOM就是利用对象来把文本模型化,但是模型实现有以下几个基本的点: 1. 用来表示.操作文档的接口 ...

  9. jQuery.print.js

    登录网址https://github.com/DoersGuild/jQuery.print,下载js文件,进行简单的配置即可使用啦! 配置参数你可以在调用打印方法时传入一些参数: $("# ...

  10. 设计模式(四)——代理模式(Proxy)

    代理模式的参与者有:一个约束.一个代理者.一个被代理者.一个调用者 代理模式的实现很简单:还是那个房子,对于开门这个操作,我更换了一个远程解锁的门,那么我就可以通过这个远程连接的服务器远程解锁,这样我 ...