第一个dubbo+zookeeper项目例子
公司项目要用这两个东西,于是打算学习它。
首先我的理解dubbo是什么?zookeeper是什么?为什要这么搞。
项目分层:
传统的,mvc -->垂直架构(将模块抽取成单独项目,项目互相调用)-->分布式服务架构(类似maven中央仓库类型,zookeeper提供注册器,类似容器,dubbo是一种手段类似,在垂直架构基础上,将服务provider(功能)发布,使用的项目consumer使用dubbo获取接口开发)
对传统工程改造
传统工程:MVC
控制层 Controller
业务逻辑层 service
模型层 dal,entity
一般改造过程:
将业务逻辑层、dao层以下的东西做成dubbo服务,控制层调服务
改造成Dubbo服务调用方式后的工程结构:
edu_common_parent(Maven父配置)
edu_facade_user(用户服务接口)
edu_service_user(用户服务实现)
edu_web_boss(服务消费者)
部署环境规划
edu-web-boss(consumer)
zookeeper-3.4.6(注册中心)
edu-service-user(provider)
MySql5.6(数据库)
第一步:
mvc->垂直架构 (业务层,web层分离,facade服务层放些公共数据)
第二步:
web使用facade接口代替service,服务层实现facade接口,使用装饰者模式。
第三步:
服务接口配置prividexml:
<?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_service_user"/>
<dubbo:registry protocol="zookeeper" address="127.0.0.1:2181"/>
<dubbo:protocol name="dubbo" port=""/>
<dubbo:service interface="wusc.edu.facade.user.service.PmsUserFacade" ref="pmsUserFacade"/>
</beans>
使用的消费项目配置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="demo-consumer"/>
<dubbo:registry protocol="zookeeper" address="127.0.0.1:2181"/>
<dubbo:reference id="pmsUserFacade" interface="wusc.edu.facade.user.service.PmsUserFacade"/>
</beans>
然后项目部分完成。启动本地zookeeper,再启动privider项目注册,然后启动consumer项目测试是否能正常消费了。
zoopeeper wndows安装:
把下载的zookeeper的文件解压到指定目录 D:\machine\zookeeper-3.3.> 修改conf下增加一个zoo.cfg 内容如下: # The number of milliseconds of each tick 心跳间隔 毫秒每次 tickTime= # The number of ticks that the initial # synchronization phase can take initLimit= # The number of ticks that can pass between # sending a request and getting anacknowledgement syncLimit= # the directory where the snapshot isstored. //镜像数据位置 dataDir=D:\\data\\zookeeper #日志位置 dataLogDir=D:\\logs\\zookeeper # the port at which the clients willconnect 客户端连接的端口 clientPort= 注:如果启动有报错提示cfg文件有错误,可以用zoo_sample.cfg内内容替代也是可以的 进入到bin目录,并且启动zkServer.cmd,脚本启动
遇到的其他问题:
1、项目报<context:annotation-config />需要jdk1.5或者以上才支持。前面看我的maven里面的json-lib是jdk15版本的,所以怀疑是这里的问题,于是想去下载jdk16的,发现没有。发现jsonlib下载必须指定jdk版本否则下载不来。
http://blog.csdn.net/rambo_china/article/details/7691409
2、发现不一定是json-lib的问题,好像是说spring-core使用注解里面对于jdk8的版本的判定原因导致的前面的报错,于是将spring-core里面的JDKVersion进行替换,可惜没有产生什么效果。
http://bbs.csdn.net/topics/390838736
发现在jar包里面加东西可以直接打开jar包然后拖动进去就好了
3、最后前面的问题是将jdk替换成1.6解决的。因为我的侧重点在于dubbo和zookeeper所以忽略掉了它。
4、出现问题项目启动,web项目访问总是404.查询日志,没发现什么原因,恶心得很。最后找同事帮忙,发现maven依赖报红。万恶的错误不主动提示log,出问题了也不提供log。
5、启动项目使用的是tomcat容器或者测试类,测试类和dubbo配置文件参照写法:
http://dubbo.io/
测试提供方的写法:
public static void main(String[] args) throws Exception {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
new String[] {"classpath:spring/spring-context.xml"});
context.start();
synchronized (ProvideStartTest.class){
while(true){
ProvideStartTest.class.wait();
}
}
}
后面不加wait的话服务方得不到。
6、中途出现的其他问题:
mapper.xml的namespace没有写
dubbo-privide-user.xml没有import
dubbo的那几个jar:
<!-- dubbo need Begin-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.5.</version>
</dependency>
<dependency>
<groupId>org.jboss.netty</groupId>
<artifactId>netty</artifactId>
<version>3.2..Final</version>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.</version>
</dependency>
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.3</version>
</dependency>
<!-- dubbo need end -->
继续进行项目提取分层:
项目增加工程:
edu-common(公共工程)
edu-common-config(公共配置工程)
edu-common-core(公共core工程)
edu-common-web(公共web工程)
这里注意一个要点:
假如你的本地项目引用另一个本地项目,另一个本地项目引用其他的本地项目,你需要tomcat手动将这些项目全部引入依赖,不要指望自动引入,除非你安装到了maven,执行了install命令。
第一个dubbo+zookeeper项目例子的更多相关文章
- 从头开始搭建一个dubbo+zookeeper平台
本篇主要是来分享从头开始搭建一个dubbo+zookeeper平台的过程,其中会简要介绍下dubbo服务的作用. 首先,看下一般网站架构随着业务的发展,逻辑越来越复杂,数据量越来越大,交互越来越多之后 ...
- 搭建一个dubbo+zookeeper平台
本篇主要是来分享从头开始搭建一个dubbo+zookeeper平台的过程,其中会简要介绍下dubbo服务的作用. 首先,看下一般网站架构随着业务的发展,逻辑越来越复杂,数据量越来越大,交互越来越多之后 ...
- maven dubbo zookeeper 项目搭建(有效)jar包非war测试
zookeeper安装以及dubbo-admin.war(管理端)配置启动,本章省略,参考其他内容 这里主要说服务提供者和消费者 项目结构: 1)服务端 DemoServer.java package ...
- idea+dubbo+zookeeper项目访问html页面的方法
将js,html文件放入consumer的resource的static和template文件中 1 consumer的pom需要引入模板的jar包 <dependency> ...
- dubbo+zookeeper示例记录
提示:要直接看搭建例子的可以跳到 三 一.项目架构的发展 传统的mvc架构项目将整个系统功能实现全部写在一个项目中,部署在一个机器上,随着用户量的增涨,单个项目服务器无法承受暴增的用户请求时需要增加服 ...
- 第一章 第一个dubbo项目
为了安全:服务启动的ip全部使用10.10.10.10 版本: dubbo:2.5.5 重要的网址: dubbo的github:https://github.com/alibaba/dubbo dub ...
- 分布式架构真正适用于大型互联网项目的架构! dubbo+zookeeper+springmvc+mybatis+shiro+redis
分类: 分布式技术(3) 目录(?)[+] 平台简介 Jeesz是一个分布式的框架,提供项目模块化.服务化.热插拔的思想,高度封装安全性的Java EE快速开发平台. Jeesz本身集成D ...
- Dubbo+zookeeper+SpringMVC搭建最简单的分布式项目
Dubbo 是什么 一款分布式服务框架 高性能和透明化的RPC远程服务调用方案 SOA服务治理方案 Dubbo 架构流程图 Provider:服务提供方 Consumer:服务消费者 Registry ...
- Dubbo+Zookeeper+SpringMVC+Maven整合实现微服务项目
互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,Dubbo是一个分布式服务框架,在这种情况下诞生的.现在核心业务抽取出来,作为独立的服务,使 ...
随机推荐
- 第十一章 非对称加密算法--DH
注意:本节内容主要参考自<Java加密与解密的艺术(第2版)>第8章“高等加密算法--非对称加密算法” 11.1.非对称加密算法 特点: 发送方和接收方均有一个密钥对(公钥+私钥),其中公 ...
- P4 Tutorials Flowlet Switching
Github链接: Exercise 2: Implementing TCP flowlet switching P4 Tutorials Flowlet Switching 最近P4社区更新了Tut ...
- BZOJ4896 [Thu Summer Camp2016]补退选
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...
- shell 关系运算符
关系运算符 关系运算符只支持数字,不支持字符串,除非字符串的值是数字. 下表列出了常用的关系运算符,假定变量 a 为 10,变量 b 为 20: 运算符 说明 举例 -eq 检测两个数是否相等,相等返 ...
- 软件测试实习生 带人计划 Plan for Training Inten
临时拟了个提纲,以后慢慢补充吧 序号 培训内容 时间安排 1 根据项目需求,编写测试用例,针对存储过程 2 存储过程的走读,以及怎样执行测试用例和查看结果 3 根据项目需求,编写测试用例,针对接口[C ...
- 【转】QT获取系统时间,以及设置日期格式
http://blog.csdn.net/zzk197/article/details/7498593 例如我要在一个label上设置当前时间 QDateTime time = QDateTime:: ...
- Java8 新特性之默认接口方法
摘要: 从java8开始,接口不只是一个只能声明方法的地方,我们还可以在声明方法时,给方法一个默认的实现,我们称之为默认接口方法,这样所有实现该接口的子类都可以持有该方法的默认实现. · 待定 一. ...
- Codeforces 834C - The Meaningless Game
834C - The Meaningless Game 数学. 思路1:判断a•b能不能化成v3且a%v==0且b%v==0.v可以直接用pow求(或者用cbrt),也可以二分求:还可以用map映射预 ...
- 雷林鹏分享:Ruby 命令行选项
Ruby 命令行选项 Ruby 一般是从命令行运行,方式如下: $ ruby [ options ] [.] [ programfile ] [ arguments ... ] 解释器可以通过下列选项 ...
- 关于C和C++
最开始学的就是C和C++,但只是学过,根本就不知道怎么使用. 后来接触了Python和Perl才知道怎么将编程应用于实际需求当中,读取文件,存放到数据结构,处理,输出. 但脚本语言有其固有的缺点,不能 ...