首页 > 代码库 > dubbo开发环境搭建与tomcat集成、DEMO示例(最完整版本、带管理控制台、监控中心、zookeeper)

dubbo开发环境搭建与tomcat集成、DEMO示例(最完整版本、带管理控制台、监控中心、zookeeper)

 以windows为例,linux基本相同,开发环境一般linux,个人环境一般windows(如果不开额外vm的话)。

示例以dubbo官方自带demo为例子,进行整合和稍加修改测试。

0、dubbox是dubbo的当当fork版本,特性上最主要是集成了REST。就核心功能而言,dubbo和大部分其他rpc框架比如spring cloud类似,由客户端、服务端、服务注册与发现中心、监控中心以及管理中心组成。如下:

技术分享

 

1、安装zookeeper,从https://zookeeper.apache.org/releases.html下载3.4.x最新稳定版,解压后,执行bin/zkServer.cmd启动zookeeper服务。如下:

技术分享

 

2、从dubbox git clone或者下载2.8.4版本,执行mvn install -Dmaven.test.skip=true生成各jar;

3、从http://git.oschina.net/handu/dubbo-monitor git clone,执行maven clean package创建监控war,并创建mysql表,并在application.properties设置登录用户名、密码。

4、下载并安装mysql。

5、maven编译生成dubbo管理控制台,技术分享,并在WEB-INF/dubbo.properties里面设置登录用户名、密码;

6、下载tomcat,将dubbo-admin.war,dubbo-monitor.war拷贝到tomcat webapps目录下,启动。如下:

技术分享

 技术分享

 

6、上述步骤执行完成后,dubbox的基础环境都完成了。剩下就是dubbox开发时集成的问题。

7、在现实中,大部分分布式系统的某个部件一般同时承担服务消费端和生产端的角色。很少仅仅承担客户端或者服务端的场景。所以他俩基本上是一起出现的。

 dubbo默认提供了5个容器(有基于spring xml的,spring annotation config的,也有支持http的jetty,log4j和logback是为了启动多进程时日志不会互串):

技术分享

默认是基于spring xml的容器。其启动类com.alibaba.dubbo.container.spring.SpringContainer.start()会自动加载classpath*:META-INF/spring/*.xml下的配置文件。所以,就不提供REST的应用而言,采用这种方式也是可以的。以前公司采用自行开发的rpc框架时,就是通过这种方式运行(采用java service wrapper封装),不使用web容器。

在我们现在工作中,除了需要暴露tcp服务外,还需要对外提供http服务,这意味着需要使用到servlet容器。而根据实际经验,jetty在稳定性上并不如tomcat,故我们需要考虑是使用内嵌的tomcat还是将dubbo服务嵌入standalone的tomcat容器。个人不喜欢在应用中内嵌容器,就像有了房子再选择装修,而不是定了装修再去选房一样。

8、使用外部tomcat(官方叫servlet派发请求,其实就是采用spring dispatchservlet作为前端控制器,也是推荐的方式,不过默认的是嵌入的jetty,当当增强支持嵌入tomcat)。以dubbo自带的dubbo-demo\dubbo-demo-provider为例子,dubbo REST的开发可参考http://dangdangdotcom.github.io/dubbox/rest.html,跟正常的REST服务开发一样,只不过采用的是jboss resteasy而非spring mvc,两者的差别可参考http://www.cnblogs.com/zhjh256/p/6883417.html,同时加dubbo相关的注解一起加上去。实际上dubbo-demo-provider自带了外部容器的配置,只是默认采用内置的,如下:

    <!-- use embed tomcat server
    <dubbo:protocol name="rest" port="8888" threads="500" contextpath="services" server="tomcat" accepts="500"
                    extension="com.alibaba.dubbo.demo.extension.TraceInterceptor,
                    com.alibaba.dubbo.demo.extension.TraceFilter,
                    com.alibaba.dubbo.demo.extension.ClientTraceFilter,
                    com.alibaba.dubbo.demo.extension.DynamicTraceBinding,
                    com.alibaba.dubbo.demo.extension.CustomExceptionMapper,
                    com.alibaba.dubbo.rpc.protocol.rest.support.LoggingFilter"/>
     -->
    <!-- use the external tomcat or other server with the servlet approach; the port and contextpath must be exactly the same as those in external server -->
    <dubbo:protocol name="rest" port="8888" contextpath="services" server="servlet"/>
    
    <!-- disable other protocol
    <dubbo:protocol name="http" port="8889"/>
    <dubbo:protocol name="hessian" port="8890"/>
    <dubbo:protocol name="webservice" port="8892"/>
    -->

使用外部tomcat容器有一个要求:

  • 协议的端口<dubbo:protocol port="8080" />必须与servlet容器的端口相同,
  • 协议的上下文路径<dubbo:protocol contextpath="foo" />必须与servlet应用的上下文路径相同。

对于上述配置,对应的web.xml配置如下:

    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>com.alibaba.dubbo.remoting.http.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/services/*</url-pattern>
    </servlet-mapping>
这个DispatcherServlet和spring mvc的dispatcherservlet,也是继承于HttpServlet,只不过在职责上相对于spring mvc轻量很多,比如并不需要提供mvc的特性。

eclipse中启动tomcat:

技术分享

技术分享

 

9、REST访问。

技术分享

 

10、dubbo rpc客户端访问。

技术分享

所以,可以将demo-provider.xml作为一个样板进行修改或者合并到现有工程。

参考: 

dubbox官网:https://github.com/dangdangdotcom/dubbox

dubbo用户指南:http://dubbo.io/User+Guide-zh.htm

dubbox rest开发:http://dangdangdotcom.github.io/dubbox/rest.html

嵌入式tomcat 7.0,http://www.blogjava.net/wangxinsh55/archive/2016/07/18/431229.html

 

dubbo开发环境搭建与tomcat集成、DEMO示例(最完整版本、带管理控制台、监控中心、zookeeper)