代码改变世界iOS 开发 Java学习笔记

基于Dubbo的分布式系统实现

2015-07-14  本文已影响3396人  扁圆柱体

体系架构

Dubbo是一个非常轻量级的分布式RPC框架,它使用Spring进行配置,而非注入式的编程方式,深受大家的喜爱。粗浅的研究了一下其应用,并使用Web容器(Jetty)实现了一个基于Dubbo的分布式系统,提供多种服务,并可以在多个服务源中进行切换。这个Demo系统的参与者包括

下图描述了整个体系架构。

绘图1.jpg

API的定义

API是Java接口定义的约定Consumer和Provider都可以使用的函数列表。Consumer通过API了解Service能够提供的服务;Provider提供服务的实现。其中

API作为一个独立的,纯的Java的jar包发布给Consumer使用。

服务的消费者

为了简单起见,这里只将服务的Consumer作为基本的Servlet来处理。如果Servlet可以走通,应用到JSP,或是JSF环境中都水到渠成。Consumer中最重要的是获取服务的句柄,因为由于有API的存在,在静态编程中,是很简单的,且没有技术难度。获取句柄的代码在init方法中,如下所示

@Override public void init() throws ServletException { super.init(); ServletContext servletContext = this.getServletContext(); WebApplicationContext ctx = WebApplicationContextUtils .getWebApplicationContext(servletContext); dateService = (DateService) ctx.getBean("dateService"); }

显而易见,我们通过Spring容器获得真实的对象(由Provider实现),并从对象的调用结果中获取我们需要的内容。

服务的提供者

服务的Provider是比较简单的,只需要实现API所定义的方法即可,这里就不列举了。但为了将这个实现加载到Dubbo的系统中,也需要Spring容器,并打成War包发布到Jetty中。

Spring容器的配置

web.xml

web.xml的配置对于Consumer和Provider都是一样的,即定义Spring容器,如下所示
<listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/classes/applicationContext*.xml</param-value> </context-param>

作为Consumer,还要定义Servlet的映射,不再赘述。

Consumer

<dubbo:application name="dubbo-evaluation-consumer" /> <dubbo:registry address="zookeeper://10.16.2.46:2181" /> <dubbo:monitor protocol="registry" /> <dubbo:reference id="stringService" interface="com.synnex.dubboevaluation.service.StringService" /> <dubbo:reference id="mathService" interface="com.synnex.dubboevaluation.service.MathService" /> <dubbo:reference id="dateService" interface="com.synnex.dubboevaluation.service.DateService" />
对于Consumer,比较重要的是

Provider

<dubbo:application name="dubbo-evaluation-provider" /> <dubbo:registry address="zookeeper://10.16.2.46:2181" /> <dubbo:protocol name="dubbo" port="20880" /> <dubbo:monitor protocol="registry"/> <dubbo:service interface="com.synnex.dubboevaluation.service.StringService" ref="stringService" /> <bean id="stringService" class="com.synnex.dubboevaluation.service.StringServiceImpl" /> <dubbo:service interface="com.synnex.dubboevaluation.service.MathService" ref="mathService" /> <bean id="mathService" class="com.synnex.dubboevaluation.service.MathServiceImpl" /> <dubbo:service interface="com.synnex.dubboevaluation.service.DateService" ref="dateService" /> <bean id="dateService" class="com.synnex.dubboevaluation.service.DateServiceImpl" />
对于Provider,比较重要的是

上一篇下一篇

猜你喜欢

热点阅读