EOSPlatform+Dubbo+Zookeeper最佳实践
2019独角兽企业重金招聘Python工程师标准>>>
摘要:随着分布式服务框架的流行,许多公司都引入了业界流行的分布式服务框架,本文介绍如何使用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无缝结合完成。
查看控制台可以看到服务消费者信息如下:
- 核心技术:Maven,Springmvc mybatis shiro, Druid, Restful, Dubbo, ZooKeeper,Redis,FastDFS,ActiveMQ,Nginx
1. 项目核心代码结构截图项目模块依赖
特别提醒:开发人员在开发的时候可以将自己的业务REST服务化或者Dubbo服务化
2. 项目依赖介绍
2.1 后台管理系统、Rest服务系统、Scheculer定时调度系统依赖如下图:
2.2 Dubbo独立服务项目依赖如下图:
3. 项目功能部分截图:
zookeeper、dubbo服务启动
dubbo管控台
REST服务平台
转载于:https://my.oschina.net/gdfgehre/blog/732048
EOSPlatform+Dubbo+Zookeeper最佳实践相关推荐
- dubbo服务化最佳实践
本文来说下dubbo服务化最佳实践 文章目录 概述 分包 粒度 本文小结 概述 dubbo的服务化最佳实践包括分包, 粒度, 版本, 兼容性, 枚举, 序列化, 异常等内容,详细信息可以看官网提供的内 ...
- dubbo 无法访问消费端_Dubbo最佳实践,我整理了以下9点
Dubbo服务化,在当前互联网后端开发中,大部分都使用了Dubbo.截止目前github dubbo上,star也将近3万,使用dubbo的公司数量也很可观,Dubbo确实也是一个比较不错的服务化框架 ...
- 跨 AZ 部署最佳实践之 Zookeeper
作者:焦振清 跨 AZ 部署是实现服务高可用较为有效的方法,同时也极具性价比.如果实现了跨 AZ 部署,不仅可以消除服务中的单点,同时还可以逐步建设如下能力:服务隔离,灰度发布,N+1 冗余,可谓一举 ...
- Dubbo——Dubbo中的常用标签、服务化最佳实践
文章目录: 1.Dubbo中的常用标签 2.Dubbo中的服务化最佳实践 2.1 分包 2.2 粒度 2.3 版本 2.4 案例分析 2.4.1 003-link-interface 2.4.2 00 ...
- dubbo+zookeeper+dubbo管理控制台实践demo
2019独角兽企业重金招聘Python工程师标准>>> 1,安装并启动zookeeper注册服务,这里使用的是3.4.6版本. 下载解压后,在zookeeper-3.4.6/conf ...
- 微服务最佳实践:MSE 微服务引擎
简介:微服务引擎 MSE(Microservice Engine)是一个面向业界主流开源微服务框架 Spring Cloud 和 Dubbo 的一站式微服务平台.其由四个主要部分组成:微服务治理中心. ...
- 从头开始搭建一个dubbo+zookeeper平台
2019独角兽企业重金招聘Python工程师标准>>> 本篇主要是来分享从头开始搭建一个dubbo+zookeeper平台的过程,其中会简要介绍下dubbo服务的作用. 首先,看下一 ...
- spring 2.0核心技术与最佳实践 pdf_推荐 Spring Boot 实践学习案例大全 数据缓存 和中间件 安全权限...
概况 spring boot 实践学习案例 spring boot 初学者及核心技术巩固的最佳实践 目录 『 Spring Boot 2 快速教程 』 Spring Boot 2:WebFlux集成 ...
- Java 处理 Exception 的 9 个最佳实践!
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 在Java中处理异常并不是一个简单的事情.不仅仅初学者很难理解,即 ...
最新文章
- Linux chmod命令修改文件与文件夹权限命令代码
- MYSQL || 的BUG // MYSQL 不同库自增id的问题 //MySQL根据表注释查找对应的表 //hive -mysql 日期比较
- flash开发中如何实现界面代码分离
- mfc存储颜色到mysql_mfc存储二进制文件
- 移动端与PC端页面布局区别
- Java排序之归并排序
- Android入门(四)UI-创建自定义控件
- anaconda各个版本下载资源
- C++线程编程-内存顺序
- 智点木门软件为百闰门业解决哪些问题?
- 模拟狗狗的“魔鬼步伐”,比更真还更真
- 【转载】第6节: 六类Calander处理六种不同的时间场景
- 假设检验,p-value,glm
- python 网页爬虫,带登陆信息
- 【报错】亲测有用,copytranslator只显示部分翻译结果
- python分析红楼梦出现的虚词词频统计,python对红楼梦的每一章节进行词频统计
- Oracle报表计算合计函数ROLLUP
- QMS系统客户端自动化测试流程图
- Android中将bitmap转换成单色的BMP图片
- iOS使用自定义字体并找到字体真实名称
热门文章
- Linux 批量创建用户及设置随机密码
- iwebshop关于按钮点击提示的系列代码操作流程
- EF框架step by step(1)—Database-First
- KVC在定义Model类中的妙用
- Netty 5.X 官方指南翻译版4
- JBPM 3.3.0 + JBOSS 4.2.3 + ORACLE 9i
- Ubuntu18.04快捷键
- ndk-build官方使用说明
- [导入]在asp.net中利用FileUplad控件从同一个页面上传多个文件
- 【学习总结】GirlsInAI ML-diary day-7-数据类型转换