第一个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是一个分布式服务框架,在这种情况下诞生的.现在核心业务抽取出来,作为独立的服务,使 ...
随机推荐
- Codeforces Round #426 (Div. 2) C. The Meaningless Game
C. The Meaningless Game 题意: 两个人刚刚开始游戏的时候的分数, 都是一分, 然后随机一个人的分数扩大k倍,另一个扩大k的平方倍, 问给你一组最后得分,问能不能通过游戏得到这样 ...
- 从nodejs到在线商城
nodejs安装express开发框架 (开发环境:mkdir nodeshop && cd nodeshop > npm init > npm install expre ...
- Web API过滤器
Web API包含在操作方法执行之前或之后添加额外的逻辑的过滤器.过滤器可用于提供横切特性,比如日志记录.异常处理.性能测量.身份验证和授权等等. 过滤器可以应用于Web API控制器或一个或多个操作 ...
- Redis的两种连接方式
1.简单连接 import redis conn = redis.Redis(host=) conn.set('foo', 'Bar') print(conn.get('foo')) a = inpu ...
- java 使用正则判断是不是一个数字
public class Numeric { public static void main(String[] args) { String string = "-1234.15" ...
- 一个十分好用的动画工具:Velocity.js
就像许多开发者确信的那样,在Web上使用CSS实现动画并不是唯一的方式,我们也可以使用JS来实现,并且JS还有一些CSS无法替代的优势. 然而抛开JS而选择CSS来实现动画,将以样式表内容膨胀,丧失对 ...
- Shell需注意的语法问题
1.文件头声明别漏掉#和! #!/bin/bash 2.赋值语句①=号两端不能有空格(判断语句=号两端必须有空格)②使用变量必须使用符号$ var1=valecho $var1 3.if语句写错下面任 ...
- ubuntu server 无线网卡的处理
1) iwconfig 确定一下接口的名称 2) 编辑 /etc/network/interfaces 加入下面的代码 auto wlan0 iface wlan0 inet dhcp wpa-ssi ...
- FMUtils.KeyboardHook 轻量级键盘监听器
Nuget添加引用 Install-Package FMUtils.KeyboardHook 调用示例: var KeyboardHook = new Hook("Global Action ...
- 20170517xlVBA添加数据透视表
Sub AddPovitTable() 'Constance Const DATA_SHEET As String = "Advanced Filter" Const DATA_A ...