设为首页 收藏本站
查看: 822|回复: 0

[经验分享] dubbo+zookeeper小例子

[复制链接]

尚未签到

发表于 2019-1-8 06:06:39 | 显示全部楼层 |阅读模式
  项目使用:SpringMVC+maven
  

  项目需要使用dubbo,所以自学了几天,仅提供给新手,请根据文档查看…该项目仅是测试项目,并不完善,只实现了需要使用的基本功能,并且只提供
了使用dubbo模块的代码。写该博客一是希望能够帮助刚学习的新人,二是加深自己的印象,如果忘了也可以再看看,有些片段是从其他博客学习来的,如有问
题希望能提出来,由衷的感谢。
zookeeper
  zookeeper相当于注册中心客户端,Dubbo未对Zookeeper服务器端做任何侵入修改,只需安装原生的Zookeeper服务器即
可,所有注册中心逻辑适配都在调用Zookeeper客户端时完成,也就是说zookeeper安装完后并不需要额外的修改,就可以实现基本功能。
  

  zookeeper的安装:
  
  以下zookeeper的安装都是在Linux下操作,需要在你的Linux中下载好tomcat,当然也需要配置好你的java环境变量。
  因为链接经常找不到,所以大家还是在官网http://www.apache.org/dyn/closer.cgi/zookeeper/自己下载,或者在csdn中也有免费的可以下载。
  下载先解压,并且需要先修改conf文件下的一个文件名称
tar zxvf zookeeper-***.tar.gz
cd zookeeper-***
cp conf/zoo_sample.cfg conf/zoo.cfg123  
  zookeeper的配置:
  
  然后可以根据自己的需求修改zookeeper的配置,就是刚修改的zoo.cfg文件
vi conf/zoo.cfg1tickTime=2000   # Zookeeper服务器心跳时间,单位毫秒
initLimit=10    # 投票选举新leader的初始化时间。
syncLimit=5 # Leader与Follower之间的最大响应时间单位,响应超过syncLimit*tickTime,Leader认为Follwer死掉,从服务器列表中删除
FollwerdataDir=/home/dubbo/zookeeper-3.3.3/data    # 数据持久化路径
clientPort=2181 # 连接端口12345  当然Zookeeper也支持集群,我暂时没有用,所以还没有测试,在这里就不介绍,如有需要可以自己看其他的博客学习。
  

  zookeeper服务的启动和停止:
  
  进入自己解压的zookeeper文件夹内:
启动
./bin/zkServer.sh start1  启动显示
JMX enabled by default
Using config: /home/zjm/Downloads/zookeeper-3.4.6/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED123  表示启动成功
  停止
./bin/zkServer.sh stop1zookeeper管理控制台安装
  管理控制台为内部裁剪版本,开源部分主要包含:路由规则,动态配置,服务降级,访问控制,权重调整,负载均衡,等管理功能。
  

  安装
  
  首先进入自己安装的tomcat目录,删除webapps/ROOT
rm -rf webapps/ROOT1  下载dubbo-admin解压到tomcat的webapps/ROOT
unzip dubbo-admin-2.4.1.war -d webapps/ROOT1  

  配置
  
  可以根据自己需求配置,也可以不修改(楼主没有修改)
vi webapps/ROOT/WEB-INF/dubbo.properties1dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.admin.root.password=root
dubbo.admin.guest.password=guest1234  启动tomcat
./bin/startup.sh1  显示以下信息,表示启动成功

  访问控制台 (用户:root,密码:root 或 用户:guest,密码:guest)
  http://127.0.0.1:8080/

  如果显示该页面表示安装成功,zookeeper就可以结束了,不需要其他的操作和配置。
  如果需要在其他地方下访问注意关闭Linux的防火墙
dubbo
  提供者

  •   pom.xml


    com.alibaba
    dubbo
    2.5.3


    org.apache.zookeeper
    zookeeper
    3.4.6


    com.github.sgroschupf
    zkclient
    0.1


  •   applicationContext.xml


   
   
   
   
   
   
   
   
   
   
   
  如果你的applicationContext.xml没有配置dubbo.xsd可能会报以下错误
Multiple annotations found at this line:
    - cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element 'dubbo:application'.
    - schema_reference.4: Failed to read schema document 'http://code.alibabatech.com/schema/dubbo/dubbo.xsd', because 1) could not
     find the document; 2) the document could not be read; 3) the root element of the document is not .1234  解决办法(我使用的是eclipse):
  windows->preferrence->xml->xmlcatalog  
点击Add

  Location中写的是你自己的dubbo.xsd路径;Key是:http://code.alibabatech.com/schema/dubbo/dubbo.xsd。
  dubbo.xsd你可以找到maven自动下载的dubbo-*.jar,右键压缩文件打开后,META-INF中有一个dubbo.xsd,解压出来到你自己的路径(注意不要放在eclipse的工程中)。

  •   首先自己写了个测试用的实体类,用于测试跨项目调用Bean(注意需要序列化)
package com.usercenter.service.impl.test;
import java.io.Serializable;
public class UserInfo implements Serializable {
    /**
     *
     */
    private static final long serialVersionUID = 1L;
    private Integer id;
    private String name;
    private String password;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
}

  •   测试用的service接口(对应applicationContext.xml中暴露的service接口)
package com.usercenter.service.test;
import java.util.List;
import com.usercenter.service.impl.test.UserInfo;
public interface DemoService {
    String sayHello(String name);
    public List getUsers();
}  测试用的service接口实现类(对应applicationContext.xml中暴露的service具体实现接口)
package com.usercenter.service.impl.test;
import java.util.ArrayList;
import java.util.List;
import com.usercenter.service.test.DemoService;
public class DemoServiceImpl implements DemoService {
    public String sayHello(String name) {
        return "Hello " + name;
    }
    public List getUsers() {
        List list = new ArrayList();
        UserInfo user = new UserInfo();
        user.setId(1);
        user.setName("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~zjm~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
        user.setPassword("000000");
        list.add(user);
        return list;
    }
}

  •   启动“提供者”的类
package com.usercenter.service.impl.test;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Provider {
    public static void main(String[] args) {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
            new String[] { "test/applicationContext.xml" });
        context.start();
        // 为保证服务一直开着,一直循环等待
        synchronized (Provider.class) {
            while (true) {
                try {
                    Provider.class.wait();
                } catch (Throwable e) {
                    System.out.println("服务异常:" + e.toString());
                    context.close();
                }
            }
        }
    }
}  最后需要把该项目打包成jar,放到“消费者”的项目中(maven直接打包成jar并上传到你的本地仓库或私服仓库就好了,每次修改只需要重新deploy就好了)
  

  消费者
  

  •   pom.xml


    renai.usercenter
    renai-usercenter-service
    1.0


    com.alibaba
    dubbo
    2.5.3


    org.apache.zookeeper
    zookeeper
    3.4.6


    com.github.sgroschupf
    zkclient
    0.1


  •   applicationContext.xml


   
   
   
   
   
   


  •   测试用的远程调用类(消费者)
package com.renai.card.manage.consumer;
import java.util.List;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.usercenter.service.impl.test.UserInfo;
import com.usercenter.service.test.DemoService;
public class Consumer {
    public static void main(String[] args) {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
        new String[] { "spring/renai-dubbo.xml" });
        context.start();
        DemoService demoService = (DemoService) context.getBean("demoService");
        String hello = demoService.sayHello("~~~~~~~~~~~~~炸酱面~~~~~~~~~~~~~");
        System.out.println(hello);
        List list = demoService.getUsers();
        System.out.println(list.get(0).getName());
    }
}  以上就完成了dubbo的基本功能
  如果想实现远程调用,首先需要启动提供者的Provider(我自己写的那个)类
  启动后在zookeeper管理控制台上可以看到有了一个“提供者”

  这样远程调用(运行我的“消费者”)就可以看到一下结果

  





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-660466-1-1.html 上篇帖子: 深入了解ZooKeeper基本原理 下篇帖子: Zookeeper简介(一)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表