Dubbo整合Zookeeper和spring示例程序

1.Dubbo架构

本篇文章基于dubbox,使用dubbo应该也可以正常运行。

我认为想讲清楚一个任何一个技术框架,首先熟悉架构是非常有必要的。这将对对整个架构的理解有非常大的帮助。

我们首先看看Dubbo的架构,这段摘抄自Dubbo官方文档

节点角色说明:

Provider: 暴露服务的服务提供方。

Consumer: 调用远程服务的服务消费方。

Registry: 服务注册与发现的注册中心。

Monitor: 统计服务的调用次调和调用时间的监控中心。

Container: 服务运行容器。

调用关系说明:

  1. 服务容器负责启动,加载,运行服务提供者。
  2. 服务提供者在启动时,向注册中心注册自己提供的服务。
  3. 服务消费者在启动时,向注册中心订阅自己所需的服务。
  4. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
  5. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
  6. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。 看到这可能会发现,Dubbo其实就是一个分布式RPC的框架。下面我们用一个示范例子来说明该框架的使用方法。

2.运行Dubbo

我这里采用的是当当网修改后的版本DubboX

0. 安装运行Zookeeper

因为需要用到zookeeper作为注册中心,所以必须先安装运行zookeeper,到apache官网下载zookeeper,解压缩后找到zookeeper根目录下的conf目录下的zoo_sample.cfg文件,复制并重命名一份为zoo.cfg

在这里主要关注第14行zookeeper的开放端口,默认为2181。

修改完毕后在终端中进入zookeeper的根目录,执行bin下面的启动命令bin/zkServer.sh start

  1. 先下载到本地,并且解压缩
    Dubbox官网中下载Dubbox,并且解压缩。
  2. 编译
    在终端下进入Dubbox的根目录,执行编译命令mvn install -Dmaven.test.skip=true。编译过程比较漫长,可以先干其他事情再过来看结果,如果编译过程出错,可以搜索相关错误信息进行解决。
  3. 创建相应的工程
    编译完成后需要通过maven将项目创建成eclipse项目或者idea项目,由于我使用的是idea,所以这里我直接创建idea项目mvn idea:idea,创建eclipse项目则执行mvn eclipse:eclipse。
    完成后将项目导入开发工具中,我在这里导入idea,然后对项目执行maven install操作。

如果报没有配置jdk的错误,则把jdk配置到项目。

  1. 启动Dubbo 在项目编译成功后会在dubbo-admin的target目录下生成dubbo-admin-2.8.4文件夹,将此文件夹下的内容拷贝到tomcat/webapps/ROOT目录下,然后在tomcat根目录下执行bin/startup.sh,成功启动tomcat后在浏览器输入http://localhost:8080/,如果提示输入用户名和密码则输入root和root。如果进入如下页面则恭喜你,Dubbo启动成功。

3.开发示例程序

1.开发服务提供者provider

a.首先创建接口类TestRegistryService,创建抽象方法hello。

package com.stocsis.gavin.registry.service;  

 /**
* Created by qhg on 16/6/30.
*/
public interface TestRegistryService {
public String hello(String name);
}

b.编写接口实现方法TestRegistryServiceImpl,实现具体的方法

 package com.stocsis.gavin.registry.serviceImpl;  

  import com.stocsis.gavin.registry.service.TestRegistryService;  

  /**
* Created by qhg on 16/6/30.
*/
public class TestRegistryServiceImpl implements TestRegistryService {
public String hello(String name) {
return "hello "+name;
}
}

c.编写dubbo-provider.xml配置文件

d.运行provider

import org.springframework.context.support.ClassPathXmlApplicationContext;  

public class DemoProvider {  

    public static void main(String[] args)throws Exception {
ClassPathXmlApplicationContext content = new ClassPathXmlApplicationContext(new String[]{"dubbo-provider.xml"});
content.start();
System.in.read();
} }

运行成功后查看dubbo的监控页面

2.开发服务消费者consumer

a.编写dubbo-consumer

<?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管理页面比较清晰是哪个应用暴露出来的 -->
<dubbo:application name="dubbo_consumer"></dubbo:application>
<!-- 使用zookeeper注册中心暴露服务地址 -->
<dubbo:registry address="zookeeper://127.0.0.1:2181" check="true"/> <dubbo:reference interface="com.stocsis.gavin.registry.service.TestRegistryService" id="testRegistryService"/> </beans>

b.编写服务消费类IndexController

package com.stocsis.gavin.provider.controller;  

import com.stocsis.gavin.registry.service.TestRegistryService;
import org.springframework.context.support.ClassPathXmlApplicationContext; /**
* Created by qhg on 16/7/1.
*/
public class IndexController { public static void main(String[] args) throws Exception {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"dubbo-consumer.xml"});
context.start(); TestRegistryService testRegistryService = (TestRegistryService) context.getBean("testRegistryService"); // 获取远程服务代理
String hello = testRegistryService.hello("world"); // 执行远程方法 System.out.println(hello); // 显示调用结果
System.in.read();
}
}

在这里不需要自己创建对象,而是直接获取远程bean对象,这就是dubbo提供的主要功能。看看运行结果吧。

dubbo的消费者页面

至此,整个示例结束。

为了方便学习,我将整个项目的源代码上传到github,如有不清楚的请查看github查看详细代码。

欢迎大家在评论区讨论。

SpringMVC与Zookeeper、Dubbo使用示例的更多相关文章

  1. dubbo+zookeeper+springboot简单示例

    目录 dubbo+zookeeper+springboot简单示例 zookeeper安装使用 api子模块 生产者producer 消费者consumer @(目录) dubbo+zookeeper ...

  2. SpringMVC,Mybatis,FreeMarker连接mycat示例(一)

    首页 > 程序开发 > 软件开发 > Java > 正文 SpringMVC,Mybatis,FreeMarker连接mycat示例(一) 项目结构如图: 首先是各种配置文件, ...

  3. dubbo简单示例

    dubbo简单示例 2019-09-06 1 Zookeeper注册中心的搭建(windows单机) 下载zookeeper压缩包并解压到 D:\zookeeper\apache-zookeeper- ...

  4. spring springmvc mybatis maven 项目整合示例-导航页面

    spring原理 实践解析-简单的helloworld spring原理案例-基本项目搭建 01 spring framework 下载 官网下载spring jar包 spring原理案例-基本项目 ...

  5. 学习笔记_J2EE_SSM_01_spring+springMVC+Mybatis整合_XML配置示例

    spring+springMVC+Mybatis整合_XML配置示例 1.概述 spring+springMVC+Mybatis整合  XML配置方式 1.1 测试环境说明 名称 版本 备注 操作系统 ...

  6. SpringMVC、Zookeeper、Dubbo使用

    联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,Dubbo是一个分布式服务框架,在这种情况下诞生的.现在核心业务抽取出来,作为独立的服务,使前 ...

  7. Zookeeper+Dubbo+SpringMVC环境搭建

    项目码云GIT地址:https://gitee.com/xshuai/dubbo/ 开发工具 MyEclipse 10.7 JDK 1.7 容器 Tomcat 8(运行dubbo) zookeeper ...

  8. Zookeeper + Dubbo + SpringMVC + dubbo-admin

    第一步:在CentOS/Windows上安装Zookeeper[前提] A:CentOS     Zookeeper作为Dubbo服务的注册中心,Dubbo原先基于数据库的注册中心,没采用Zookee ...

  9. 【推荐】微服务分布式企业框架Springmvc+mybatis+shiro+Dubbo+ZooKeeper+Redis

              摘要: 主要定位于互联网企业架构,已内置企业信息化系统的基础功能和高效的代码生成工具,包括:系统权限组件.数据权限组件.数据字典组件.核心工具 组件.视图操作组件.工作流组件.代码 ...

随机推荐

  1. highchart

    highchart 1 2 #下载 https://www.highcharts.com/download a. 简单例子 <!DOCTYPE html> <html lang=&q ...

  2. python继承——封装

    python继承--封装 1 为什么要封装 封装数据的主要原因是:保护隐私 封装方法的主要原因是:隔离复杂度 2 封装分为两个层面 第一个层面的封装(什么都不用做):创建类和对象会分别创建二者的名称空 ...

  3. MySQL 如何使用 PV 和 PVC?- 每天5分钟玩转 Docker 容器技术(154)

    本节演示如何为 MySQL 数据库提供持久化存储,步骤为: 创建 PV 和 PVC. 部署 MySQL. 向 MySQL 添加数据. 模拟节点宕机故障,Kubernetes 将 MySQL 自动迁移到 ...

  4. $rootscope说明

    scope是AngularJS中的作用域(其实就是存储数据的地方),很类似JavaScript的原型链 .搜索的时候,优先找自己的scope,如果没有找到就沿着作用域链向上搜索,直至到达根作用域roo ...

  5. 40叔:自学的伙伴推荐看的PHP视频和书藉

    记录一下我的学习编程经历,在自学的路上,看了不少的断断续续的看了不少的视频,现在只会一点PHP增删改查. 同样迷的有没有? 要自己用原生的开发个CMS 或者BBS,ask 系统好像还差的远. 所以回头 ...

  6. 一日一练-CSS CSS中percentage百分值的使用

    子曰:学好百分值,考试考百分 首先是确定CSS 中的percentage 都可以应用在CSS 中的哪些属性,以及这些属性的值如何进行计算的,参考CSS 参考手册进行统计. 定位(Positioning ...

  7. 关于Java中的Null

    什么是Java中的Null? null在Java中是一个非常重要的概念,它最初是为了表示缺少某些东西,例如缺少用户.资源或任何东西而发明出来的.但是这也为Java程序员带来了很多麻烦,比如最常见的空指 ...

  8. 【swift,oc】ios开发中巧用自动布局设置自定义cell的高度

    ios开发中,遇到自定义高度不定的cell的时候,我们通常的做法是抽取一个frame类,在frame类中预算好高度,再返回. 但是苹果出来自动布局之后...春天来了!!来看看怎么巧用自动布局设置自定义 ...

  9. [AtCoder agc021D]Reversed LCS

    Description 题库链接 在改变原串 \(S\) 最多 \(K\) 个字母的前提下,使得 \(S\) 和 \(S\) 的反串的 \(LCS\) 尽量长,问最长长度. \(1\leq K\leq ...

  10. [HNOI2011]赛车游戏

    题目描述 名歌手LAALA最近迷上了一款赛车游戏,游戏中开车的玩家在不同的路段需要选择不同的速度,使得自己在最短的时间内到达终点.开始游戏时,车内的初始油量为f,所以游戏的关键是如何在速度和耗油量之间 ...