Dubbo和Zookeeper入门到实战,看这篇就够了

article/2025/11/1 16:15:47


前沿:在当下流行的分布式架构中Dubbo是非常流行rpc框架,借着这几天有空学习学习,并在后面的项目中进行实战,为后面的分布式项目做铺垫。

Dubbox简介

Dubbox 是一个分布式rpc框架,是阿里巴巴的开源产品,后阿里便不再维护,由当当网进行维护,并改名为Dubbo。

Dubbo 致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。


节点角色说明:
  • Provider: 暴露服务的服务提供方。

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

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

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

  • Container: 服务运行容器。

调用关系说明:

  • 服务容器负责启动,加载,运行服务提供者。

  • 服务提供者在启动时,向注册中心注册自己提供的服务。

  • 服务消费者在启动时,向注册中心订阅自己所需的服务。

  • 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推,送变更数据给消费者。

  • 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,
    如果调用失败,再选另一台调用。

  • 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计
    数据到监控中心。

Zookeeper 介绍

官方推荐使用 zookeeper 注册中心。用于服务地址的注册与查找。是一个树型的目录服务,支持变更推送,适合作为Dubbo服务的注册中心,工业强度较高,可用于生产环境。

Zookeeper 在Linux系统的安装

安装步骤:
第一步:安装 jdk
第二步:把 zookeeper 的压缩包上传到 linux 系统。
注意:Alt+P 进入SFTP ,输入put d:\zookeeper-3.4.6.tar.gz 上传
第三步:解压缩压缩包

tar -zxvf zookeeper-3.4.6.tar.gz

第四步:进入 zookeeper-3.4.6 目录,创建 data 文件夹。

mkdir data

第五步:进入conf目录 ,把 zoo_sample.cfg 改名为 zoo.cfg

cd conf
mv zoo_sample.cfg zoo.cfg

第六步:打开zoo.cfg ,  修改 data 属性:dataDir=/root/zookeeper-3.4.6/data

Zookeeper 服务启动

进入bin目录,输入命令启动zookeeper

 ./zkServer.sh start

出现下图表示启动成功

在这里插入图片描述

关闭zookeeper
./zkServer.sh stop

出现以下图表示关闭成功

在这里插入图片描述
查看状态:
./zkServer.sh status

如果启动状态,提示

在这里插入图片描述

如果未启动状态,提示:
在这里插入图片描述

Dubbo本地 JAR包部署与安装

Dubbo的jar包并没有部署到Maven的中央仓库中,、我们现在需要手动将Dubbox的jar包安装到我的本地仓库中。

先将dubbo-2.8.4.jar包放到d:\setup, 然后输入命令

mvn install:install-file -Dfile=d:\setup\dubbo-2.8.4.jar -DgroupId=com.alibaba -DartifactId=dubbo -Dversion=2.8.4 -Dpackaging=jar

下载网址:https://github.com/dangdangdotcom/dubbox/tree/dubbox-2.8.4
下载后直接解压,解压后,直接cd进入dubbo中进行maven的打包,然后在target目录就会生成dubbox-2.8.4.jar包

入门实战

  • 创建Maven工程(WAR)dubboxdemo-service  ,在pom.xml中引入依赖

<projectxmlns="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>
<groupId>cn.itcast.dubboxdemo</groupId>
<artifactId>dubboxdemo-service</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<properties>        <spring.version>4.2.4.RELEASE</spring.version>
</properties><dependencies><!-- Spring --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aspects</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jms</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId><version>${spring.version}</version></dependency>   <!-- dubbo相关 --><dependency><groupId>com.alibaba</groupId><artifactId>dubbo</artifactId><version>2.8.4</version>            </dependency><dependency><groupId>org.apache.zookeeper</groupId><artifactId>zookeeper</artifactId><version>3.4.6</version></dependency><dependency><groupId>com.github.sgroschupf</groupId><artifactId>zkclient</artifactId><version>0.1</version></dependency>       <dependency><groupId>javassist</groupId><artifactId>javassist</artifactId><version>3.11.0.GA</version></dependency>   <dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.0.1</version><scope>provided</scope></dependency><!-- java ee jar 包 --><dependency><groupId>javax</groupId><artifactId>javaee-api</artifactId><version>6.0</version><scope>provided</scope></dependency><!-- JSP相关 --><dependency><groupId>javax.servlet</groupId><artifactId>jsp-api</artifactId><version>2.0</version><scope>provided</scope></dependency></dependencies>
<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>2.3.2</version><configuration><source>1.7</source><target>1.7</target></configuration></plugin><plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><configuration><!-- 指定端口 --><port>8081</port><!-- 请求路径 --><path>/</path></configuration></plugin></plugins>
</build>
</project>
  • 在工程的webapps下创建WEB-INF文件夹,创建web.xml

<?xmlversion="1.0"encoding="UTF-8"?>
<web-appxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"version="2.5">  <!-- 加载spring容器 --><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext*.xml</param-value></context-param><listener>      <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener> 
</web-app>
  • 创建业务接口,创建包cn.ldc.org.dubbodemo.service,用于存放业务接口,创建接口

package cn.ldc.org.dubbodemo.service;
/*** 业务接口* @author Administrator**/
publicinterface UserService {    public String getName();    
}
  • 创建业务实现类
    创建包cn.ldc.org.dubbodemo.service.impl ,用于存放业务实现类。创建业务实现类:

package cn.ldc.org.dubbodemo.service.impl;
import com.alibaba.dubbo.config.annotation.Service;
import cn.itcast.dubbodemo.service.UserService;
@Service
publicclass UserServiceImpl implements UserService {public String getName() {       return"itcast";}
}

注意:Service注解与原来不同,需要引入com.alibaba包下的

  • 编写配置文件

在src/main/resources下创建applicationContext-service.xml ,内容如下:

<?xmlversion="1.0"encoding="UTF-8"?>
<beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:p="http://www.springframework.org/schema/p"xmlns:context="http://www.springframework.org/schema/context"xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsdhttp://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"><dubbo:application name="dubboxdemo-service"/>
<dubbo:registry address="zookeeper://192.168.179.128:2181"/>
<dubbo:annotation package="cn.ldc.org.dubboxdemo.service" />
</beans>

注意:dubbo:annotation用于扫描@Service注解。

  • 测试运行

tomcat7:run

服务消费者开发

开发步骤:
(1)创建Maven工程(WAR)dubboxdemo-web ,在pom.xml引入依赖 ,同“dubboxdemo-service”工程。区别就是把tomcat插件的运行端口改为8082 。
(2)在webapps目录下创建WEB-INF 目录,并创建web.xml

<?xmlversion="1.0"encoding="UTF-8"?>
<web-appxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"version="2.5">  
<!-- 解决post乱码 --><filter><filter-name>CharacterEncodingFilter</filter-name>      <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>utf-8</param-value></init-param><init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param></filter><filter-mapping><filter-name>CharacterEncodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>       
<servlet><servlet-name>springmvc</servlet-name>  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!-- 指定加载的配置文件 ,通过参数contextConfigLocation加载--><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext-web.xml</param-value></init-param>
</servlet>
<servlet-mapping><servlet-name>springmvc</servlet-name><url-pattern>*</url-pattern>
</servlet-mapping>
</web-app>

(3)拷贝业务接口
将“dubboxdemo-service”工程的cn.ldc.org.dubboxdemo.service 包以及下面的接口拷贝至此工程。
(4)编写Controller

package cn.ldc.org.dubboxdemo.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import cn.itcast.dubbodemo.service.UserService;
@Controller
@RequestMapping("/user")
publicclass UserController {@Referenceprivate UserService userService;    @RequestMapping("/showName")@ResponseBodypublic String showName(){returnuserService.getName();}       
}

(5)编写spring配置文件
在src/main/resources下创建applicationContext-web.xml

<?xmlversion="1.0"encoding="UTF-8"?>
<beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:p="http://www.springframework.org/schema/p"xmlns:context="http://www.springframework.org/schema/context"xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsdhttp://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"><mvc:annotation-driven ><mvc:message-converters register-defaults="false"><bean class="org.springframework.http.converter.StringHttpMessageConverter"><constructor-arg value="UTF-8" /></bean></mvc:message-converters>   </mvc:annotation-driven><!-- 引用dubbo 服务 --><dubbo:application name="dubboxdemo-web" /><dubbo:registry address="zookeeper://192.168.179.128:2181"/>
<dubbo:annotation package="cn.ldc.org.dubboxdemo.controller" />
</beans>

测试运行

tomcat7:run

在浏览器输入http://localhost:8082/user/showName,查看浏览器输出结果


1. 全栈架构之打包推荐【建议收藏,常读】

2. 一个空格引发的“惨案“

3. 分布式系统中Session共享的常用方案

4. Java语言“坑爹”排行榜TOP 10

5. 我是一个Java类(附带精彩吐槽)

6. mysql索引失效,差点我的工作凉了

7. 既生synchronized,何生volatile?

8. 微服务一直火,为什么服务化要搞懂?

9. MySQL的COUNT语句,不简单!

10. 漫画:HashSet和TreeSet实现与原理

扫码二维码关注我

·end·

—如果本文有帮助,请分享到朋友圈吧—

我们一起愉快的玩耍!

你点的每个赞,我都认真当成了喜欢


http://chatgpt.dhexx.cn/article/tRQWR0bl.shtml

相关文章

Dubbox的简单介绍

简介&#xff1a;Dubbox是一个分布式服务框架&#xff0c;其前身是阿里巴巴开源项目Dubbo,后期阿里巴巴停止维护后&#xff0c;当当网在其基础上进行了优化&#xff0c;并继续维护&#xff0c;改名Dubbox。 一、 Dubbox的基本概念 Dubbox是一种分布式服务架构&#xff0c;它除…

dubbox概论

1.dubbox 是个啥&#xff1f; 他是一个分布式服务架构风格&#xff0c;其前身是阿里巴巴开源项目Dubbo&#xff0c;被国内电商及互联网项目中使用&#xff0c;后期阿里巴巴停止了该项目的维护&#xff0c;当当网便在dubbo基础上进行优化&#xff0c;并继续维护&#xff0c;为了…

Java直接运行JavaScript代码或js文件

执行JavaScript用到的类有&#xff1a; javax.script.ScriptEngine;javax.script.ScriptEngineFactory;javax.script.ScriptEngineManager;javax.script.ScriptException;需求1&#xff1a;执行一个JavaScript字符串&#xff0c;将结果打印在控制台上。 ScriptEngineManager m …

node环境执行js文件

1、JavaScript代码的执行 目前知道的两种方式有两种&#xff1a; 将代码交给浏览器&#xff08;在浏览器环境运行&#xff09; html文件引入js代码&#xff0c;交给浏览器解析将代码载入node的环境中执行&#xff08;在node环境运行&#xff09; 通过在电脑安装的Node.js环境…

在JavaScript文件中引用另一个JavaScript文件

前言 写了一个全局main.js&#xff0c;其中又需要引用其他第三方js文件&#xff0c;但是不希望在每个页面引用main.js之前再引用一遍第三方js文件&#xff0c;那就把第三方js文件放到main.js中引用。 方法 1. document.write 目录结构 index.html <!DOCTYPE html> …

protobuf文件生成js文件详细流程

1,下载用来生成web js文件的工具 protoc-gen-grpc-web 下地地址&#xff1a;protoc-gen-grpc-web 选择&#xff1a;protoc-gen-grpc-web-1.3.1-windows-x86_64.exe 即可 下载完成后改名为protoc-gen-grpc-web.exe并移动到项目里&#xff0c;和proto文件存放在同一目录下 2,…

如何创建并调用js文件

创建 首先&#xff0c;新建一个txt文件更改后缀名为js 点击另存为 创建成功 调用 <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>JavaScript</title> </head> <body> <p id"registerN&…

动态加载JavaScript文件

目录 配置 无脑方法&#xff01; 逆袭之道&#xff01; 一块蛋糕&#xff01; 结论 源代码 JavaScript文件的动态加载是您必须拥有的非常有用的工具之一。它允许您通过将阻止脚本从加载过程中移出&#xff08;通常称为“延迟加载”&#xff09;来优化网页性能&#xff0c…

前端基础应用:js文件编写

jss文件在前端网页页面制作过程中作用主要是控制html文件中标签的逻辑问题&#xff0c;增强操作性实用性. 一、js的作用&#xff0c;写代码的位置 1)作用 1.修改双标签的标签内容 例如&#xff1a;改变他的文本 <p id"p1">我是段落1</p> <button…

JavaScript-第一个js文件

文章目录 编写第一个JS代码编译器的选择使用安装VScode安装 open in browser创建第一个项目编写第一个JS程序运行成功显示 alert()document.write()consolog.log()执行流程连接到外部文件总结 编写第一个JS代码 编译器的选择 小编在这里就延续python的啦&#xff0c;继续用VS…

Ubuntu 分区挂载后无权限

一、问题描述 将VMware&#xff0c;分区挂载后&#xff0c;不能在那个区域新建文件夹&#xff0c;没有权限 二、问题解决 sudo chown -R chenxinyun:users /Home/chenxinyun/SLAM 就可以了 PS&#xff1a;这里chenxinyun 是我都用户名,SLAM的路径是我的挂载点

Ubuntu分区方案

菜鸟方案&#xff1a; 1、挂载点/.&#xff08;主分区&#xff09;&#xff1a;安装系统和软件&#xff1b;分区格式ext4 2、swap分区&#xff1a;逻辑分区&#xff0c;充当虚拟内存&#xff0c;2-4G&#xff1b;分区格式swap 常用方案&#xff1a; 1、 挂载点/&#xff1a…

Ubuntu 分区知识整理

目录 根分区&#xff08;主分区&#xff09; boot 分区 home 分区 usr 分区 交换分区 tmp分区&#xff08;目录&#xff09; var分区&#xff08;目录&#xff09; 【声明&#xff1a;大部分内容源于互联网】 根分区&#xff08;主分区&#xff09; 挂载点: “ / ” 作用: …

双系统Ubuntu分区

假设整个空闲空间有200G&#xff0c;主要分4个区&#xff1a; 1.给系统分区EFI&#xff1a; 在唯一的一个空闲分区上添加&#xff0c;大小200M&#xff0c;逻辑分区&#xff0c;空间起始位置&#xff0c;用于efi&#xff1b;这个分区必不可少&#xff0c;用于安装ubuntu启动项…

ubuntu 分区大小调整_如何调整Ubuntu分区的大小

ubuntu 分区大小调整 Whether you want to shrink your Ubuntu partition, enlarge it, or split it up into several partitions, you can’t do this while it’s in use. You’ll need a Ubuntu live CD or USB drive to edit your partitions. 无论您是要缩小Ubuntu分区,扩…

ubuntu 分区安装

分配大小 60G 选择安装Ubuntu 安装选项 安装类型&#xff1a;选择其他选项 新建分区表 1、swap区&#xff1a;设为逻辑分区&#xff1b;作用跟电脑内存类似&#xff0c;大小也可以和电脑内存一样大&#xff1b;一般2G就可以23 2、/boot区&#xff1a;设为主分区 &#xff0c;…

关于ubuntu分区挂载

转载自https://blog.csdn.net/u010409517/article/details/88081911 一、硬盘分区 1.查看硬盘及所属分区情况 sudo fdisk -lu 如图显示&#xff0c;我们对200G硬盘进行分区&#xff0c;现在已经分区80G的vda1 2.对硬盘进行分区 sudo fdisk /dev/sdb 如下图所示&#xff0c;可…

Ubuntu20.04分区方案

本人电脑是500G 固态硬盘 2T 机械硬盘&#xff0c;我只装了Ubuntu一个系统&#xff0c;如果是双系统&#xff0c;可以将500G固态硬盘分成250G250G两块&#xff0c;分别安装一个系统&#xff01;!大家可以根据自己电脑硬件配置进行调整 分区名称选择分区文件系统类型空间大小描…

ubuntu如何分区

1./swap交换分区&#xff0c;一般为你机器内存的两倍&#xff0c;少于这个容量&#xff0c;系统无法进入休眠。 实质是硬盘上的交换空间而非分区&#xff0c;所以没有格式&#xff0c;默认休眠将数据储存于此 可以取消&#xff08;如不用swap必须再设定方可休眠&#xff09;—…

Ubuntu22.04分区设置

今天刚安装了Ubuntu的系统&#xff0c;安装过程中遇到了磁盘分配的问题&#xff0c;个人总结后分区如下&#xff0c;具体使用有待验证 。 磁盘总容量&#xff1a;250G固态1T机械 实际分配完毕之后固态和机械硬盘各留了一部分空间以备哪个分区不够时再分配。 1.EFI分区 重要…