dubbo 入门教程 基于zookeeper

从上午发布的安装zookeeper 遇到的第一个错误开始 一直在搞dubbo 中午吃了饭 睡了会觉 。中间错误一个又一个 慢慢的都解决了。小有成就,哈哈。算这个星期天没有白费吧。

学习的过程值得留恋。分享一下吧

只是之前听网友提过dubbo这个东西 一直都没有百度和使用过。前天答应老板 我们框架中留一个口出来 给dubbo 。今天天气热 就在宿舍研究吧。

首先是百度 知道是做什么的 后来就开始找教程 但是大家都知道 百度的教程 基本都是一个模板。看了大概有20篇 基本就换换字 代码 都是一样的。试了一下 不行 也不报错 也不知道在哪里入口。后来想想一定是不行 换一种方式吧 直接用main方法启动服务的方式。百度了一推 还是一样的模板 就是maven 但是哥没有使用过maven。在关键的时候还要研究一下maven 比较耗时间了。后来准备放弃的时候 聊会天,继续找有权威性的 找到dubbo的团队提供出来的。继续 发现spring的xml报错。后来浏览器访问啊 ping 啊 各种尝试 最后不行。再微博上看了dubbo发布的 在14年的时候 域名绑定就换成dubbo.io了 后来在这个网上看到了一个下载。是github 然后进去看看。 下载了2个demo。一个是基于http的,还有一个是基于ws也就是websevice的。看了一下 都是基于maven的。有点恼火了。刚刚开始百度的时候 第一步就是用zookeeper。最后官网给的例子不是zookeeper。继续看之前的例子,(总不能放弃吧)。还是没有结果。想想 先一步一步来吧。 于是新建了一个web项目 放入spring对应的包。找到dubbo的包 放了进来,然后找到zookeeper的包 放进来, 写一个接口 写一个实现类,配置文件就用的百度过来的,开始不明白,看了很多资料 自己也开始慢慢地理解过来了,于是在main里面启动服务,错误,说找不到类,好办了 我想一定是我的zookeeper的client没有加,但是我是服务器这边的 应该是不要的 想想  先加进去试试。服务器启动 再次报错。有看了一下包名 不是这个开放团队的client。再找 放进去 试试。还是对 少各种class 一个一个找 放进去。还不错 对了。服务启动  不抱错了,然后任何提示 启动成功的标志都没有 之后就学网上的人 在start 后面打印一句话。打印不出来,怎么回事呢。难道还是不对,百思不得其解。后来在想想 我是同时zookeeper注册的 我的zookeeper没有开。打开zookeeper。再次启动 对了。那叫一个兴奋。服务端就这样好了。

客户端就直接copy网上的代码,调用成功。 开始聊天 吹牛逼、。终于成功了。后来发现我的服务端和客户端都在一个项目上面的。然后在新建一个项目 放客户端。继续报错。 说找不到方法。找到对应的类下面的方法。是有的啊。难道是缓存。clear一下。还是不对。头晕了。准备放弃了。实在没有办法了。准备换http或者是ws的了。休息一下 喝杯水。想到了 难道是版本的问题。 找到上午发布文章的zookeeper下载的连接,下载了一个3.3.6的版本的zookeeper.jar放进去,好了。测试几次 真的是好了。哈哈

上面的话是写给我自己的 下面的教程是写给大家的。哈哈 有想法的可以评论 ;

第一步 在spring官网下载一个spring比较全的包。 我用的还是以前的3.2

第二步 新建一个web项目。将spring的包放在lib下面。

第三步 在dubbo.io官网的版本库下载dubbo的jar包。

第四步 在Apache的官网下载zookeeper的项目。 zookeeper的安装方法在上篇文章讲过了。拿出zookeeper根目录下面的zookeeper.jar就可以。

附加一些jar 工程下面有的 可以无视。slf4j-api-1.7.5.jar,slf4j-log4j12-1.7.5.jar,netty-3.7.0.Final.jar,jetty-util-6.1.26.jar,jetty-6.1.26.jar,commons-cli-1.2.jar 这些jar在zookeeper3.5的lib下面都有。直接拷贝就可以。

还有一个就是zkclient-0.1.0.jar 一定要下载I0Itec的,这个应该不是zk开发的。这个我也忘记在哪里下载的了。不好意思。要是需要的可以在下面评论 留个邮箱什么的。

下面新建一个接口:

package com.unj.dubbotest.provider;
public abstract interface DemoService {
 
 public abstract String build(String name) throws Exception;
 
}

新建一个实现类

package com.unj.dubbotest.provider.impl;
import com.unj.dubbotest.provider.DemoService;
public class DemoServiceImpl implements DemoService {
 public String build(String name) throws Exception {
  System.out.println("name is === " + name);
  return "你好 名称是 ------------- >>>> " + name;
 }
}

在src下面新建一个applicationContext.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
        ">
 <!-- 具体的实现bean -->
 <bean id="demoService"
  class="com.unj.dubbotest.provider.impl.DemoServiceImpl" />
 <!-- 提供方应用信息,用于计算依赖关系 -->
 <dubbo:application name="xixi_provider" />
 <!-- 使用multicast广播注册中心暴露服务地址 
  <dubbo:registry address="multicast://224.5.6.7:1234" />-->
 <!-- 使用zookeeper注册中心暴露服务地址 -->
 <dubbo:registry address="zookeeper://127.0.0.1:2181" />
 <!-- 用dubbo协议在20880端口暴露服务 -->
 <dubbo:protocol name="dubbo" port="20880" />
 <!-- 声明需要暴露的服务接口 -->
 <dubbo:service interface="com.unj.dubbotest.provider.DemoService"
  ref="demoService" />
</beans>

最后写一个启动服务的类 (用过cxf的都知道)

package com.unj.dubbotest.provider;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Provider {
 
    public static void main(String[] args) throws Exception {
     
     ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"applicationContext.xml"});
        context.start();
 
        System.out.println("新浪微博:疯狂的杨中仁.");
        
        System.in.read(); // 按任意键退出
    }
 
}

启动zookeeper。在执行启动服务的类 控制台打印了如下信息

log4j:WARN No appenders could be found for logger (org.springframework.core.env.StandardEnvironment).
log4j:WARN Please initialize the log4j system properly.
SLF4J: This version of SLF4J requires log4j version 1.2.12 or later. See also http://www.slf4j.org/codes.html#log4j_version
新浪微博:疯狂的杨中仁.

说明启动成功了。

下面在做客户端。同意 新建一个web项目 把服务端的jar全部拷贝到lib下面去。

新建一个接口 包名和服务端一样 这边接口 其实要在服务器那边拿过来的。

package com.unj.dubbotest.provider;
public abstract interface DemoService {
 
 public abstract String build(String name) throws Exception;
 
}

在src下面新建一个 applicationConsumer.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  
        ">
 <!-- consumer application name -->
 <dubbo:application name="consumer-of-helloworld-app" />
 <!-- registry address, used for consumer to discover services -->
 <dubbo:registry address="zookeeper://127.0.0.1:2181" />
 <dubbo:consumer timeout="5000" />
 <!-- which service to consume? -->
 <dubbo:reference id="demoService"
  interface="com.unj.dubbotest.provider.DemoService" />
</beans>

新建一个main类来测试:

package com;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.unj.dubbotest.provider.DemoService;
public class Main {
 
 public static void main(String[] args) {
  
  
  ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
    new String[] { "applicationConsumer.xml" });
  context.start();
  DemoService demoService = (DemoService) context.getBean("demoService"); // get
  // service
  // invocation
  // proxy
  String hello = "";
  try {
   hello = demoService.build("新浪微博:疯狂的杨中仁");
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } // do invoke!
  System.out.println(Thread.currentThread().getName() + " " + hello);
 }
 
}

打印信息如下:

 log4j:WARN No appenders could be found for logger (org.springframework.core.env.StandardEnvironment).
log4j:WARN Please initialize the log4j system properly.
main 你好 名称是 ------------- >>>> 新浪微博:疯狂的杨中仁

在看一下服务器端打印的信息

这样就是dubbo 基于zookeeper。是客户端的 web还没有测试。 http,ws 也会在这几天写出来。

下文将介绍基于web容器的。

我想共享一些准备好的jar出来,但是没找到地方,看csdn 但是容量小。求方案。

时间: 2024-10-14 10:48:58

dubbo 入门教程 基于zookeeper的相关文章

MyBatis入门教程(基于Mybatis3.2)

MyBatis和Hibernate一样都是基于ORM的关系型数据库框架 ORM工具的基本思想: 1.从配置文件(通常是XML配置文件中)得到 sessionfactory. 2. 由sessionfactory 产生 session 3. 在session中完成对数据的增删改查和事务提交等. 4. 在用完之后关闭session. 5.在java对象和数据库之间有做mapping的配置文件,也通常是xml文件. MyBatis 是支持 普通 SQL 查询 , 存储过程 和 高级映射 的优秀持久框架

基于MAVEN使用IDEA创建dubbo入门项目图文教程

花了很长时间没有找到一个很详细的图文教程来学习dubbo入门框架,故记录下来. 一: 项目工程目录 简单介绍项目目录结构: 二: 创建父工程 具体操作步骤: 1,打开IDEA,按下面步骤来 File->New->Project 2, 3.等IDEA加载完成进行下一步 File -> New-> Moudle 4, 5,选择本地maven仓库 6,改名字 三: 创建dubbo-common 1,New -> File -> Moudle 2, 3, 4, 四: 创建dub

通过dubbo暴露接口调用方法,及基于zookeeper的dubbo涉及配置文件【转】

现在很流行的Dubbo很多朋友都听说过吧,最近我也在看这方面的东西,分享先我的心得笔记. 先说说我们团队要做的项目框架,很简单重在实现基于zookeeper的dubbo注册. 框架:springmvc+spring+zookeeper+dubbo 项目分三层,model存放数据,view页面展示.controller下面具体逻辑实现.通过dubbo消费方和供应方注册,供应方给消费方暴露接口,供消费方调用. 工程部署需要配置文件有: applicationContext-dubbo.xml {--

Android基础入门教程——3.2 基于回调的事件处理机制

Android基础入门教程--3.2 基于回调的事件处理机制 标签(空格分隔): Android基础入门教程 本节引言 在3.1中我们对Android中的一个事件处理机制--基于监听的事件处理机制进行了学习,简单的说就是 为我们的事件源(组件)添加一个监听器,然后当用户触发了事件后,交给监听器去处理,根据不同的事件 执行不同的操作;那么基于回调的事件处理机制又是什么样的原理呢?好吧,还有一个问题:你知道 什么是方法回调吗?知道吗?相信很多朋友都是了解,但又说不出来吧!好了,带着这些疑问我们 对a

基于DDD的现代ASP.NET开发框架--ABP系列之2、ABP入门教程

点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之2.ABP入门教程 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称. ASP.NET Boilerplate是一个用最佳实践和流行技术开发现代WEB应用程序的新起点,它旨在成为一个通用的WEB应用程序框架和项目模板. ABP的官方网站:http://www.aspnetboilerplate.com ABP在Github上的开源项目:https://gith

Android基础入门教程——3.1 基于监听的事件处理机制

Android基础入门教程--3.1.1 基于监听的事件处理机制 标签(空格分隔): Android基础入门教程 本节引言: 第二章我们学习的是Android的UI控件,我们可以利用这些控件构成一个精美的界面,但是仅仅是界面而已:下一步就要开始学习逻辑与业务实现了,本章节讲解的是Android的事件处理机制!何为事件处理机制?举个 简单的例子,比如点击一个按钮,我们向服务器发送登陆请求!当然,Android中的事件处理机制不止这一种, 比如屏幕发生选择,我们点击了屏幕上某个区域-简单点说,事件处

【教程】原创:历上最简单的游戏编程入门教程(基于cocos2d-js)

前言: 大家好.我是一个游戏开发者.曾就职于cocos2d-x这个手机游戏引擎的开发的公司. 在这边我准备了一个最简单的教程,想告诉大家制作一个游戏有多简单. 回忆起当年刚刚步入游戏这个行业,我也抱着非常多的疑问. 所以如果大家对游戏有兴趣的朋友,可以在下面留言. 这个教程我会讲的非常通俗易懂.争取几句话之内就让你看到一个效果. 另外教程里面有丰富的图文讲解.我保证你学完之后掌握了做游戏的真髓. 你完全可以马上开始做自己的游戏.并且能够让你的游戏在网页上,ios,android 还有pc平台上跑

【Zigbee技术入门教程-号外】基于Z-Stack协议栈的抢答系统

[Zigbee技术入门教程-号外]基于Z-Stack协议栈的抢答系统 广东职业技术学院  欧浩源 一.引言    2017年全国职业院校技能大赛"物联网技术应用"赛项中任务三题2的"抢答器开发"是一个非常优秀的题目.本人对题目进行了适当的改造和完善,剔除了和技能大赛中特别设备高度相关的内容,使其成为一个通用的Zigbee无线组网技术应用入门学习的综合实训案例.不管是自我学习,还是专业教学,甚至是在技能大赛训练中,这个题目都适合使用. 二.硬件资源需求    要进行本

Android基础入门教程——7.6.4 基于UDP协议的Socket通信

Android基础入门教程--7.6.4 基于UDP协议的Socket通信 标签(空格分隔): Android基础入门教程 本节引言: 本节给大家带来Socket的最后一节:基于UDP协议的Socket通信,在第一节中我们已经详细地 比较了两者的区别,TCP和UDP最大的区别在于是否需要客户端与服务端建立连接后才能进行 数据传输,如果你学了前两节TCP的,传输前先开服务端,accept,等客户端接入,然后获得 客户端socket然后进行IO操作,而UDP则不用,UDP以数据报作为数据的传输载体,