windows下搭建dubbo+zookeeper环境与使用

windows下搭建dubbo+zookeeper环境与使用

【转摘】

之前在网上学到用linux搭建,便想着用windows试试。经过一番折腾终于弄了出来。故写这篇文章也是做一个总结,理一理我遇到的一些问题。

因为我之前的工程是用maven搭建的,所以这是基于整合ssm框架的maven工程。

那么首先应该谈一谈为什么要使用dubbo:

 

随着互联网的发展,或许网站的规模会越来越大,常规的垂直应用架构已无法应对,那么这个时候仅仅靠一台服务器是不够的。所以需要进行分布式架构。

那么这里,就有了问题,当服务器多了之后,它们之间是如何进行通讯,也就是调用和访问呢?这就要用到webservice技术了。而当你的系统足够大时,就会有许许多多的服务在通信,这时候就需要一个治理系统来保证有条不紊的演进。Dubbo是阿里开源的分布式服务框架,可以对服务统一治理,监控等等。

这是dubbo的架构图

img

节点角色说明:

  • Provider: 暴露服务的服务提供方。
  • Consumer: 调用远程服务的服务消费方。
  • Registry: 服务注册与发现的注册中心。
  • Monitor: 统计服务的调用次调和调用时间的监控中心。
  • Container: 服务运行容器。

正文

zookeeper的安装配置

Zookeeper作为Dubbo服务的注册中心,Zookeeper是hadoop的一个子项目,其发展历程无需赘述。Dubbo原先基于数据库的注册中心,没采用Zookeeper,Zookeeper一个分布式的服务框架,是树型的目录服务的数据存储,能做到集群管理数据,这里能很好的作为Dubbo服务的注册中心,Dubbo能与Zookeeper做到集群部署。官方也是推荐使用zookeeper。

首先下载zookeeper,我这里的版本是3.4.6。解压后进入zookeeper的conf文件夹修改zoo-simple.cfg 为 zoo.cfg

接着用编辑器打开zoo.cfg文件,做如下操作

img

接着就是启动zookeeper,进入bin文件夹 启动zkServer.cmd

img

这样,便是启动成功了,因为我的是在本机上部署的,所以ip地址是回环地址0,0,0,0。端口号则是之前默认设置的2181。注意 :这个窗口不要关闭!让注册中心服务一直运行。

生产者和消费者项目的运行

因为我的是maven工程,所以要添加依赖

  1.  
    <dependency>
  2.  
     
  3.  
    <groupId>com.alibaba</groupId>
  4.  
     
  5.  
    <artifactId>dubbo</artifactId>
  6.  
     
  7.  
    <version>2.5.3</version>
  8.  
     
  9.  
    </dependency>
  10.  
     
  11.  
    <dependency>
  12.  
     
  13.  
    <groupId>org.apache.zookeeper</groupId>
  14.  
     
  15.  
    <artifactId>zookeeper</artifactId>
  16.  
     
  17.  
    <version>3.4.6</version>
  18.  
     
  19.  
    </dependency>
  20.  
     
  21.  
    <dependency>
  22.  
     
  23.  
    <groupId>com.github.sgroschupf</groupId>
  24.  
     
  25.  
    <artifactId>zkclient</artifactId>
  26.  
     
  27.  
    <version>0.1</version>
  28.  
     
  29.  
    </dependency>

同时,在业务层做如下,这里给出我的例子,接口及实体类省略。

  1.  
    @Service
  2.  
     
  3.  
    public class ItemServiceImpl implements ItemService {
  4.  
     
  5.  
    @Autowired
  6.  
     
  7.  
    private TbItemMapper itemMapper;
  8.  
     
  9.  
    @Override
  10.  
     
  11.  
    public TbItem getItemById(long itemId) {
  12.  
     
  13.  
    TbItem item = itemMapper.selectByPrimaryKey(itemId);
  14.  
     
  15.  
    return item;
  16.  
     
  17.  
    }
  18.  
     
  19.  
    }

 

控制层

  1.  
    @Controller
  2.  
     
  3.  
    public class ItemController {
  4.  
     
  5.  
    @Autowired
  6.  
     
  7.  
    private ItemService itemService;
  8.  
     
  9.  
    @RequestMapping("/item/{itemId}")
  10.  
     
  11.  
    @ResponseBody
  12.  
     
  13.  
    public TbItem getItemById(@PathVariable Long itemId) {
  14.  
     
  15.  
    TbItem tbItem = itemService.getItemById(itemId);
  16.  
     
  17.  
    return tbItem;
  18.  
     
  19.  
    }
  20.  
     
  21.  

 

好了,写完这些,我们还要在配置文件中添加dubbo的配置。

首先,在业务层中作为生产者,需要在spring配置文件中添加如下

  1.  
    <!-- 发布dubbo服务 -->
  2.  
    <!-- 提供方应用信息,用于计算依赖关系 -->
  3.  
    <dubbo:application name="eshop-manager" />
  4.  
    <!-- 注册中心的地址 -->
  5.  
    <!--这里因为我的zookeeper注册在本机,所以ip地址是这个,大家根据自己的不同修改-->
  6.  
    <dubbo:registry protocol="zookeeper" address="127.0.0.1:2181" />
  7.  
    <!-- 用dubbo协议在20880端口暴露服务 -->
  8.  
    <dubbo:protocol name="dubbo" port="20880" />
  9.  
    <!-- 声明需要暴露的服务接口 -->
  10.  
    <dubbo:service interface="com.eshop.service.ItemService"
  11.  
    ref="itemServiceImpl" />

注意,scheme不要忘了引入

  1.  
    xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
  2.  
    http://code.alibabatech.com/schema/dubbo

另外,scheme文件要手动添加,在eclipse中点击Windows-->preference,在搜索框输入xml,点击XML Catalog,找到add添加,如下图

img

同时,作为消费者的控制层也要添加如下,scheme导入同上

  1.  
    <!-- 引用dubbo服务 -->
  2.  
    <dubbo:application name="eshop-manager-web" />
  3.  
    <dubbo:registry protocol="zookeeper" address="127.0.0.1:2181" />
  4.  
    <dubbo:reference interface="com.eshop.service.ItemService"
  5.  
    id="itemService" />

补充说明:

  • dubbo:registry 标签一些属性的说明:

    • register是否向此注册中心注册服务,如果设为false,将只订阅,不注册。
    • check注册中心不存在时,是否报错。
    • subscribe是否向此注册中心订阅服务,如果设为false,将只注册,不订阅。
    • timeout注册中心请求超时时间(毫秒)。
    • address可以Zookeeper集群配置,地址可以多个以逗号隔开等。
  • dubbo:service标签的一些属性说明:

    • interface服务接口的路径
    • ref引用对应的实现类的Bean的ID
    • registry向指定注册中心注册,在多个注册中心时使用,值为的id属性,多个注册中心ID用逗号分隔,如果不想将该服务注册到任何registry,可将值设为N/A
    • register 默认true ,该协议的服务是否注册到注册中心。

dubbo admin UI工具的安装

这个是dubbo的客户端监控中心。
我的版本是dubbo-admin-2.5.4.war,大家可以在网上下载到,解压后放到tomcat安装处的webapps

这里注意,如果监控中心与注册中心在同一台服务器上,可以不需要任何配置。
如果不在同一台,则需要修改解压文件后的WEB-INF下的dubbo.properties文件

这里的ip地址就需要修改了。

dubbo.registry.address=zookeeper://127.0.0.1:2181

配置好后,启动tomcat,在浏览器中输入http://localhost:8080/dubbo(这里的dubbo是我的dubbo admin的项目名字,可以更改。)登录时需要用户名root和密码root

就可以看到如下图片,有提供者和消费者注册的服务了。我们也可以对它们进行管理操作。

img


另外,这里谈一谈我在实践中遇到的问题,花费了不少的时间。

在运行的时候经常报错,无非是如下这里个问题,我做一个归纳:

  1. 读取配置文件问题,看一看web.xml有没有读入
  2. 注解导包是否正确,有没有缺少什么
  3. 别忘了pojo类实现序列化接口
  4. 防火墙或许对你来说是个问题。

总结

到此基本上就已经结束了,只是明白了dubbo最基本的使用,即应用之间的rpc调用,服务提供者和使用者。Dubbo还提供了其他很多高级特性,如路由规则、参数回调、服务分组、服务降级等等,而且很多特性在给出内置实现的基础上,还给出了扩展的接口,我们可以给出自定义的实现,非常方便而且强大。至于zookeeper,我这里也只是单机配置,还没有尝试集群配置。以后再慢慢深入研究。

 

 

posted @ 2019-05-23 15:53  主的羊  阅读(1364)  评论(0编辑  收藏  举报