maven+springmvc+dubbo+zookeeper

为什么要用dubbo?

还是让官方来解释吧:

http://dubbo.io/User+Guide-zh.htm   http://dubbo.io/

一般 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管控台的安装

下载地址 http://dubbo.io/Download-zh.htm

下载 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    这两个配置文件 必须要放到 /MATE-INF/spring/下面

因为  com.alibaba.dubbo.container.Main.main(args)  默认就会去加载 /MATE-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

时间: 2024-07-30 13:49:14

maven+springmvc+dubbo+zookeeper的相关文章

一步步完成Maven+Spring+Dubbo+Zookeeper的整合示例

本文给出一个整合Maven+Spring+Dubbo+Zookeeper的示例,并且一步步给出完成步骤,并对其中可能遇到的问题进行解决~ Maven模块化 创建一个名为dubbo-demo的Maven工程,该工程包含三个模块 dubbo-demo-interface   (定义对外开放接口) dubbo-demo-provider   (接口实现) dubbo-demo-consumer (接口调用) dubbo-demo工程中的pom.xml文件如下: <project xmlns="h

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

之前一直听说dubbo,是一个很厉害的分布式服务框架,而且巴巴将其开源,这对于咱们广大程序猿来说,真是一个好消息.最近有时间了,打算做一个demo把dubbo在本地跑起来先. 先copy一段dubbo的介绍哈!DUBBO是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000+个服务提供3,000,000,000+次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点(其他的详细介绍可以查看dubbo的官网地址dubbo,写

分布式框架 Maven Springmvc mybatis ,Dubbo ZooKeeper,Redis,FastDFS ,ActiveMQ

平台简介 Jeesz是一个分布式的框架,提供项目模块化.服务化.热插拔的思想,高度封装安全性的Java EE快速开发平台. Jeesz本身集成Dubbo服务管控.Zookeeper注册中心.Redis分布式缓存技术.FastDFS分布式文件系统.ActiveMQ异步消息中间件.Nginx负载均衡等分布式技术 使用Maven做项目管理,项目模块化,提高项目的易开发性.扩展性 以Spring Framework为核心容器,Spring MVC为模型视图控制器,MyBatis为数据访问层, Apach

【精华】经典企业分布式框架Maven Springmvc mybatis,Dubbo ZooKeeper,Redis,FastDFS,ActiveMQ

开发工具 1.Eclipse IDE:采用Maven项目管理,模块化. 2.代码生成:通过界面方式简单配置,自动生成相应代码,目前包括三种生成方式(增删改查):单表.一对多.树结构.生成后的代码如果不需要注意美观程度,生成后即可用. 技术选型(只列了一部分技术) 1.后端 服务框架:Dubbo.zookeeper.Rest服务 缓存:Redis.ehcache 消息中间件:ActiveMQ 负载均衡:Nginx 分布式文件:FastDFS 数据库连接池:Alibaba Druid 1.0 核心框

分布式 dubbo zookeeper springmvc mybatis shiro restful redis fastdfs activemq

摘要: 摘要: SSH ++shiro+restful+bootstrap java架构 java企业架构 spring mvc +mybatis + KafKa+Flume+Zookeeper j2ee分布式架构 dubbo + springmvc + mybatis + ehcache + redis 分布式架构 分布式消息中间件:spring mvc +mybatis + KafKa+Flume+Zookeeper 分布式缓存:Redis spring mvc +mybatis + 分布式

{精华}分布式微服务云架构dubbo+zookeeper+springmvc+mybatis+shiro+redis分布式大型互联网企业架构

摘要: Jeesz主要定位于互联网企业架构,已内置企业信息化系统的基础功能和高效的代码生成工具,包括:系统权限组件.数据权限组件.数据字典组件.核心工具 组件.视图操作组件.工作流组件.代码生成等.采用分层设计.双重验证.提交数据安全编码.密码加密.访问验证.数据权限验证. 平台简介 Jeesz是一个分布式的框架,提供项目模块化.服务化.热插拔的思想,高度封装安全性的Java EE快速开发平台. Jeesz本身集成Dubbo服务管控.Zookeeper注册中心.Redis分布式缓存技术.Fast

jeesz分布式企业框架 javaWeb分布式架构 springmvc+mybatis+shiro dubbo zookeeper redis kafka app服务

平台简介 Jeesz是一个分布式的框架,提供项目模块化.服务化.热插拔的思想,高度封装安全性的Java EE快速开发平台. Jeesz本身集成Dubbo服务管控.Zookeeper注册中心.Redis分布式缓存技术.FastDFS分布式文件系统.ActiveMQ异步消息中间件.Nginx负载均衡等分布式技术 使用Maven做项目管理,项目模块化,提高项目的易开发性.扩展性 以spring Framework为核心容器,Spring MVC为模型视图控制器,MyBatis为数据访问层, Apach

分布式架构真正适用于大型互联网项目的架构! dubbo+zookeeper+springmvc+mybatis+shiro+redis

 分类: 分布式技术(3)  目录(?)[+] 平台简介 Jeesz是一个分布式的框架,提供项目模块化.服务化.热插拔的思想,高度封装安全性的Java EE快速开发平台. Jeesz本身集成Dubbo服务管控.Zookeeper注册中心.Redis分布式缓存技术.FastDFS分布式文件系统.ActiveMQ异步消息中间件.Nginx负载均衡等分布式技术 使用Maven做项目管理,项目模块化,提高项目的易开发性.扩展性 以spring Framework为核心容器,spring MVC为模型视图

精华【分布式微服务云架构dubbo+zookeeper+springmvc+mybatis+shiro+redis】分布式大型互联网企业架构!

摘要: 开发工具 1.Eclipse IDE:采用Maven项目管理,模块化. 2.代码生成:通过界面方式简单配置,自动生成相应代码,目前包括三种生成方式(增删改查):单表.一对多.树结构.生成后的代码如果不需要注意美观程度,生成后即可用. 技术选型(只列了一部分技术) 1.后端 服务框架:Dubbo.zookeeper.Rest服务 缓存:Redis.ehcache 消息中间件:ActiveMQ 负载均衡:Nginx 分布式文件:FastDFS 框架简介--主要定位于互联网企业架构,已内置企业