为什么要用dubbo?
 
还是让官方来解释吧:
 
一般 nginx+tomcat
         | ----> Controller1--------->service1
请求----->nginx  |
         |----->Controller2--------->service2
请求进了Controller 就只有一条路可以走了
 
使用dubbo后
              | ------->service1
请求------>Controller---->   |
              |---------->service2
简单的说 也就是 一个Contoller 我可以部署多个 service   。
 
一般的mvc项目 包含 Controller、Servicei、ServiceImpl、dao三层
使用doubbo我们可以把项目拆分:
Controller 作为 “消费着” 一个项目
ServiceImpl +dao 作为 “提供者” 一个项目
Servicei “接口” 可以作为一个项目
我们可以部署多个“提供着”。。。。。。。。。。。。。。。。。。。
 
Zookeeper作为Dubbo服务的注册中心,Dubbo原先基于数据库的注册中心,没采用Zookeeper,Zookeeper一个分布式的服务框架,是树型的目录服务的数据存储,能做到集群管理数据 ,这里能很好的作为Dubbo服务的注册中心,Dubbo能与Zookeeper做到集群部署,当提供者出现断电等异常停机时,Zookeeper注册中心能自动删除提供者信息,当提供者重启时,能自动恢复注册数据,以及订阅请求。我们先在linux上安装Zookeeper,我们安装最简单的单点
Windons 安装Zookeeper
 
1,Zookeeper 官网下载windons 版本,(不会下载百度)
单机安装非常简单,只要获取到 Zookeeper 的压缩包并解压到某个目录如
 
打开目录机构为:
 
 
Zookeeper 的启动脚本在 bin 目录下,Windows 下的启动脚本是 zkServer.cmd。
 
在你执行启动脚本之前,还有几个基本的配置项需要配置一下,Zookeeper 的配置文件在 conf 目录下,这个目录下有 zoo_sample.cfg 和 log4j.properties,你需要做的就是将 zoo_sample.cfg 改名为 zoo.cfg,因为 Zookeeper 在启动时会找这个文件作为默认配置文件。下面详细介绍一下,这个配置文件中各个配置项的意义。
 
打开以后
 
1
2
3
4
5
6
7
8
9
10
11
12
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
dataDir=/tmp/zookeeper
# the port at which the clients will connect
clientPort=2181

  

  • tickTime:这个时间是作为 Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。
  • dataDir:顾名思义就是 Zookeeper 保存数据的目录,默认情况下,Zookeeper 将写数据的日志文件也保存在这个目录里。
  • clientPort:这个端口就是客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。
二.dubbo-admin。 dubbo管控台的安装
下载 dubbo-admin-2.5.3.war  
解压之后:
修改 META-INF/dubbo.properties文件
1
2
3
dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.admin.root.password=root
dubbo.admin.guest.password=guest

address:zookeeper 的ip地址 后面是端口号  ,和zookeeper中配置的端口号一样

修改完成后需要一个tomcat   打开tomcat     \webapps\ROOT 目录 ,此目录放置的是tomcat的首页,删除所有的文件,将解压后修改好的所有的dubbo-admin 里的文件复制到 \webapps\ROOT中,

此时我们已经配置好了。现在可以启动tomcat了 (主意:在启动tomcat之前要先启动zookeeper ,启动zookeeper前面有介绍)。 启动tomcat之后 在浏览器输入 http://localhost:8080  (我的是8083) 进入dubbo管控台的主页

(备注:使用jdk1.8 tomcat启动可能会出错  有关 URI。。。。 的错误。我最后换成1.7了)

用户名和密码就是dubbo.properties 中配置的 默认的是 用户名 :root, 密码:root

输入用户名和密码之后 进入首页

 当然现在还没有 消费者 和 提供者 
 
现在我们来开发   消费者  和 提供者
 

配置 好 zookeeper之后 搭建 maven+springmvc+dubbo环境
 
新建3个maven项目
1,test-dubbo-provider ,java项目,作为提供者,serviceImpl 和dao 层
2,test-public-interface ,java项目,存放公共的接口 ,servicei        是service的接口  (备注:1要依赖2,  3也要依赖2)
3,test-web-consumer,web项目,存放 Controller 和 页面 
 
首先我们来开发 服务的提供者也就是 test-dubbo-provider ,目录结构为
ApplicationContent-dubbo.xml        dubbo服务的配置文件(名字随意)     (待会再介绍)
ApplicationContent.xml       spring的配置文件
这两个配置文件 必须要放到 MATE-INF/spring/下面 (原因后面再说)
 
UserServiceImpl.java  借口的实现类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package com.cl.user.serviceImpl;
 
import org.springframework.stereotype.Service;
 
import com.cl.user.servicei.UserService;
 
@Service("userService")
public class UserServiceImpl implements UserService{
 
    @Override
    public String sayHello() {
         
        System.out.println("hello world----------------------------");
         
        return "hello world";
         
    }
}
 
有了 实现类 还需要接口  也就是项目test-public-interface 
 
 
这个项目很简单 只需要 接口 就行了
1
2
3
4
5
6
package com.cl.user.servicei;
 
public interface UserService {
    public String sayHello();
 
}

当然 项目 1 要 依赖 项目 2

所以在1 的 pom.xml 中 有

1 <dependency>
2 <groupId>test-web</groupId>
3 <artifactId>test-pubilc-interface</artifactId> 加入项目2依赖
4 <version>0.0.1-SNAPSHOT</version>
5 <scope>test</scope>
6 </dependency>

那么 1 中的 UserServiceImpl 就可以实现 UserService接口

 当然我们用到 dubbo 就要有dubbo的核心jar包  所以在1 的 pom.xml 中 有

1 <dependency>
2 <groupId>com.alibaba</groupId>
3 <artifactId>dubbo</artifactId>
4 <version>2.5.3</version>
5 </dependency>

还要有 zookeeper的  所以在1 的 pom.xml 中 有

1 <dependency>
2 <groupId>org.apache.zookeeper</groupId>
3 <artifactId>zookeeper</artifactId>
4 <version>3.3.3</version>
5 </dependency>

下面介绍一下项目1 中 的 ApplicationContent-dubbo.xml   和  ApplicationContent.xml

 
ApplicationContent.xml  主要是spring的配置 不多说。
1 <!-- 启动组件扫描,排除@Controller组件,该组件由SpringMVC配置文件扫描 -->
2 <context:component-scan base-package="com.cl.user.serviceImpl"/>

ApplicationContent-dubbo.xml   dubbo服务的配置

 1     <!-- 提供方应用信息,用于计算依赖关系 -->
2 <dubbo:application name="hehe_provider" />
3 <!-- 使用zookeeper注册中心暴露服务地址 端口是zookeeper 中配置的2181-->
4 <dubbo:registry address="zookeeper://127.0.0.1:2181"/>
5 <!-- <dubbo:registry address="multicast://224.5.6.7:1234" /> -->
6 <!-- 用dubbo协议在20880端口暴露服务 -->
7 <dubbo:protocol name="dubbo" port="20880" />
8 <!-- 具体的实现bean -->
9 <bean id="userService" class="com.cl.user.serviceImpl.UserServiceImpl" />
10 <!-- 声明需要暴露的服务接口 -->
11 <dubbo:service interface="com.cl.user.servicei.UserService" ref="userService" />

主意:有可能你的配置文件中不识别 <dubbo:>  去网上找解决的办法

到这里我们的  “提供者” 即 服务   已经开发完了,那么如何启动服务呢?  在项目1中有个start.java

 1 package com.test;
2
3 import org.apache.log4j.PropertyConfigurator;
4
5 public class start {
6 static{
7 PropertyConfigurator.configure("src/main/resources/log4j.properties");
8 }
9 public static void main(String[] args) {
10
11 com.alibaba.dubbo.container.Main.main(args);
12 }
13 }

主意里面有main方法,可以直接运行启动了。别急!!! 之前还有个问题就是为什   ApplicationContent-dubbo.xml   和  ApplicationContent.xml    这两个配置文件 必须要放到 /META-INF/spring/下面

因为  com.alibaba.dubbo.container.Main.main(args)  默认就会去加载 /META-INF/spring/ 下的配置文件

我们来看一下源码

 看完源码 这下明白为什么了吧!!!!!!!!!!!!!!!!!
 
启动服务后  我们在 dubbo-admin中就能看到我们刚才开发的的  “提供者”
 
 
 
192.168.56.1 是本地局域网 地址
 
这是 “提供者”  此时还没有“消费者”   接下来我们就要开发 “消费者”
 
test-web-consumer   
 
 
UserController.java
@Controller
public class UserController { @Resource(name="userService")
private UserService userService; @RequestMapping("/hello/test/world")
public void sayHello(){
System.out.println(userService.sayHello()+"**************************");
}
}

ApplicationContext-mvc.xml 都是springmvc的配置 如下不解释了

<mvc:annotation-driven/>
<mvc:default-servlet-handler/>
<context:component-scan base-package="com" /> <!-- 对静态资源文件的访问 restful-->
<mvc:resources mapping="/js/**" location="/js/" />
<mvc:resources mapping="/lib/**" location="/lib/" />
<mvc:resources mapping="/plugins/**" location="/plugins/" />
<mvc:resources mapping="/uploadFiles/**" location="/uploadFiles/" />
<mvc:resources mapping="/WEB-INF/html/**" location="/WEB-INF/html/" /> <!-- 配置SpringMVC的视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/html"/>
<property name="suffix" value=".jsp"/>
</bean> <!-- 上传拦截,如最大上传值及最小上传值 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" >
<property name="maxUploadSize">
<value>104857600</value>
</property>
<property name="maxInMemorySize">
<value>4096</value>
</property>
<property name="defaultEncoding">
<value>utf-8</value>
</property>
</bean>

ApplicationContext-dubbo.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-2.5.xsd
http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> <!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->
<dubbo:application name="hehe_consumer" /> <!-- 使用zookeeper注册中心暴露服务地址 --> <dubbo:registry address="zookeeper://127.0.0.1:2181" /> <!-- 组播注册 -->
<!-- <dubbo:registry address="multicast://224.5.6.7:1234" /> --> <!-- 生成远程服务代理,可以像使用本地bean一样使用userService -->
<dubbo:reference id="userService" interface="com.cl.user.servicei.UserService" />
</beans>

开发完消费者后 ,启动消费者,可以在管控台看到

 完了!!      Dubbo更多详细的东西还去官网的用户手册寻找吧!!  http://dubbo.io/User+Guide-zh.htm   http://dubbo.io/    用户手册说的挺详细的!这里仅供参考!

 
最后 ,在开发的时候为了方便,我们可以使用组播注册!
 <!-- 组播注册 -->
<!-- <dubbo:registry address="multicast://224.5.6.7:1234" /> -->
 源码:
 https://github.com/KellyLChen/Dubbo.git

Dubbo与Zookeeper、Spring整合使用 maven+springmvc+dubbo+zookeeper的更多相关文章

  1. 关于Maven+Springmvc+Dubbo+Zookeeper整合

    为什么要用dubbo?   还是让官方来解释吧: http://dubbo.io/User+Guide-zh.htm   http://dubbo.io/   一般 nginx+tomcat  | - ...

  2. maven+springmvc+dubbo+zookeeper

        为什么要用dubbo?   还是让官方来解释吧: http://dubbo.io/User+Guide-zh.htm   http://dubbo.io/   一般 nginx+tomcat ...

  3. 170328、Maven+SpringMVC+Dubbo 简单的入门demo配置

    之前一直听说dubbo,是一个很厉害的分布式服务框架,而且巴巴将其开源,这对于咱们广大程序猿来说,真是一个好消息.最近有时间了,打算做一个demo把dubbo在本地跑起来先. 先copy一段dubbo ...

  4. Maven+SpringMVC+Dubbo 简单的入门demo配置

    转载自:https://cloud.tencent.com/developer/article/1010636 之前一直听说dubbo,是一个很厉害的分布式服务框架,而且巴巴将其开源,这对于咱们广大程 ...

  5. MongoDB 学习(三)MongoDB 和 Spring 整合(Maven)

    一.MongoDB 和 Spring 整合(Maven) 1.相关 jar 包准备 2.用 Maven 创建项目,pom.xml 文件 <project xmlns="http://m ...

  6. 【Dubbo实战】 Dubbo+Zookeeper+Spring整合应用篇-Dubbo基于Zookeeper实现分布式服务(转)

    Dubbo与Zookeeper.Spring整合使用 Dubbo采用全Spring配置方式,透明化接入应用,对应用没有任何API侵入,只需用Spring加载Dubbo的配置即可,Dubbo基于Spri ...

  7. Dubbo+Zookeeper+Spring整合应用篇-Dubbo基于Zookeeper实现分布式服务(转)

    Dubbo与Zookeeper.Spring整合使用 Dubbo采用全Spring配置方式,透明化接入应用,对应用没有任何API侵入,只需用Spring加载Dubbo的配置即可,Dubbo基于Spri ...

  8. spring整合mybatis和springmvc的配置概图

  9. Spring整合SpringMVC + Mybatis基础框架的配置文件

    目录 前言 1. Mybatis层编写 2. Spring层编写 1. Spring整合Mybatis 2. Spring整合service 3. SpringMVC层编写 1. 编写web.xml ...

随机推荐

  1. 数组常用的API——splice()截取

    他的几个作用:截取  删除  增加  替换. 当传递一个参数的时候 : 截取开始的位置,参数代表下标,默人会截取到结束的位置. 当传递两个参数的时候: 第一个参数是删除的下标: 第二个参数代表删除几个 ...

  2. json_decode转换数组过程中,结果为null处理办法,百分之百有效

    json_decode这个函数是json_encode的反函数,一般传递数据的时候为了压缩数据,会将数组格式的数据转换成json格式,用到的函数就是json_encode,然后接收到数据之后再用jso ...

  3. nRF51822外设应用[2]:GPIOTE的应用-按键检测

    版权声明:本文为博主原创文章,转载请注明作者和出处.    作者:强光手电[艾克姆科技-无线事业部] 1. nRF51822寄存器类型 nRF51822的寄存器和一般的单片机有所差别,nRF51822 ...

  4. Day45--js基本小结

    JavaScript基本总结 一:基本背景 01:注:ES6就是指ECMAScript 6.(2015 ECMAScript6 添加类和模块) ECMAScript和JavaScript的关系 199 ...

  5. css flex 使内容 水平居中 的方法...

    刚开始以为是  justify-content : center 设置为 居中... 的确,,当 元素满了时 的确能 居中.但是 当只有一个元素时,这一个元素也会居中... 想了半天没找到方法..突然 ...

  6. Django - Xadmin 组件(二)

    Django 自带的 admin 组件可以自定义配置,本文实现 Xadmin 对自定义显示数据列 (list_display) 的配置. 构建表单数据 模板层 从视图函数传来的数据变量是双层列表,第一 ...

  7. P4578 [FJOI2018]所罗门王的宝藏

    传送门 考虑一个位置答案传递性,如果某个位置的红宝石转动确定了,那么会引起连锁反应: 如图,绿色的转动确定了,那么那两个蓝色的转动也确定了 自己手玩一下,发现如果有解那么随便找一个开始然后一路玩下去最 ...

  8. HDU1286

    欧拉函数测试题 期末考试完了做下水题 更好的方法是phi[i]==i时就直接筛选,不改了 #include<bits/stdc++.h> using namespace std; cons ...

  9. [源代码]List的增加与删除

    // Removes the element at the given index. The size of the list is // decreased by one. // public vo ...

  10. 一种简单快速的模板解析方法,活用with javascript版

    //一种简单快速的模板解析方法,活用with var parseTpl = function( str, data ) { var tmpl = 'var __p=[];' + 'with(obj|| ...