您的位置:首页 > 数据库 > Redis

EOSPlatform+Dubbo+Zookeeper最佳实践

2016-08-12 11:52 218 查看
摘要: 随着分布式服务框架的流行,许多公司都引入了业界流行的分布式服务框架,本文介绍如何使用EOSPlatform+Dubbo+Zookeeper实现分布式服务的开发与运行。

摘要:随着分布式服务框架的流行,许多公司都引入了业界流行的分布式服务框架,本文介绍如何使用EOSPlatform+Dubbo+Zookeeper实现分布式服务的开发与运行。

1 环境准备

1.1 环境选择

EOSPlatform 6.7.1

Zookeeper 3.4.5

Dubbo 2.5.3

Tomcat 5.5.27

1.2 搭建Zookeeper环境

下载zookeeper-3.4.5.tar.gz解压到自定义目录中,如下图:



打开conf目录,将文件zoo_sample.cfg重命名为zoo.cfg。

打开bin目录,用UE打开zkServer.cmd修改如下代码。

setlocal
call "%~dp0zkEnv.cmd"
set JAVA_HOME=D:\Primeton\JDK1.6
set ZOOMAIN=org.apache.zookeeper.server.quorum.QuorumPeerMain
echo on
%JAVA_HOME%\bin\java "-Dzookeeper.log.dir=%ZOO_LOG_DIR%" "-Dzookeeper.root.logger=%ZOO_LOG4J_PROP%" -cp "%CLASSPATH%" %ZOOMAIN% "%ZOOCFG%" %*

endlocal


1.3 搭建服务监控平台环境

下载dubbo-admin-2.5.3.war,部署到Tomcat5.5.27的应用目录中,路径如下:****\apache-tomcat-5.5.27\webapps\;

1.4 控制台启动运行

先启动zookeeper,再启动tomcat服务器。

通过浏览器访问dubbo-admin应用,用户名/密码(root/root)

如下所示:



内存与注册中心都运行正常说明环境准备完成。

2 EOSPlatform扩展开发

2.1 修复EOS产品中Spring容器的BUG

com.primeton.spring.context.ExtendParentApplicationContext.java中有如下两个方法:

/* (non-Javadoc)
* @see org.springframework.beans.factory.ListableBeanFactory#getBeansOfType(java.lang.Class)
*/
public Map getBeansOfType(Class type) throws BeansException
{
return new HashMap();//防止空指针异常
}

/* (non-Javadoc)
* @see org.springframework.beans.factory.ListableBeanFactory#getBeansOfType(java.lang.Class, boolean, boolean)
*/
public Map getBeansOfType(Class type, boolean includePrototypes,
boolean allowEagerInit) throws BeansException
{
return new HashMap();//防止空指针异常
}


红色部分为修改内容,原先返回null值,会导致空指针异常。

2.2 增加启动时开启Spring容器

增加一个启动监听类:SpringContextStartupListener,内容如下:

/**
*
* 由于分布式服务框架需要初始化Spring容器用于发布订阅服务,因此加入启动过程
*
* @author yujl ( yujl+@primeton.com+)
*/
public class SpringContextStartupListener implements IRuntimeListener {

/* (非 Javadoc)
* @see com.eos.runtime.core.IRuntimeListener#start(com.eos.runtime.core.RuntimeEvent)
*/
public void start(RuntimeEvent arg0)
{
ApplicationContextFactory._getContext_();//预先初始化Spring容器
}

/* (非 Javadoc)
* @see com.eos.runtime.core.IRuntimeListener#stop(com.eos.runtime.core.RuntimeEvent)
*/
public void stop(RuntimeEvent arg0)
{
}

}


将SpringContextStartupListener添加到handler-startup.xml文件的结尾部分,如下图所示:

<!- 初始化Spring 容器->

<handler handle-class="com.primeton.spring.context.runtime.SpringContextStartupListener" />

2.3 补充Zookeeper和Dubbo相关jar文件

netty-3.2.5.Final.jar

dubbo-2.5.3.jar

slf4j-api-1.6.1.jar

slf4j-log4j12-1.6.1.jar

zkclient-0.1.jar

zookeeper-3.4.5.jar

将上述jar包放入EOS应用的\WEB-INF\lib目录下。

PS:后面提到的服务提供者应用和服务消费者应用都需要添加Jar包和配置启动文件。

此时EOSPlatform扩展开发完毕。

3 服务提供者示例开发

新建一个EOS项目(项目名称为ProjectProvicer)对应应用为(default_provider);新建一个构件包(名称为:com.primeton.dubbo.provider):



在构件包中新建一个接口示例和一个实现的示例如下:

package com.primeton.dubbo.provider;

4 服务消费者示例开发

新建一个EOS项目(项目名称为ProjectConsumer)对应的应用名称为(default_consumer);新建一个构件包(名称为com.primeton.dubbo.consumer),如下图所示:



首先需要引入服务提供方接口DemoService;

然后增加一个SpringBean用于封装DemoService接口,代码如下:

public class TestDubboAction {
private DemoService demoServiceDL;

public String sayHello(String input){
if(demoServiceDL != null){
return demoServiceDL.testHelloWorld(input);
}
return "";
}

public DemoService getDemoServiceDL() {
return demoServiceDL;
}

public void setDemoServiceDL(DemoService demoServiceDL) {
this.demoServiceDL = demoServiceDL;
}

}


此类不做任何工作,只是调用DemoService接口。

Spring配置文件修改如下:

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:sca="http://www.springframework.org/schema/sca" xmlns:tx="http://www.springframework.org/schema/tx"
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://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/sca http://www.osoa.org/xmlns/sca/1.0/spring-sca.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->
<dubbo:application name="consumer-of-helloworld-app" />
<!-- 使用multicast广播注册中心暴露发现服务地址  先屏蔽注册中心,通过直连实现
<dubbo:registry address="multicast://224.5.6.7:1234" />-->
<dubbo:registry address="zookeeper://127.0.0.1:2181" />
<!-- 生成远程服务代理,可以和本地bean一样使用demoService -->
<dubbo:reference id="demoService" interface="com.primeton.dubbo.provider.DemoService"/>

<bean id="testDubboAction" class="com.primeton.dubbo.consumer.TestDubboAction"> <!-- 和本地服务一样使用远程服务 -->
<property name="demoServiceDL" ref="demoService" />
</bean>
</beans>


通过Spring配置,将远程服务demoService注入到TestDubboAction中。

然后需要开发两个页面和一个页面流用于调用上述TestDubboAction,具体相关代码参考EOS帮助文档中Spring的配置与开发。

至此,服务消费者也开发完成;通过导出构件包并部署到Tomcat的default_consumer应用当中。

运行服务消费者对应的Tomcat服务器,访问如下页面:



点击 show Greeting按钮,后台通过页面流首先进入TestDubboAction中,如下图所示:



此时我们可以看到代码堆栈为:



Dubbo框架通过Spring配置封装了一个DemoService实例,其实这是一个远程调用的代理客户端。

然后通过Dubbo的协议调用了远端服务,服务方的调用栈为:



服务方也屏蔽了协议的实现,通过代理间接调用了DemoServiceImple实例的testHelloWorld方法。

如此,Dubbo与EOSPlatform无缝结合完成。

查看控制台可以看到服务消费者信息如下:



需要了解源码的朋友加我QQ:2137028325

框架简介:

本系统一款通用的SOA中间件平台,用来开发各类J2EE企业级应用,节省时间和人力成本。本系统采用MVC模式、AOP引擎、任务调度器、Ajax、拦截器、过滤器、缓存、日志监控、数据访问、表达式、国际化等技术。

框架/平台构成:
Maven+Springmvc + Mybatis + Shiro(权限)+ Tiles(模板) +ActiveMQ(消息队列) + Rest(服务) + WebService(服务)+ EHcache(缓存) + Quartz(定时调度)+ Html5(支持PC、IOS、Android)

用户权限系统:
组织结构:角色、用户、用户组、组织机构;权限点:页面、方法、按钮、数据权限、分级授权

项目管理新体验:
快速出原型系统、组件树、版本控制、模块移植、协同开发、实时监控、发布管理

可持续集成:
所有组件可移植、可定制、可扩充,开发成果不断积累,形成可持续发展的良性循环

支持平台平台:
Windows XP、Windows 7 、Windows 10 、 Linux 、 Unix

服务器容器:
Tomcat 5/6/7 、Jetty、JBoss、WebSphere 8.5























































































需要了解源码的朋友加我QQ:2137028325
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息