Dubbo与Zookeeper、SpringMVC整合和使用(入门级)

Wesley13
• 阅读 477

Dubbo与Zookeeper、SpringMVC整合和使用(入门级)

介绍就不过多的说明。可以参考http://blog.csdn.net/congcong68/article/details/41113239博客里面写的相关介绍。

后续会补充完善SpringMVC部分

Dubbo与Zookeeper、SpringMVC整合和使用(入门级) 微信扫一扫,支持一下我的个人微信小程序

项目码云GIT地址:https://gitee.com/xshuai/dubbo/

开发工具

MyEclipse 10.7

JDK

1.7

容器

Tomcat 8(运行dubbo)

zookeeper版本

zookeeper-3.4.6

dubbo

dubbo-admin-2.5.3

dubbo-admin-2.5.3下载地址:http://pan.baidu.com/s/1bozCMzP

zookeeper下载地址:http://www-eu.apache.org/dist/zookeeper/zookeeper-3.4.6/

  • Dubbo+Zookeeper 的下载安装配置启动

1.dubbo-admin-2.5.3下载完成后。放在webapps文件夹下面。先把默认的tomcat的ROOT项目备份后移除。将dubbo-admin-2.5.3.war改成ROOT.war 备用

2.zookeeper下载后解压安装即可。windows安装完成后如下图

Dubbo与Zookeeper、SpringMVC整合和使用(入门级)

进入到conf里面,会看到zoo_sample.cfg文件。复制一个修改为zoo.cfg,修改相关配置内容

# 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.
# do not use /tmp for storage, /tmp here is just 
# example sakes.
dataDir=/tmp/zookeeper
# the port at which the clients will connect
#这块是设置zookeeper的端口。默认2181
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the 
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1

到bin文件夹下面。启动zookeeper,windows 点击zkServer.cmd即可,启动成功如下图

Dubbo与Zookeeper、SpringMVC整合和使用(入门级)

3.可以启动tomcat了。这样直接访问 就能看到dubbo的页面。要不然dubbo启动会报错。第一次入门的话建议就用默认的端口配置即可。默认用户 root 密码 root

Dubbo与Zookeeper、SpringMVC整合和使用(入门级)

登录成功以后看到如下页面

Dubbo与Zookeeper、SpringMVC整合和使用(入门级)

以上就是dubbo+zookeeper的配置和启动。下面开始Java代码的编写

  • 整合Dubbo+Zookeeper+SpringMVC

1.创建myDubbo项目为主项目,结构图如下 myC P S后续才创建,刚开始是没有的。

Dubbo与Zookeeper、SpringMVC整合和使用(入门级)

POM.XML配置如下

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com</groupId>
  <artifactId>mydubbo</artifactId>
  注意这里。打包为POM,分布式系统的第一步
  <packaging>pom</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>mydubbo</name>
  <url>http://maven.apache.org</url>
   <properties>  
        <spring.version>3.2.4.RELEASE</spring.version>  
    </properties> 
  <dependencies>
            <dependency>  
            <groupId>com.alibaba</groupId>  
            <artifactId>dubbo</artifactId>  
            <version>2.5.3</version>  
            <exclusions>  
                <exclusion>  
                    <groupId>org.springframework</groupId>  
                    <artifactId>spring</artifactId>  
                </exclusion>  
            </exclusions>  
        </dependency>  
        <!--dubbo注册中心-->  
        <dependency>  
            <groupId>org.apache.zookeeper</groupId>  
            <artifactId>zookeeper</artifactId>  
            <version>3.4.6</version>  
        </dependency>  
        <!--zookeeper客户端-->  
        <dependency>  
            <groupId>com.github.sgroschupf</groupId>  
            <artifactId>zkclient</artifactId>  
            <version>0.1</version>  
        </dependency>  
        <dependency>  
            <groupId>org.springframework</groupId>  
            <artifactId>spring-core</artifactId>  
            <version>${spring.version}</version>  
        </dependency>  
        <dependency>  
            <groupId>org.springframework</groupId>  
            <artifactId>spring-context</artifactId>  
            <version>${spring.version}</version>  
        </dependency>  
  </dependencies>
  <build>
    <finalName>mydubbo</finalName>
  </build>
  创建子项目后自动会加载。刚开始是没有的
  <modules>
      <module>myService</module>
      <module>myProvider</module>
      <module>myConsumer</module>
  </modules>
</project>

2.创建服务提供商子项目,MyEclipse操作如下图示意 对mydubbo项目鼠标右键new或者maven插件直接创建maven module项目,填写子项目名称。有的如果不选种Create a simple project 自定义创建会报错。选择则不会。根据实际情况来确定是否选择

Dubbo与Zookeeper、SpringMVC整合和使用(入门级)

Dubbo与Zookeeper、SpringMVC整合和使用(入门级)
3.创建3个子项目分别为 myService(服务商(接口),模块提供方) myProvider(供应者,给dubbo zookeeper注册暴露接口) myConsumer


  • myService 项目相关配置

  1. pom配置

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <parent>
        <artifactId>mydubbo</artifactId>
        <groupId>com</groupId>
        <version>0.0.1-SNAPSHOT</version>
      </parent>
      <name>myService</name>
      <artifactId>myService</artifactId>
      <packaging>jar</packaging>
    </project>
    
  2. 新建一个接口类

    package com.xiaoshuai;
    
    public interface HelloService {
        public String speakHello(String name);
    }
    
  3. 以上工作完成后,进行maven install

  • myProvider项目相关配置

  1. pom配置

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <parent>
        <artifactId>mydubbo</artifactId>
        <groupId>com</groupId>
        <version>0.0.1-SNAPSHOT</version>
      </parent>
      <artifactId>myProvider</artifactId>
    引用接口服务项目 子项目maven install 为jar
        <dependencies>
            <dependency>
                <groupId>com</groupId>
                <artifactId>myService</artifactId>
                <version>0.0.1-SNAPSHOT</version>
            </dependency>
        </dependencies>
    </project>
    
  2. 实现接口服务者

    package com.xiaoshuai.impl;
    
    
    import com.xiaoshuai.HelloService;
    public class HelloServiceImpl implements HelloService{
    
        public String speakHello(String name) {
            return "你好:"+name+"欢迎查阅小帅丶博客";
        }
        
    }
    
  3. 将实现类接口类暴露给dubbo+zookeeper 在myProvider创建provider.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="hello-provider"  />  
      
        <!-- 使用multicast广播注册中心暴露服务地址 -->  
        <dubbo:registry address="zookeeper://127.0.0.1:2181" />  
      
        <!-- 用dubbo协议在20880端口暴露服务 -->  
        <dubbo:protocol name="dubbo" port="20880" />  
      
        <!-- 声明需要暴露的服务接口 -->  
        <dubbo:service interface="com.xiaoshuai.HelloService" ref="helloService" />  
     
        <!-- 和本地bean一样实现服务 -->  
        <bean id="helloService" class="com.xiaoshuai.impl.HelloServiceImpl" />  
      
    </beans>  
    
  4. 需要创建一个Java类写个方法 去 加载provider.xml 注册到dubbo + zookeeper

    package com.xiaoshuai.impl;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class ProviderServer {
        public static void main(String[] args){
            try {
                ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("provider.xml");
                context.start();
                System.in.read();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    
  5. 可以运行。启动该提供者服务,编写消费者。

  6. 可以看到dubbo 提供者服务已经注册

Dubbo与Zookeeper、SpringMVC整合和使用(入门级)

Dubbo与Zookeeper、SpringMVC整合和使用(入门级)

  • myConsumer 项目相关配置

  1. pom配置

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <parent>
        <artifactId>mydubbo</artifactId>
        <groupId>com</groupId>
        <version>0.0.1-SNAPSHOT</version>
      </parent>
      <artifactId>myConsumer</artifactId>
        <dependencies>
            <dependency>
                <groupId>com</groupId>
                <artifactId>myService</artifactId>
                <version>0.0.1-SNAPSHOT</version>
            </dependency>
        </dependencies>
    </project>
    
  2. 消费者进行订阅provider的服务,也就是需要去zookeeper读取加载服务,那就需要创建一个consumer.xml去加载zookeeper

    <?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="hello-consumer" />
        <!-- 使用multicast广播注册中心暴露发现服务地址 -->
        <dubbo:registry address="zookeeper://127.0.0.1:2181" />
        <!-- 生成远程服务代理,可以和本地bean一样使用demoService -->
        <dubbo:reference id="helloService" interface="com.xiaoshuai.HelloService" />
    </beans>
    
  3. 创建一个消费者方法,进行调用ConsumerClient

    package com.xiaoshuai;
    
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class ConsumerClient {
        public static void main(String[] args) {
            ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("consumer.xml");
            HelloService helloService = (HelloService) context.getBean("helloService");
            String result = helloService.speakHello("xiaoshuai");
            System.out.println(result);
        }
    }
    
  4. 运行该方法输出一下内容Dubbo与Zookeeper、SpringMVC整合和使用(入门级)

  5. 接下来看dubbo中心有什么内容。Dubbo与Zookeeper、SpringMVC整合和使用(入门级)

  6. 看看消费者里面显示些什么内容Dubbo与Zookeeper、SpringMVC整合和使用(入门级)

  7. 详细消费者信息如图所示Dubbo与Zookeeper、SpringMVC整合和使用(入门级)

  • 以上一个简单的分布式的Demo就已经完结

  • 新手入门。有问题的地方可以一起交流哦。

点赞
收藏
评论区
推荐文章
技术小男生 技术小男生
4个月前
linux环境jdk环境变量配置
1:编辑系统配置文件vi/etc/profile2:按字母键i进入编辑模式,在最底部添加内容:JAVAHOME/opt/jdk1.8.0152CLASSPATH.:$JAVAHOME/lib/dt.jar:$JAVAHOME/lib/tools.jarPATH$JAVAHOME/bin:$PATH3:生效配置
blmius blmius
1年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Stella981 Stella981
1年前
ASMSupport教程4.9 生成三元运算符
<p这节我们介绍如何用ASMSupport生成三元运算符(...?...:...)运算符。我们预计生成如下代码:</p<divid"scid:9D7513F9C04C4721824A2B34F0212519:935e30cc33214e0093ba9834f3a4e044"class"wlWriterEditableS
Wesley13 Wesley13
1年前
MySQL查询按照指定规则排序
1.按照指定(单个)字段排序selectfromtable_nameorderiddesc;2.按照指定(多个)字段排序selectfromtable_nameorderiddesc,statusdesc;3.按照指定字段和规则排序selec
Stella981 Stella981
1年前
Android蓝牙连接汽车OBD设备
//设备连接public class BluetoothConnect implements Runnable {    private static final UUID CONNECT_UUID  UUID.fromString("0000110100001000800000805F9B34FB");
Stella981 Stella981
1年前
Angular material mat
IconIconNamematiconcode_add\_comment_addcommenticon<maticonadd\_comment</maticon_attach\_file_attachfileicon<maticonattach\_file</maticon_attach\
Wesley13 Wesley13
1年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
helloworld_34035044 helloworld_34035044
6个月前
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
3A网络 3A网络
4个月前
理解 virt、res、shr 之间的关系(linux 系统篇)
理解virt、res、shr之间的关系(linux系统篇)前言想必在linux上写过程序的同学都有分析进程占用多少内存的经历,或者被问到这样的问题——你的程序在运行时占用了多少内存(物理内存)?通常我们可以通过t
3A网络 3A网络
4个月前
开发一个不需要重写成 Hive QL 的大数据 SQL 引擎
开发一个不需要重写成HiveQL的大数据SQL引擎学习大数据技术的核心原理,掌握一些高效的思考和思维方式,构建自己的技术知识体系。明白了原理,有时甚至不需要学习,顺着原理就可以推导出各种实现细节。各种知识表象看杂乱无章,若只是学习