Dubbo分布式服务框架
来源:互联网 发布:优酷网络电影合作模式 编辑:程序博客网 时间:2024/04/27 14:32
Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。说到RPC框架和SOA服务治理,还是从"淘宝技术这十年"听过并尝试着了解这一块的内容,Dubbo是阿里开源的RPC框架,与其类似的还有HSF,但是这个应该是阿里内部框架。
说到RPC之前,首先解释下什么是SOA(service orientied architecture)
所谓SOA就是面向服务编程,通常我们所写的一个web项目都是分层设计,前端到后端的Http请求,首先到达后端的Controller层,然后Controller调用Service(例如:userService)进行我们所需要进行的操作进而返回我们所需要的数据(Service下面的Dao层就不着重介绍了),这样就完成了一次Web请求。
而如果另外一个web项目也需要实现的功能和前面这个Web项目一样的userService功能,那我们是不是要在新项目中重新写一个一模一样的userService呢?如果这样写肯定会造成项目的冗余代码,该如何解决这种冗余呢?除了冗余的问题,这样的开发方式还有的一个问题是如果需要访问别人的Service,我们还需要别人的数据源和别人的数据库密码建立数据源,这样的方式很不符合一个大的团队。很自然我们会想到将一个产品下面的几个web项目中的服务(service)都集中放在一个地方,这几个web项目想要调用就直接到这个存放服务的地方去拿,这样我们写Controller就不需要关注底层服务(service)的实现,只需要关注Controller实现就可以了。如果需要维护代码,只需要改动service实现就可以了,所有web项目调用service代码完全不用改动,是不是和工厂模式很像呢?
上面抛出的问题是将所有service服务化(类似于Service工厂),对外开放,下面看一下Dubbo的架构(图来自Dubbo官网):
从上图可以看到图中主要有几个重要的角色,一个是Consumer(消费端)、Provide(服务提供者)、Registry(注册中心,相当于我上文所说的Service工厂,开源的Registry一般有Zookeeper,Dubbo官网推荐的注册中心也是Zookeeper)。
下面就上面的UserService使用Dubbo举例说明:
1、作为该服务的开发人员,首先需要设计UserService所对应的接口和具体的实现类UserServiceImpl,如果之前的开发我们可能只把UserService的实现类注册成Spring容器本地的Bean,但是这样只能本地或是本应用访问。这时候我们使用Dubbo作为Provide(服务提供者将UserService作为服务提供出去,注册到Zookeeper注册中心),这时候我们本地的UserService就不仅仅是本地的bean,还在注册中心注册了的UserService。
2、而作为服务的使用者,当我们需要使用UserService,但是又不想自己开发的时候,这时候我们就可以去使用已经别的团队已经开发好并在Zookeeper上注册的UserService。在我们使用的时候,我们首先要连接到Zookeeper注册中心,然后咨询注册中心是不是有一个UserService注册,如果有该服务,那就返回暴露该服务的机器IP地址,然后通过源成RPC协议访问到具体的机器,进而访问到具体的功能,然后返回所需要的数据。
下面举例说明:(来自Dubbo官方使用文档)
本地服务:(Spring配置)
<bean id=“userService” class=“com.test.UserServiceImpl” /> <bean id=“userAction” class=“com.test.UserAction”> <property name=“userService” ref=“userService” /></bean>
远程服务:(Spring配置)
在本地服务的基础上,只需做简单配置,即可完成远程化:
将上面的local.xml配置拆分成两份,将服务定义部分放在服务提供方remote-provider.xml,将服务引用部分放在服务消费方remote-consumer.xml。
并在提供方增加暴露服务配置<dubbo:service>,在消费方增加引用服务配置<dubbo:reference>。
用Spring配置声明暴露服务:
<?xmlversion="1.0"encoding="UTF-8"?><beans> <!-- 提供方应用信息,用于计算依赖关系 --> <dubbo:application name="hello-world-app" /> <!-- 使用multicast广播注册中心暴露服务地址 --> <dubbo:registry address="multicast://224.5.6.7:1234"/> <!-- 用dubbo协议在20880端口暴露服务 --> <dubbo:protocol name="dubbo"port="20880"/> <!-- 声明需要暴露的服务接口 --> <dubbo:service interface="com.alibaba.dubbo.demo.DemoService"ref="demoService"/> <!-- 和本地bean一样实现服务 --> <bean id="demoService"class="com.alibaba.dubbo.demo.provider.DemoServiceImpl"/> </beans>
UserService开发方暴露服务:
<bean id=“userService” class=“com.test.UserServiceImpl” /> <!-- 和本地服务一样实现远程服务 --> <dubbo:service interface=“com.test.UserService” ref=“userService” /> <!-- 增加暴露远程服务配置 -->
第三方使用方调用UserService服务:
<dubbo:reference id=“userService” interface=“com.test.userService” /> <!-- 增加引用远程服务配置 --> <bean id=“xxxAction” class=“com.xxx.XxxAction”> <!-- 和本地服务一样使用远程服务 --> <property name=“xxxService” ref=“xxxService” /></bean>
0 0
- Dubbo分布式服务框架
- dubbo分布式服务框架
- 分布式服务框架DUBBO
- Dubbo分布式服务框架
- Dubbo分布式服务框架
- 分布式服务框架 Dubbo
- 分布式服务框架--Dubbo
- 分布式服务框架Dubbo
- Dubbo 分布式服务框架
- dubbo分布式服务框架
- 分布式服务框架(dubbo)
- dubbo分布式服务框架
- "阿里巴巴分布式服务框架 Dubbo
- DUBBO 一个分布式服务框架
- Dubbo分布式服务框架入门
- Dubbo 分布式服务框架 教程
- 分布式服务框架 -- Dubbo(一)
- DUBBO个分布式服务框架
- 解决宿主机不能访问虚拟机CentOS中的站点
- EasyUi之menu组件
- linux获取后台进程的控制台数据
- Xcode 在安装插件后若发现不能使用
- 82. Session 应用
- Dubbo分布式服务框架
- MySQL-----安装MySQL(免安装版方式)
- 菜鸟学python(1) hello world!
- 源码篇:MBProgressHUD
- Oracle入门2
- Python/C API中的引用计数修改
- Mac OS X 下完全删除MySQL的方法
- 从LeNet-5看卷积神经网络CNNs
- 使用FLANN进行特征点匹配