JAVA语言 零基础搭建DUBBO运行环境
小标 2018-07-24 来源 : 阅读 1245 评论 0

摘要:本文主要向大家介绍了JAVA语言 零基础搭建DUBBO运行环境,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助。

本文主要向大家介绍了JAVA语言 零基础搭建DUBBO运行环境,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助。

一:简介

      以前做项目时,分布式环境都是其它同事在搭建,自己也没参与分布式环境搭建,只负责开发,由于近段时间工作重心转到android,java后台有一段时间没有接触了,刚好这几天有空,决定自己动手亲自搭建一次spring+dubbo+zookeeper的运行环境,方便以后在工作中使用,如有描述错误的地方,请指正,谢谢。

     1 dubbo描述

   Dubbo是一个分布式服务框架,如果是一个小的erp系统,一台服务器足够支撑项目运行,项目就不会用Dubbo,如果是一个大的商城项目,用户访问量比较大,一台无法器根本无法支撑运行时,我们可以把订单模块,支付模块,静态页面等独立出来,放置在同一个局域网,不同服务器运行,这时我们就需要使用Dubbo, Dubbo原理图如下:

 

     

    节点角色说明:

Provider: 暴露服务的服务提供方,比如支付系统实现支付接口,供订单系统调用

Consumer: 调用远程服务的服务消费方,比如订单系统调用支付系统提供的服务进行付款操作。

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

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

        Container: 服务运行容器。

    各个角色之间的调用关系:

        1 服务容器负责启动,加载,运行服务提供者。2 服务提供者在启动时,向注册中心注册自己提供的服务。3 服务消费者在启动时,向注册中心订阅自己所需的服务。4注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。5 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。6 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心(此段描述来自网络)。

  2 zookeeper下载地址,//mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.3.6/   下载后直接解压即可

二:环境搭建

  1 测试环境

         我本地测试环境是 Window 7 64,Eclipse 4.4,jdk1.8,tomcat 8,zookeeper-3.3.6,apache-maven-3.5.0

        2 创建项目

         现在我们模拟一个商城环境,将支付模块和订单模块独立出来,在不同服务器上运行,然后相互之前调用,由于两个系统需要相互调用,即支付模块是服务提供者,又是消费者,订单模块也是服务提供者,又是消费者.

        创建父工程shopping,创建完成后,设置父工程的Packaging为pom

  

    创建子工程,shopping-api(用于定义公共接口,公共实体类等),shopping-order(订单模块,需要依赖shopping-api,实现订单的service接口),shopping-pay(订单模块,需要依赖shopping-api,实现支付的service接口).

 

 

  3:service的定义及实现

  所有接口定义在shopping-api中,订单接口定义如下:

 

//定义订单读接口package com.service.order;

import java.util.List;import com.bean.OrderBean;/**

 * 订单查询

 * */public interface OrderReadService {

    List<OrderBean> listQuery();

    OrderBean getOrder(long oId);

}

 

      支付接口定义如下:

 

package com.service.pay;

/**

 * 订单支付

 * */public interface PayService {

    String pay(long orderId);

}

 


订单接口需要在shopping-order项目中实现,代码如下:

 

package com.order.impl;

import java.util.List;import java.util.Random;import java.util.Vector;

import com.bean.OrderBean;import com.service.order.OrderReadService;

  /**

 * 订单查询实现类

 * */public class OrderReadServiceImpl implements OrderReadService {

 

    @Override

    public List<OrderBean> listQuery() {

        // TODO Auto-generated method stub

        List<OrderBean> list = new Vector<OrderBean>();

        for(int i=0;i<5;i++){

            OrderBean bean = new OrderBean();

            bean.setoId(i+10);

            bean.setoMoney(100+new Random().nextInt(50));

            bean.setoUserId(500+new Random().nextInt(50));

            list.add(bean);

        }

        return list;

    }

 

    @Override

    public OrderBean getOrder(long oId) {

        // TODO Auto-generated method stub

        OrderBean bean = new OrderBean();

        bean.setoId(oId);

        bean.setoMoney(100+new Random().nextInt(50));

        bean.setoUserId(500+new Random().nextInt(50));

        return bean;

    }

 

}

 

 支付接口需要在shopping-pay项目中实现,代码如下:

 

package com.pay.impl;

import com.service.pay.PayService;

 

public class PayServiceImpl implements PayService {

 

    @Override

    public String pay(long orderId) {

        // TODO Auto-generated method stub

        return orderId + "支付成功.";

    }

 

}

 

  4:项目之间的依赖关系

  由于shopping-api定义了完整的接口,shopping-order,shopping-pay实现了shopping-api项目下的接口,所以需要在shopping-order,shopping-pay项目中配置依赖关系,代码如下:

<dependency>

        <groupId>shopping-api</groupId>

        <artifactId>shopping-api</artifactId>

        <version>0.0.1-SNAPSHOT</version></dependency>

  5:配置Dubbo提供者和消费者的xml

  由于两个项目之前需要相互调用,所以两个项目都需要配置服务提供者,和消费者,代码如下:

  shopping-order订单项目的xml配置如下:

 

<!--定义了提供方应用信息,用于计算依赖关系;在 dubbo-admin 或 dubbo-monitor 会显示这个名字,方便辨识 --><dubbo:application name="shopping-order" owner="programmer" organization="dubbox" /><!--向 zookeeper 订阅 provider 的地址,由 zookeeper 定时推送 --><dubbo:registry address="zookeeper://localhost:2181" check="false"/><!-- 用dubbo协议在20880端口暴露服务 --><dubbo:protocol name="dubbo" port="20880" />

<!-- (配置订单服务提供者 )提供支付方的接口 --><dubbo:service ref="orderReadService" protocol="dubbo" interface="com.service.order.OrderReadService"></dubbo:service><bean id="orderReadService" class="com.order.impl.OrderReadServiceImpl"></bean><dubbo:service ref="orderWriterService" protocol="dubbo" interface="com.service.order.OrderWriterService"></dubbo:service><bean id="orderWriterService" class="com.order.impl.OrderWriterServiceImpl"></bean>

<!-- 配置消费者 --> <!--使用 dubbo 协议调用定义好的 api.PermissionService 接口 --><dubbo:reference id="payService" interface="com.service.pay.PayService" check="false"></dubbo:reference>

 

 

  shopping-pay支付项目的xml配置如下:

 

  <!--定义了提供方应用信息,用于计算依赖关系;在 dubbo-admin 或 dubbo-monitor 会显示这个名字,方便辨识 -->

    <dubbo:application name="shopping-pay" owner="programmer" organization="dubbox" />

    <!--向 zookeeper 订阅 provider 的地址,由 zookeeper 定时推送 -->

    <dubbo:registry address="zookeeper://localhost:2181"  check="false" />

    <!-- 用dubbo协议在20880端口暴露服务,由于订单设置的端口是20880,此处设置20881,不然tomcat启动后,会冲突报错 -->

    <dubbo:protocol name="dubbo" port="20881" />

    

    <!-- (配置支付服务提供者)提供给订单项目调用 -->

    <dubbo:service interface="com.service.pay.PayService"  ref="payService" protocol="dubbo"></dubbo:service>

    <bean id="payService" class="com.pay.impl.PayServiceImpl"></bean>

    

    

    <!-- (配置消费者) -->

    <dubbo:reference interface="com.service.order.OrderReadService" id="orderReadService"></dubbo:reference>

    <dubbo:reference interface="com.service.order.OrderWriterService" id="orderWriterService"></dubbo:reference>

 

 

三:创建tomcat运行环境

      我将不同的项目,放置在不同的tomcat下,创建过程:File-new-Other,弹出如下窗体

    

 

    

 

  添加完成,将项目导入tomcat,效果图如下

  shopping-pay将端口号设置为:8081,

  

   shopping-order将端口号设置为:8082

   

  

四:启动项目,调用接口测试

  启动tomcat前,需要先启动zookeeper,先进入之前解压的zookeeper/bin目录,运行zkServer.cmd,然后再启动tomcat,两个项目不分先后启动,但测试前,需要保证两个项目正常启动.

  直接在浏览器中输入如下地址测试,控制层的代码,没有贴出来,完整代码在文章最后有下载地址:

//127.0.0.1:8081/shopping-pay/pay/orderList.do?id=10

 

//127.0.0.1:8082/shopping-order/order/pay.do?id=123

五:注意事项

   因为两个项目,需要相互调用,所以配置服务端口暴露服务时,记得将两个端口设置为不一样,不然会出错,此处配置我也不是很熟悉,如配置不对,请指正,谢谢,配置如下:

<!-- 用dubbo协议在20880端口暴露服务 --><dubbo:protocol name="dubbo" port="20880" />

<!-- 用dubbo协议在20880端口暴露服务,由于订单设置的端口是20880,此处设置20881,不然tomcat启动后,会冲突报错 --><dubbo:protocol name="dubbo" port="20881" />

  另外还需要注意:向 zookeeper 订阅 provider 的地址,以及配置dubbo:service,需要把check设置为false,不然项目无法启动,

  

<dubbo:registry address="zookeeper://localhost:2181"  check="false" />

<dubbo:service interface="com.service.pay.PayService"  ref="payService" protocol="dubbo"></dubbo:service>

        由于两个项目依赖于,shopping-api,虽然在pom.xml中引入了对shopping-api的依赖,我本地tomcat启动时,仍然报错,找不到shopping-api下的公共类,所以我将shopping-api打包成jar包,放置在shopping-order和shopping-pay项目中。

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注编程语言JAVA频道!


本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程