Dubbo+Zookeeper入门实例

2023-05-16

现在的公司接口调用是通过dubbo来实现的,所以这两天就了解了一下dubbo是如何进行通信的,写了一个最简单的例子。自上得来终觉浅,绝知此事要躬行。

前言.dubbo介绍

Dubbo是一个分布式服务框架,Dubbo的架构如图所示:

节点角色说明:

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

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

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

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

Container:服务运行容器。

调用关系说明:

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

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

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

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

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

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

一.项目构图和进入jar包

下面的图片是我写dubbo消费者和服务者工程以及两个工程需要引入的jar包,这个jar包中有可能是没有用的,我是直接引入的,很容易少包,你如果能用maven来引包的话可能会更好。

上面右边的图是两个工程需要引入的jar包,其中做出标记的“dubboProductor.jar”是服务者工程中提供服务的接口打的jar包,这个jar包要在消费者工程中被引入

二.提供服务的服务者工程

服务者配置文件ApplicationContextProducror.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服务者起个名 -->
        <dubbo:application name="productor"/>
        <!-- 用zookeeper注册服务中心暴露服务地址 -->
        <dubbo:registry protocol="zookeeper" address="zookeeper://127.0.0.1:2181"/>
        <!-- 暴露dubbo的通信端口 -->
        <dubbo:protocol name="dubbo" port="20880"/>
        <!-- 给消费者提供服务的接口 -->
        <dubbo:service ref="bubboProdutor" interface="com.dubbo.service.DubboProductorTest"></dubbo:service>
        <!-- 提供服务的实现类 -->
        <bean id="bubboProdutor" class="com.dubbo.service.impl.DubboProductorTestImpl"></bean>
</beans>

提供服务的服务接口DubboProductorTest

package com.dubbo.service;

public interface DubboProductorTest {
	public void sayHello();

}

服务接口的具体实现类DubboProductorTestImpl

package com.dubbo.service.impl;

import com.dubbo.service.DubboProductorTest;

public class DubboProductorTestImpl implements DubboProductorTest{
	public void sayHello(){
		System.out.println("这是我的第一个dubbo测试");
	}

}

始终将dubbo服务保持开启状态

package com.dubbo.main;

import java.text.SimpleDateFormat;
import java.util.Date;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class DubboProductorMain {

	public static void main(String[] args) throws Exception {
		ClassPathXmlApplicationContext cfg = new ClassPathXmlApplicationContext("com/dubbo/config/ApplicationContextProducror.xml");
		cfg.start();
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		Date date = new Date(); 
		System.out.println("按任意键退出,时间:"+sdf.format(date));
		//保证服务始终开启
		System.in.read();
	}
}

三.消费者工程

消费者服务工程ApplicationContextCustomer.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="customer"/>
        <!-- 用zookeeper注册服务中心发现服务地址 -->
        <dubbo:registry protocol="zookeeoer" address="zookeeper://127.0.0.1:2181"/>
        <!-- 调用远程的接口 -->
        <dubbo:reference id="dubboProvider" interface="com.dubbo.service.DubboProductorTest"/>
        
</beans>

消费者测试类CustomerMain

package com.dubbo.main;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.dubbo.service.DubboProductorTest;

public class CustomerMain {
	public static void main(String[] args) throws InterruptedException{
		ClassPathXmlApplicationContext cfig = new ClassPathXmlApplicationContext("com/dubbo/config/ApplicationContextCustomer.xml");
		DubboProductorTest test = (DubboProductorTest) cfig.getBean("dubboProvider");
		System.out.println("消费者调用服务方接口开始");
		test.sayHello();
		Thread.sleep(100000);
		System.out.println("消费者调用服务方接口结束");
	}

}

四.输出结果

1.启动zookeeper,启动zookeeper就是点击你zookeeper安装文件中bin文件下的zkServer.cmd文件, 注意你一定要先启动zookeeper服务

2.启动服务者和消费者工程,输出结果:


第二句话“这是我的第一个dubbo测试”是在启动消费者工程的时候才打印出来的。

我们在用zookeeper管理后台看一下在zookeeper中注册的服务者和消费者,zookeeper管理后台是通过解压dubbo-admin-2.5.4-SNAPSHOT.war,将解压获得文件放入到tomcat中的webapps文件夹下的root文件夹中的,你最好是复制一个tomcat,并改变tomcat中server.xml文件中所有的端口号,启动tomcat,我的端口号是8000,所以输入:

http://127.0.0.1:8000就进入到zookeeper管理后台的登录页面了。

可以看到上面有一个消费者和一个服务者,他们名称正是在配置文件中给消费者和服务者所命名的。

2016年已经过去一半,感觉上半年没有做什么的,明天就去找房子,现在住的离公司太远了,上下班要花很多时间在路上,卸载炒股软件,不看它了。最近情绪有点低落,只有学习才能感觉到进步。

后面的学习计划:

1.熟悉设计模式,几种常见的设计模式要会掌握

2.spring和mybatis源码过一遍,里面的原理要清楚

3.Java的JVM要清楚

4.学习redis

感觉把学习计划一列出来感觉自己还是个java初级程序员啊,啊,要抓紧时间学习啦[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NxcPeTHR-1662023642990)(http://static.blog.csdn.net/xheditor/xheditor_emot/default/crazy.gif)]

]

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Dubbo+Zookeeper入门实例 的相关文章

  • python循环性能pk

    python循环性能pk 在任何一种编程语言中 xff0c 循环都是非常消耗时间的操作 假设任意一种简单的单步操作耗费的时间是1个单位 xff0c 将此操作重复执行上万次 xff0c 最终耗费的时间也将增长上万倍 众所周知 xff0c py
  • Java程序员必读的入门&进阶书单

    外链图片转存失败 源站可能有防盗链机制 建议将图片保存下来直接上传 img lZRiIYGZ 1659350372441 http static chayuqing com edddeb70713efa2da69e953240a5b3ab
  • Java程序员怎样进阶

    对于很多学习Java的程序员来说 xff0c 回过头来看入门Java的过程并不难 xff0c 反而是学到后期感觉没有进步 xff0c 尤其是对于一个进军编程界的两三年的Java程序员来说 xff0c 工作如果还只是增删改查 xff0c 这可
  • java程序员该如何进阶?这份java中高级核心知识全面解析请收好

    Java中高级核心知识全面解析 是整理收录GitHub50K 43 Star以上的高质量学习文档 xff0c 前前后后花了近半个月的时间 xff0c 终于整理而成 包含了Java基础 网络 Linux 数据结构与算法 数据库 系统设计 工具
  • MySQL的 DDL和DML和DQL的基本语法

    前言 SQL语句 xff0c 即结构化查询语言 Structured Query Language xff0c 是一种特殊目的的编程语言 xff0c 是一种数据库查询和程序设计语言 xff0c 用于存取数据以及查询 更新和管理关系数据库系统
  • MySQL的10种常用数据类型

    MySQL的数据类型 常用的数据类型有 xff1a 整型 xff08 xxxint xff09 位类型 bit 浮点型 xff08 float和double real xff09 定点数 xff08 decimal numeric xff0
  • MySQL的DATE_FORMAT()函数将Date转为字符串

    一 前言 最近要做一些报表 xff0c 其中有一个创建报表的时间 xff0c 需要以固定的格式输出 xff1b 那么在SQL层面如何处理呢 xff1f 二 DATE FORMAT 函数 要将日期值格式化为特定格式 xff0c 可以使用DAT
  • MySQL的on duplicate key update 的使用

    mysql的存在就更新不存在就插入实现 先建数据库表 xff0c 重点要添加主键索引 xff08 id列 xff0c 没有测试 xff09 和唯一索引 xff08 branch no列 xff09 xff0c 随便找表测试 INSERT I
  • MySQL的Replace用法详解

    replace into平时在开发中很少用到 xff0c 这次是因为在做一个生成分布式ID的开源项目 xff0c 调研雅虎推出的一个基于数据库生成唯一id生成方案 xff1a flickr 碰到的一个知识盲点 xff0c 仅以此篇记录一下
  • springboot之jar包Linux后台启动部署及滚动日志查看且日志输出至文件保存(超级详细)

    作者 xff1a bug菌 博客 xff1a CSDN 掘金等 公众号 xff1a 猿圈奇妙屋 特别声明 xff1a 原创不易 xff0c 转载请附上原文出处链接和本文声明 xff0c 谢谢配合 版权声明 xff1a 文章里可能部分文字或者
  • SpringBoot之异步方法

    1 Future Future代表异步计算的结果 提供了检查计算是否完成 等待其完成以及检索计算结果的方法 只有在计算完成后 xff0c 才能使用方法get检索结果 xff0c 如有必要 xff0c 将其阻塞 xff0c 直到准备就绪 取消
  • 8大基本数据类型:

    整数 xff1a byte IO流 文件输入输出 文件上传下载 数据保存硬盘 short 基本没卵用 int 大部分的整数 年龄 工作年限 long 比int大 浮点型 xff08 小数 xff09 xff1a float 基本没卵用 do
  • SpringBoot之自动装配原理

    1 自动装配的使用 Spring Boot的核心理念是简化Spring应用的搭建和开发过程 xff0c 提出了约定大于配置和自动装配的思想 开发Spring项目通常要配置xml文件 xff0c 当项目变得复杂的时候 xff0c xml的配置
  • SpringBoot使用AOP记录接口操作日志

    前言 xff1a 我们项目中可能有这种需求 xff0c 每个人请求了哪些接口 xff1f 做了什么事情 xff1f 参数是什么 xff1f 重要的接口我们需要记录操作日志以便查找 操作日志和系统日志不一样 xff0c 操作日志必须要做到简单
  • 修改Tomcat默认访问根目录

    Tomcat安装后 xff0c Tomcat的主目录是webapps root目录 在conf文件夹下面找到server xml 配置文件打开 在 中间添加一行 docBase即为默认访问的文件夹名称 Tomcat默认访问目录就是webap
  • 吐血整理 20 道 Spring Boot 面试题,我经常拿来面试别人

    面试了一些人 xff0c 简历上都说自己熟悉 Spring Boot 或者说正在学习 Spring Boot xff0c 一问他们时 xff0c 都只停留在简单的使用阶段 xff0c 很多东西都不清楚 xff0c 也让我对面试者大失所望 下
  • 大数据技术之hadoop——(四)历史服务器+常用脚本

    文章目录 前言 一 配置历史服务器 二 日志聚集 三 集群的停止与启动 四 常用脚本 五 常用端口号 前言 上一篇我们已经将hadoop完全分布式集群搭建完毕 xff0c 这一篇则作为完全分布式集群的补全操作 一 配置历史服务器 为了查看程
  • 富士康Java开发面试题目

    int leapyear int y 计算润年 if y 40 amp amp y 100 61 0 y 61 100 amp amp y 4000 return 1 else return 0 int day calculate int
  • 手把手教程SpringCloud gateway 结合nacos实现路由转发

    1 使用IDEA创建spring项目 xff0c JDK1 8 xff0c 无需添加依赖 2 添加spring cloud gateway和nacos lt dependencyManagement gt lt dependencies g
  • Dubbo服务降级

    dubbo降级服务 使用dubbo在进行服务调用时 xff0c 可能由于各种原因 xff08 服务器宕机 网络超时 并发数太高等 xff09 xff0c 调用中就会出现RpcException xff0c 调用失败 服务降级就是指在由于非业

随机推荐

  • JVM、JRE、JDK之间的联系与区别

    JVM JRE JDK之间的联系与区别 JVM xff08 Java Virtual Machine xff09 JVM xff08 Java虚拟机 xff09 是一个可执行Java字节码的虚拟机进程 用于解析编译后的字节码文件 JVM屏蔽
  • maven安装及配置

    maven安装及配置 xff08 详细版 xff09 1 下载 xff1a 可以从官方下载 xff0c 下载页面 xff1a http maven apache org download cgi 2 安装 xff1a maven压缩包解压到
  • 类加载的顺序

    1 父类静态对象和静态代码块 2 子类静态对象和静态代码块 3 父类非静态对象和非静态代码块 4 父类构造函数 5 子类 非静态对象和非静态代码块 6 子类构造函数
  • Java多线程之~~~~使用wait和notify实现生产者消费者模型

    在多线程开发中 xff0c 最经典的一个模型就是生产者消费者模型 xff0c 他们有一个缓冲区 xff0c 缓冲区有最大限制 xff0c 当缓冲区满 的时候 xff0c 生产者是不能将产品放入到缓冲区里面的 xff0c 当然 xff0c 当
  • 输入若干成绩(负数结束),计算平均值

    include lt stdio h gt define N 6 main float a N int i count 61 0 float sum 61 0 average for i 61 0 i lt N i 43 43 scanf
  • rabbitmq重启

    rabbitmqctl stop xff1a 停止rabbitmq rabbitmq server restart 重启rabbitmq
  • spring项目找不到Aspect注依赖注解

    昨天写一个项目的时候在使用Aspect时一直找不到依赖 xff0c alt 43 enter自动添加Maven依赖还是解决不了问题 上网找了资料才解决 xff0c 但是我现在忘了是参照哪个资料了 xff0c 不能写出参照网址 xff0c 实
  • 总结一下mybatis返回结果为空

    今天写mybatis的时候遇到了返回结果为空的现象 xff0c 找了半天 xff0c 决定记录一下 1 可能是字段的问题 数据库中的字段 xff1a user name xff0c user id java中的实体类 xff1a userN
  • 框架、组件漏洞系列4:Apache shiro漏洞汇总

    一 Apache Shiro 简介 1 什么是shiro Apache Shiro提供了认证 授权 加密和会话管理功能 xff0c 将复杂的问题隐藏起来 xff0c 提供清晰直观的API使开发者可以很轻松地开发自己的程序安全代码 并且在实现
  • 第一章 网络编程基础

    网络编程基础 1 网络编程基础概念 对于C C 43 43 编程人员来说 xff0c 网络编程的本质实际就是使用系统提供的网络编程接口 xff0c 完成应用程序的网络数据收发功能 2 网络编程核心概念 网络编程中一般我们会经常听到一些概念
  • 自定义SpringBoot的运行动画---美女

    nice
  • 解决The package java.awt is not accessible

    第一次写这个东东 xff0c 也不会有人看 xff0c 随缘记录点东西 最近开始学java xff0c 用了eclipse IDE xff0c 但是在用awt和swing包的时候报错 xff0c The package java awt i
  • 社区版Idea的Configuration中没有spring boot选项

    专业版Idea自带springinitialler xff0c 创建spring boot项目时也会自动识别为spring boot项目 但社区版没有这个功能 xff0c 但可以同在plugins中下载spring assistant代替s
  • 运行java -version出错 Error could not open `libamd64jvm.cfg

    运行javac正常 xff0c 运行运行java version出错 Error could not open 96 libamd64jvm cfg 解决办法 xff0c 找到这个目录 C Program Files x86 Common
  • 项目启动报错Redis health check failed:Unable to connect to localhost6379

    报错详情 分析解决 我项目里面并没有引redis的连接 xff0c 那么报错这个就很奇怪 xff0c 结合Redis health check failed这句 xff0c 猜测是哪个东西里面引入了redis xff0c 然后做了redis
  • 中文乱码问题

    解决HTML的表单中文乱码问题 step1 在html文件中 xff0c 添加 lt meta http equiv 61 content type content 61 text html charset 61 utf 8 gt 另外 x
  • IDEA mybatis XML文件格式化问题

    IDEA mybatis XML文件格式化问题 问题描述问题定位解决方案 问题描述 在Idea中 xff0c 对mybatis的xml文件进行格式化 xff0c 格式化的排版并不是我们想要的 xff0c 如下图 xff1a 问题定位 SQL
  • C#.NET视频C#网络编程 基础篇

    C NET视频 C 网络编程 基础篇 11 P2P应用编程下 C 网络编程 基础篇 9 同步TCP接收电子邮件 C 网络编程 基础篇 8 UDP网络会议 C 网络编程 基础篇 7 UDP组播 C 网络编程 基础篇 6 UDP广播 C 网络编
  • docker Got permission denied while trying to connect to the Docker daemon socket at unix

    为了让普通用户也能操作docker容器 xff0c 需要进行相应的配置 xff0c 否则报 Got permission denied while trying to connect to the Docker daemon socket
  • Dubbo+Zookeeper入门实例

    现在的公司接口调用是通过dubbo来实现的 xff0c 所以这两天就了解了一下dubbo是如何进行通信的 xff0c 写了一个最简单的例子 自上得来终觉浅 xff0c 绝知此事要躬行 前言 dubbo介绍 Dubbo是一个分布式服务框架 x