Dubbo初窥

    Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合)。从服务模型的角度来看,Dubbo采用的是一种非常简单的模型,要么是提供方提供服务,要么是消费方消费服务,所以基于这一点可以抽象出服务提供方(Provider)和服务消费方(Consumer)两个角色。关于注册中心、协议支持、服务监控等内容,详见后面描述。

官网的依赖图:


  • 图中小方块Protocol, Cluster, Proxy, Service, Container, Registry, Monitor代表层或模块,蓝色的表示与业务有交互,绿色的表示只对Dubbo内部交互。
  • 图中背景方块Consumer, Provider, Registry, Monitor代表部署逻辑拓普节点。
  • 图中蓝色虚线为初始化时调用,红色虚线为运行时异步调用,红色实线为运行时同步调用。
  • 图中只包含RPC的层,不包含Remoting的层,Remoting整体都隐含在Protocol中。
理论自己看官网吧(http://dubbo.io/Developer+Guide-zh.htm),就不啰嗦了。下面介绍怎样把传统的项目转换成分布式的dubbo项目。

原有项目的代码地址()

这是一个maven项目,可以自己新建一个maven项目,也可以直接导入。为了让项目正常跑起来,jdbc.propperties里边的jdbc.url和jdbc.password。jdbc.password并不是你现在使用的明文密码,这个密码是经过driud里边的工具加密的(这个地方我用的时候纠结了好久)。

public static void main(String[] args) {
		try {
			
			System.out.println(ConfigTools.encrypt("你的明文密码"));
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

还要用doc目录下的sql创建相应的表和添加数据,就不赘述了。


首先,改造后dubbo服务调用方式的工程结构

edu-common-parent    ------------Maven父配置
edu-facade-user          ------------用户服务接口
edu-service-user          ------------用户服务实现
edu-web-boss              ------------服务消费者


下面开始介绍如何分割传统项目。

1.创建一个maven父项目。填写相应的信息,在下面这一步的时候选择 site-simple就好了。创建完了跟传统项目一样添加相应的maven jar包依赖。



2. 创建3个maven module,就是上面的edu-facade-user、edu-service-user和edu-web-boss 。



项目结构如下所示


在edu-facade-user里边主要是原项目的一些实体类和接口,最主要的就是要暴露的服务的接口PmsUserFacade,其实就是把原来的biz里边的方法抽象成一个接口。


edu-service-user里边主要是原项目的service和dao的一些类,还有就是现实上面那个PmsUserFacade接口。


在edu-service-user里边需要原项目的所有的配置文件,包括mybatis和spring的。此外还需要添加一个dubbo-provider.xml文件并在spring配置中import。

<?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/beans  
            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="gw-service-user" />

	<!-- 使用zookeeper注册中心暴露服务地址 -->
	<dubbo:registry protocol="zookeeper" address="192.168.1.105:2181" />

	<!-- 用dubbo协议在20880端口暴露服务 -->
	<dubbo:protocol name="dubbo" port="20880" />
		
	<!-- 用户服务接口 -->
	<dubbo:service interface="wusc.edu.facade.user.service.PmsUserFacade" ref="pmsUserFacade" />

</beans>  

这个模块可以打成jar包单独运行也可以在tomcat中运行。在测试的时候,是写一个测试类就可以了。


public class DubboProvider {
	
	private static final Log log = LogFactory.getLog(DubboProvider.class);

	public static void main(String[] args) {
		try {
			ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:spring/spring-context.xml");
			context.start();
		} catch (Exception e) {
			log.error("== DubboProvider context start error:",e);
		}
		synchronized (DubboProvider.class) {
			while (true) {
				try {
					DubboProvider.class.wait();
				} catch (InterruptedException e) {
					log.error("== synchronized error:",e);
				}
			}
		}
	}
    
}



edu-web-boss主要是原项目的控制层的东西。也需要添加dubbo的相应配置dubbo-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/beans  
        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="edu-web-boss" />

	<!-- 使用zookeeper注册中心暴露服务地址 -->
	<!-- 注册中心地址 -->
	<dubbo:registry protocol="zookeeper" address="192.168.1.105:2181" />
	
	<!-- 用户服务接口 -->
	<dubbo:reference interface="wusc.edu.facade.user.service.PmsUserFacade" id="pmsUserFacade" check="false" />


</beans>  

启动zookeeper可以跑一下了,成功~


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值