(转)Dubbo + Zookeeper入门初探
2018年2月15日,阿里巴巴的dubbo进入了Apache孵化器,社区的加入,希望dubbo能变得更好…
最近在学习一个分布式项目,使用到了dubbo,之前没有使用过,体验一下,分布式项目地址:点击这里
使用dubbo官网的一张图来介绍下dubbo(本人才开始学习,如有错误,欢迎指正):
Registry:注册中心,相当于房产中介,服务提供者和使用者都需要在这里注册/使用服务,我使用
zookeeper实现。Monitor:监控中心,相当于房产局,它可以统计服务提供者和服务使用者的一些信息,及他们之间的关系,我使用
dubbo admin实现。Provider:服务提供者,相当于房东,提供服务。
Consumer:服务消费者,想当于租户,使用服务。
下面我通俗的解释下dubbo的整个流程,我将服务比喻成房子:
start:dubbo一启动,房东想好自己准备要租出去的房子
register:房东将房子拿到房产中介那边进行登记,并留下自己的联系方式
subscribe:租户告诉房产中介自己想租一个什么样的房子
notify:房产中介回复给租户符合条件的房子的房东的联系方式
invoke:租户拿着联系方式去找房东租房子
count:房产局全程监控着房东和租户之间的交易
其中:
start、register、subscribe在dubbo服务一启动就完成了
notify、count是异步执行的
invoke是同步执行的
一、搭建java和tomcat环境
这一步比较简单,直接跳过,不会的可以看下这篇文章:Linux搭建JavaWeb开发环境(Java、Tomcat、MySQL)
二、搭建zookeeper
我使用的是zookeeper-3.5.2-alpha,点我下载。
下载后将其解压:
wxs@ubuntu:~$ sudo tar zxf zookeeper-3.5.2-alpha.tar.gz
wxs@ubuntu:~$ sudo mv zookeeper-3.5.2-alpha /usr
wxs@ubuntu:~$ cd /usr/zookeeper-3.5.2-alpha
wxs@ubuntu:/usr/zookeeper-3.5.2-alpha$ ls
bin ivysettings.xml recipes
build.xml ivy.xml src
CHANGES.txt lib zookeeper-3.5.2-alpha.jar
conf LICENSE.txt zookeeper-3.5.2-alpha.jar.asc
contrib NOTICE.txt zookeeper-3.5.2-alpha.jar.md5
dist-maven README_packaging.txt zookeeper-3.5.2-alpha.jar.sha1
docs
在zookper文件夹下建立logs文件夹和data文件夹用于存放日志和数据:
wxs@ubuntu:/usr/zookeeper-3.5.2-alpha$ sudo mkdir data
wxs@ubuntu:/usr/zookeeper-3.5.2-alpha$ sudo mkdir logs
进入conf目录,复制一份zoo_sample.cfg为zoo.cfg,对其进行修改:
wxs@ubuntu:/usr/zookeeper-3.5.2-alpha$ cd conf/
wxs@ubuntu:/usr/zookeeper-3.5.2-alpha/conf$ cp zoo_sample.cfg zoo.cfg
wxs@ubuntu:/usr/zookeeper-3.5.2-alpha/conf$ vim zoo.cfg
配置下dataDir和dataLogDir的路径,为之前创建的两个文件夹的路径,clientPort使用默认的2181端口即可:
我使用的时单机模式,没有配集群,这样就可以了。
进入到bin目录,启动服务即可:
wxs@ubuntu:/usr/zookeeper-3.5.2-alpha/bin$ ./zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /usr/zookeeper-3.5.2-alpha/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
wxs@ubuntu:/usr/zookeeper-3.5.2-alpha/bin$ ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/zookeeper-3.5.2-alpha/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: standalone
小心踩坑:
执行./zkServer.sh start时不要加sudo,如果root用户配置文件没有配JAVA_HOME会出现找不到JAVA_HOME!
wxs@ubuntu:/usr/zookeeper-3.5.-alpha/bin$ sudo ./zkServer.sh start
Error: JAVA_HOME is not set and java could not be found in PATH.
相关命令:
启动服务:start 停止服务: stop 重启服务; restart 查看状态:status
三、搭建dubbo监控中心
版本要求:
请使用dubbo-admin-2.5.6.war及以上版本,否则会不支持JDK1.8!
下载链接:点击这里
小心踩坑:
如果你的zookeeper和dubbo-admin在一台服务器上,dubbo-admin不用修改任何内容!
如果不在一台服务器上,将war包解压后,修改项目/WEF-INF/dubbo.properties文件,将zookeeper地址改为其所在服务器的地址(这里同时能修改root用户和guest用户的密码)。
四、配置项目
这里牵扯到项目代码,如果看不懂,可以下载文章开头的项目源码,或者直接使用官方提供的dubbo-demo,更为简单。
首先给服务提供方和服务使用方导入依赖包:
<properties>
<dubbo.version>2.6.1</dubbo.version>
<zookeeper.version>3.5.2-alpha</zookeeper.version>
<curator.version>4.0.1</curator.version>
</properties> <!-- dubbo包 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<!-- 排除dubbo自带的spring和netty,使用项目的,如果本身项目没有,无需排除 -->
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
</exclusion>
<exclusion>
<groupId>org.jboss.netty</groupId>
<artifactId>netty</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- zookeeper包 -->
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<type>pom</type>
</dependency>
<!-- curator(zookeeper的客户端)包 -->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-client</artifactId>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
</dependency>
还需要在相关配置文件加上dubbo的bean的头部约束,将下面的添加到bean头部即可:
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" http://code.alibabatech.com/schema/dubbo
http://code.alibabatech.com/schema/dubbo/dubbo.xsd
4.1 服务提供方代码
对于服务提供方,如果我们想要TbItemService对外提供服务:
package jit.wxs.service.impl; import jit.wxs.pojo.TbItem;
import jit.wxs.mapper.TbItemMapper;
import jit.wxs.service.TbItemService;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import org.springframework.stereotype.Service; /**
* <p>
* 商品表 服务实现类
* </p>
*
* @author jitwxs
* @since 2018-03-21
*/
@Service
public class TbItemServiceImpl extends ServiceImpl<TbItemMapper, TbItem> implements TbItemService { }
需要修改spring关于service的配置文件,加入dubbo的配置信息:
<?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"
xmlns:context="http://www.springframework.org/schema/context"
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
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd"> <!-- 扫描service层注解 -->
<context:component-scan base-package="jit.wxs.service"/> <!-- dubbo发布服务 -->
<!-- 提供方应用信息,用于计算依赖关系 -->
<dubbo:application name="e3-manager" />
<!-- 配置zookeeper的地址,集群地址用逗号隔开 -->
<dubbo:registry protocol="zookeeper" address="192.168.30.145:2181" />
<!-- 用dubbo协议在20880端口暴露服务 -->
<dubbo:protocol name="dubbo" port="20880" />
<!-- 声明需要暴露的服务接口
ref:为注入的对应接口的bean
timneout:超时时间,单位ms,开发模式可以设长一点方便debug
-->
<dubbo:service interface="jit.wxs.service.TbItemService" ref="tbItemServiceImpl" timeout="600000"/>
</beans>
dubbo:application:提供方的应用名dubbo:registry:注册中心的类型和地址dubbo:protocol:这个服务要暴露在哪个端口上(使用方根据这个端口使用服务)dubbo:service:设置暴露的服务的接口,ref为该接口的bean,timeout为超时时间
4.2 服务使用方代码
服务使用方,我使用Spring MVC来实现,修改Spring MVC的配置文件,加入dubbo的配置:
<?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"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> <!-- 扫描组件 -->
<context:component-scan base-package="jit.wxs.web"/> <!-- 注解驱动 -->
<mvc:annotation-driven /> <!-- 全局异常类 -->
<!--<bean class="cn.edu.jit.exception.GlobalExceptionResolver"/>--> <!-- 视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean> <!-- 引用dubbo服务 -->
<!-- 使用方应用信息,用于计算依赖关系 -->
<dubbo:application name="e3-manager-web"/>
<!-- 指定zookeeper的地址,集群用逗号分隔 -->
<dubbo:registry protocol="zookeeper" address="192.168.30.145:2181"/>
<!-- 申明要访问的接口,并创建代理对象,注入bean,名为id的值 -->
<dubbo:reference interface="jit.wxs.service.TbItemService" id="tbItemService" />
</beans>
dubbo:application: 使用方的应用名dubbo:registry:注册中心的类型和地址dubbo:reference:要使用的服务的接口,并将返回的注入bean,名称为id设的值
如果配置没有问题的话,现在使用方已经能够使用提供方提供的服务了,直接将tbItemService注入进来即可:
package jit.wxs.web; import jit.wxs.pojo.TbItem;
import jit.wxs.service.TbItemService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; /**
* <p>
* 商品表 前端控制器
* </p>
*
* @author jitwxs
* @since 2018-03-21
*/
@RestController
@RequestMapping("/items")
public class TbItemController {
@Autowired
private TbItemService tbItemService; @GetMapping("/{id}")
public TbItem getItemById(@PathVariable Long id) {
TbItem item = null;
if(id != null) {
item = tbItemService.selectById(id);
} return item;
}
}
五、测试
服务器上分别启动zookper和tomcat:
wxs@ubuntu:/usr/zookeeper-3.5.-alpha/bin$ ./zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /usr/zookeeper-3.5.-alpha/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
wxs@ubuntu:/usr/zookeeper-3.5.-alpha/bin$ ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/zookeeper-3.5.-alpha/bin/../conf/zoo.cfg
Client port found: . Client address: localhost.
Mode: standalone
wxs@ubuntu:/usr/apache-tomcat-8.5./bin$ ./startup.sh
Using CATALINA_BASE: /usr/apache-tomcat-8.5.
Using CATALINA_HOME: /usr/apache-tomcat-8.5.
Using CATALINA_TMPDIR: /usr/apache-tomcat-8.5./temp
Using JRE_HOME: /usr/jdk1..0_161/jre
Using CLASSPATH: /usr/apache-tomcat-8.5./bin/bootstrap.jar:/usr/apache-tomcat-8.5./bin/tomcat-juli.jar
Tomcat started.
使用下面命令可以持续显示tomcat的输出:
wxs@ubuntu:/usr/apache-tomcat-8.5.28/bin$ tail -f ../logs/catalina.out
分别启动服务提供方的项目和服务使用方的项目:
测试下/items/{id}这个API:
成功!下面再访问下监控中心,因为监控中心和zookeeper在一台服务器上,我的tomcat部署在8888端口,即访问192.168.30.145:8888/dubbo-admin即可,用户名密码默认为root:
查看所有注册的服务:
查看包括消费者和提供者的所有应用名:
消费者、提供者详细信息:
本文转自 作者:Jitwxs 来源:CSDN
原文:https://blog.csdn.net/yuanlaijike/article/details/79654183
(转)Dubbo + Zookeeper入门初探的更多相关文章
- Dubbo,Zookeeper入门
Zookeeper 功能:分布式应用程序协调服务,集群管理者,监视集群各个节点状态-->提交反馈-->进行下一步合理操作: 机制:目录方式,当目录节点发生变化(数据改变,被删除,子节点增加 ...
- Dubbo+Zookeeper 入门Demo
1.Zookeeper安装及启动 可参考这篇文章https://www.cnblogs.com/geekdc/p/5948326.html 从下载到启动都描述的很详细,按照文章一步一步走即可. 2.D ...
- spring Boot环境下dubbo+zookeeper的一个基础讲解与示例
一,学习背景 1. 前言 对于我们不管工作还是生活中,需要或者想去学习一些东西的时候,大致都考虑几点: a) 我们为什么需要学习这个东西? b) 这个东西是什么? c) ...
- 基于springboot构建dubbo的入门demo
之前记录了构建dubbo入门demo所需的环境以及基于普通maven项目构建dubbo的入门案例,今天记录在这些的基础上基于springboot来构建dubbo的入门demo:众所周知,springb ...
- zookeeper 入门知识
作为开启分布式架构的基石,除了必会还有的选么 自己的一些理解,有错误的话请一定要给予指正! 一.是什么? 分布式数据一致性的解决方案. 二.有什么用 数据的发布/订阅(配置中心) . 负载均衡(du ...
- Dubbo从入门到实战:实战篇
一.加入 zookeeper 作为注册中心 在前面的案例中,我们没有使用任何的注册中心,而是用一种直连的方式进行的.但是,实际上很多时候,我们都是使用 dubbo + zookeeper 的方式,使用 ...
- Dubbo从入门到实战:入门篇
很多时候,其实我们使用这个技术的时候,可能都是因为项目需要,所以,我们就用了,但是,至于为什么我们需要用到这个技术,可能自身并不是很了解的,但是,其实了解技术的来由及背景知识,对于理解一项技术还是有帮 ...
- springboot整合dubbo+zookeeper最新详细
引入 最近和小伙伴做一个比赛,处于开发阶段,因为涉及的服务比较多,且服务需要分开部署在不同的服务器上,讨论之后,打算采用分布式来做,之前学习springboot的时候,部分章节涉及到了springbo ...
- 搭载Dubbo+Zookeeper踩了这么多坑,我终于决定写下这篇!
大家好,我是melo,一名大二上软件工程在读生,经历了一年的摸滚,现在已经在工作室里边准备开发后台项目啦. 这篇文章我们不谈数据结构了,来谈谈入门分布式踩过的坑.感觉到了分布式这一层,由于技术更新迭代 ...
随机推荐
- ionic使用CardIO实现扫描银行卡功能(只能扫描16位以下,并且是浮雕数字)
在一些涉及支付功能的app,一般需要绑定银行卡,除了靠用户手动输入银行卡号,用手机扫描银行卡也是一种常用的手段,查阅了写资料,发现ionic有CardIO插件可以实现这个功能,就兴致冲冲去尝试,结果有 ...
- vue 中echart折线自适应
前端时间做一个vue的项目,echart是按需引入的如下: // 引入 ECharts 主模块 import echarts from 'echarts/lib/echarts' // 引入折线图 i ...
- Netty入门 零基础
因为接下来的项目要用到netty,所以就了解一下这个程序,奈何网上的教程都是稍微有点基础的,所以,就写一篇对于netty零基础的,顺便也记录一下. 先扔几个参考学习的网页: netty 官方API: ...
- react 项目 mock数据
前言 我们都知道在实际的开发阶段,后端接口开发是和前端开发同步进行,甚至迟于前端的进度,这就直就导致前端需要等待后端接口的时间. 这种情况就严重导致前端开发缓慢,那这时候前端的开发人员只能写静态模拟数 ...
- The Cost of JavaScript --------引用
tl;dr: 想要保持页面的快速运行,你需要仅加载当前页面所需的 JavaScript 代码.优先考虑用户所需,之后运用代码分离懒加载其他内容. Is it happening - 在这个时期,你可以 ...
- 33. ClustrixDB 扩展集群的容量-Flex up
ClustrixDB被授权为每个节点的最大核数以及集群的最大节点数.如果需要扩展许可证,请联系Clustrix Sales.扩容之前检查License是否支持节点数. 一.准备节点 提供节点并在每个节 ...
- 激活WebStorm2017.3.1
亲测有效,测试日期:20181202 转发自:https://blog.csdn.net/bjzhaoxiao/article/details/81486490
- 2019南昌网络赛 J Distance on the tree 主席树+lca
题意 给一颗树,每条边有边权,每次询问\(u\)到\(v\)的路径中有多少边的边权小于等于\(k\) 分析 在树的每个点上建\(1\)到\(i\)的权值线段树,查询的时候同时跑\(u,v,lca ...
- jQuery动画之停止动画
语法格式: $(selector).stop(true, false); 第一个参数: + ture: 后续动画不执行 false:后续动画会执行 第二个参数: true: 立即执行完成当前动画 fa ...
- JavaWeb_(Struts2框架)参数传递之接收参数与传递参数
此系列博文基于同一个项目已上传至github 传送门 JavaWeb_(Struts2框架)Struts创建Action的三种方式 传送门 JavaWeb_(Struts2框架)struts.xml核 ...