`
liujiekasini0312
  • 浏览: 147317 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Dubbo 入门实例 本地伪集群测试Demo

 
阅读更多

1.概述

Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案

Dubbo是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000+个服务提供3,000,000,000+次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点:

那么,Dubbo是什么?

Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。

其核心部分包含:

  • 远程通讯:提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。
  • 集群容错:提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。
  • 自动发现:基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器。

Dubbo能做什么?

  • 透明化的远程方法调用,就像调用本地方法一样调用远程方法,只需简单配置,没有任何API侵入。
  • 软负载均衡及容错机制,可在内网替代F5等硬件负载均衡器,降低成本,减少单点。
  • 服务自动注册与发现,不再需要写死服务提供方地址,注册中心基于接口名查询服务提供者的IP地址,并且能够平滑添加或删除服务提供者。

Dubbo采用全Spring配置方式,透明化接入应用,对应用没有任何API侵入,只需用Spring加载Dubbo的配置即可,Dubbo基于Spring的Schema扩展进行加载。


主要核心部件

Remoting: 网络通信框架,实现了sync-over-async 和 request-response 消息机制.

RPC: 一个远程过程调用的抽象,支持负载均衡、容灾和集群功能

Registry: 服务目录框架用于服务的注册和服务事件发布和订阅。

Dubbo采用全Spring配置方式,透明化接入应用,对应用没有任何API侵入,只需用Spring加载Dubbo的配置即可,Dubbo基于Spring的Schema扩展进行加载。

2.简单实例

实例源码:
http://download.csdn.net/detail/morning99/8077301

首先简历maven工程pom.xml引用 dubbo zkclient zookeeper 和 spring jar 包
  1. <projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/xsd/maven-4.0.0.xsd">
  3. <modelVersion>4.0.0</modelVersion>
  4. <groupId>com.mor.maven</groupId>
  5. <artifactId>dubboserver</artifactId>
  6. <version>0.0.1</version>
  7. <packaging>jar</packaging>
  8. <name>dubboserver</name>
  9. <url>http://maven.apache.org</url>
  10. <properties>
  11. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  12. <spring.version>3.1.4.RELEASE</spring.version>
  13. <slf4j.version>1.6.6</slf4j.version>
  14. </properties>
  15. <dependencies>
  16. <dependency>
  17. <groupId>junit</groupId>
  18. <artifactId>junit</artifactId>
  19. <version>3.8.1</version>
  20. <scope>test</scope>
  21. </dependency>
  22. <!--Spring-->
  23. <dependency>
  24. <groupId>org.springframework</groupId>
  25. <artifactId>spring-aop</artifactId>
  26. <version>${spring.version}</version>
  27. </dependency>
  28. <dependency>
  29. <groupId>org.springframework</groupId>
  30. <artifactId>spring-asm</artifactId>
  31. <version>${spring.version}</version>
  32. </dependency>
  33. <dependency>
  34. <groupId>org.springframework</groupId>
  35. <artifactId>spring-core</artifactId>
  36. <version>${spring.version}</version>
  37. </dependency>
  38. <dependency>
  39. <groupId>org.springframework</groupId>
  40. <artifactId>spring-beans</artifactId>
  41. <version>${spring.version}</version>
  42. </dependency>
  43. <dependency>
  44. <groupId>org.springframework</groupId>
  45. <artifactId>spring-context</artifactId>
  46. <version>${spring.version}</version>
  47. </dependency>
  48. <dependency>
  49. <groupId>org.springframework</groupId>
  50. <artifactId>spring-expression</artifactId>
  51. <version>${spring.version}</version>
  52. </dependency>
  53. <!--springend-->
  54. <!--log-->
  55. <dependency>
  56. <groupId>log4j</groupId>
  57. <artifactId>log4j</artifactId>
  58. <version>1.2.16</version>
  59. </dependency>
  60. <dependency>
  61. <groupId>org.slf4j</groupId>
  62. <artifactId>slf4j-api</artifactId>
  63. <version>${slf4j.version}</version>
  64. </dependency>
  65. <dependency>
  66. <groupId>org.slf4j</groupId>
  67. <artifactId>slf4j-log4j12</artifactId>
  68. <version>${slf4j.version}</version>
  69. </dependency>
  70. <!--dubbo-->
  71. <dependency>
  72. <groupId>com.alibaba</groupId>
  73. <artifactId>dubbo</artifactId>
  74. <version>2.5.3</version>
  75. </dependency>
  76. <!--zkclient-->
  77. <dependency>
  78. <groupId>com.github.sgroschupf</groupId>
  79. <artifactId>zkclient</artifactId>
  80. <version>0.1</version>
  81. </dependency>
  82. <!--zookeeper-->
  83. <dependency>
  84. <groupId>org.apache.zookeeper</groupId>
  85. <artifactId>zookeeper</artifactId>
  86. <version>3.3.6</version>
  87. </dependency>
  88. </dependencies>
  89. <build>
  90. <finalName>dubbo-demo</finalName>
  91. <plugins>
  92. <plugin>
  93. <groupId>org.apache.maven.plugins</groupId>
  94. <artifactId>maven-compiler-plugin</artifactId>
  95. <version>2.1</version>
  96. <configuration>
  97. <source>1.5</source>
  98. <target>1.5</target>
  99. <encoding>UTF-8</encoding>
  100. <failOnError>false</failOnError>
  101. </configuration>
  102. </plugin>
  103. </plugins>
  104. </build>
  105. </project>

因为要增加zookeeper的注册管理,所以如果有可用的zookeeper就用可用的zookeeper,没有可以按照如下的安装去本地安装一个。
http://blog.csdn.net/morning99/article/details/40426133
特别注意:zookeeper的服务端 和 本地调用 客户端的jar包版本最好要一致,否则会出现意想不到的惊喜。
本人使用的zookeeper 是3.3.6 版本

项目结构图
服务端


applicationProvider.xml
  1. <?xmlversion="1.0"encoding="UTF-8"?>
  2. <beansxmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
  5. xsi:schemaLocation="http://www.springframework.org/schema/beans
  6. http://www.springframework.org/schema/beans/spring-beans.xsd
  7. http://code.alibabatech.com/schema/dubbo
  8. http://code.alibabatech.com/schema/dubbo/dubbo.xsd
  9. ">
  10. <dubbo:applicationname="hello-world-app"/>
  11. <!--本机伪集群测试-->
  12. <dubbo:registryprotocol="zookeeper"address="192.9.145.19:2181,192.9.145.19:2182,192.9.145.19:2183"/>
  13. <dubbo:protocolname="dubbo"port="20880"/>
  14. <dubbo:serviceinterface="com.mor.server.dubbo.service.DemoServer"
  15. ref="demoService"/><!--和本地bean一样实现服务-->
  16. <beanid="demoService"class="com.mor.server.dubbo.service.DemoServerImpl"/>
  17. </beans>

客户端:


applicationConsumer.xml
  1. <?xmlversion="1.0"encoding="UTF-8"?>
  2. <beansxmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
  5. xsi:schemaLocation="http://www.springframework.org/schema/beans
  6. http://www.springframework.org/schema/beans/spring-beans.xsd
  7. http://code.alibabatech.com/schema/dubbo
  8. http://code.alibabatech.com/schema/dubbo/dubbo.xsd
  9. ">
  10. <!--消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样-->
  11. <dubbo:applicationname="consumer-of-helloworld-app"/>
  1. <spanstyle="white-space:pre"></span><!--使用本地伪集群注册中心暴露发现服务地址-->
  2. <dubbo:registryprotocol="zookeeper"address="192.9.145.19:2181,192.9.145.19:2182,192.9.145.19:2183"/><!--生成远程服务代理,可以和本地bean一样使用demoService-->
  3. <dubbo:referenceid="demoService"interface="com.mor.server.dubbo.service.DemoServer"/>
  4. </beans>
在客户端要引入服务端生成的jar包


服务端代码:
demodubboserver\src\main\java\com\mor\server\dubbo\service\DemoServer.java
  1. packagecom.mor.server.dubbo.service;
  2. publicinterfaceDemoServer{
  3. StringsayHello(Stringstr);
  4. }

demodubboserver\src\main\java\com\mor\server\dubbo\service\DemoServerImpl.java
  1. <spanstyle="font-family:CourierNew;">packagecom.mor.server.dubbo.service;
  2. importjava.util.Date;
  3. publicclassDemoServerImplimplementsDemoServer{
  4. publicStringsayHello(Stringstr){
  5. str="Hello"+str+"2:"+newDate();
  6. System.out.println("server:"+str);
  7. returnstr;
  8. }
  9. }</span><strongstyle="font-family:Arial;">
  10. </strong>

demodubboserver\src\main\java\com\mor\main\Main.java
  1. packagecom.mor.main;
  2. importjava.io.IOException;
  3. importorg.springframework.context.support.ClassPathXmlApplicationContext;
  4. publicclassMain{
  5. publicstaticvoidmain(String[]args)throwsIOException{
  6. ClassPathXmlApplicationContextcontext=newClassPathXmlApplicationContext(newString[]{"applicationProvider.xml"});
  7. context.start();
  8. System.out.println("按任意键退出");
  9. System.in.read();
  10. }
  11. }
log4j.properties
  1. log4j.appender.Stdout=org.apache.log4j.ConsoleAppender
  2. log4j.appender.Stdout.layout=org.apache.log4j.PatternLayout
  3. log4j.appender.Stdout.layout.conversionPattern=%-5p-%-26.26c{1}-%m\n
  4. log4j.rootLogger=INFO,Stdout
  5. log4j.logger.org.apache.wicket=INFO
  6. log4j.logger.org.apache.wicket.protocol.http.HttpSessionStore=INFO
  7. log4j.logger.org.apache.wicket.version=INFO
  8. log4j.logger.org.apache.wicket.RequestCycle=INFO

客户端代码:
  1. packagecom.mor.client.dubbo.action;
  2. importjava.util.Date;
  3. importorg.springframework.context.support.ClassPathXmlApplicationContext;
  4. importcom.mor.server.dubbo.service.DemoServer;
  5. publicclassChatAction{
  6. publicvoidSayHello(){
  7. ClassPathXmlApplicationContextcontext=newClassPathXmlApplicationContext(newString[]{"applicationConsumer.xml"});
  8. context.start();
  9. DemoServerdemoServer=(DemoServer)context.getBean("demoService");
  10. System.out.println("client:"+demoServer.sayHello("Morning"+"1:"+newDate())+"3:"+newDate());
  11. }
  12. }

dubboclient\src\main\java\com\mor\client\dubbo\main\Main.java
  1. packagecom.mor.client.dubbo.main;
  2. importcom.mor.client.dubbo.action.ChatAction;
  3. publicclassMain{
  4. publicstaticvoidmain(String[]args){
  5. ChatActionact=newChatAction();
  6. act.SayHello();
  7. }
  8. }

============启动顺序================
1.先启动 zookeeper 集群
2.在启动 服务端
3.最后 启动客户端调用服务

服务端打包

分享到:
评论

相关推荐

    dubbo入门教程+实例源码

    【Dubbo入门教程+实例源码】是一份针对初学者设计的教程,旨在帮助开发者快速理解和掌握Apache Dubbo这一高性能、轻量级的服务治理框架。Dubbo是阿里巴巴开源的一个分布式服务框架,它提供了服务注册与发现、负载...

    dubbo-demo(ZK集群).zip

    本示例"**dubbo-demo(ZK集群).zip**"提供了如何在实际项目中搭建和使用Dubbo与Zookeeper集群的实例。下面我们将深入探讨这两个组件的核心功能、它们的集成方式以及实际操作步骤。 **Dubbo** 是阿里巴巴开源的一款...

    dubbo+zookeeper集群demo(内含xml与java配置方式)

    总的来说,这个集群Demo旨在帮助开发者了解和实践Dubbo与Zookeeper的集成,为构建高可用的分布式系统奠定基础。通过实际操作,你可以更好地掌握服务注册、服务发现、服务调用等核心概念,进一步提升你在分布式架构...

    dubbo+zookeeper+spring -demo

    当服务消费者发起调用请求时,Dubbo会根据配置的负载均衡策略(如轮询、随机、最少活跃调用数等)选择一个服务实例进行调用。 5. **集群容错机制**: Dubbo支持多种容错机制,例如Fail-fast(快速失败)、Fail-...

    dubbo_demo实例

    本实例“dubbo_demo”是一个基于Dubbo框架的简单应用,旨在帮助学习者深入理解Dubbo的核心概念和工作原理。Dubbo是中国阿里巴巴公司开源的一款高性能、轻量级的服务治理框架,它主要应用于分布式系统中的服务调用、...

    dubbo实例代码

    【标题】"Dubbo实例代码"涉及的知识点主要围绕分布式服务框架Dubbo和Zookeeper注册中心展开。Dubbo是阿里巴巴开源的一款高性能、轻量级的Java RPC框架,它提供了服务治理、集群容错、负载均衡等功能,极大地提升了...

    dubbo-demo服务端

    【描述】中提到的"入门实例",意味着这个dubbo-demo项目是一个初学者友好的教程,旨在帮助开发者快速理解Dubbo服务端的基本操作。它通过集成Zookeeper作为服务注册与发现的中心节点,展示了Dubbo如何与分布式环境...

    dubbo demo

    【标题】"dubbo demo" 是一个展示阿里开源框架Dubbo使用的基本示例,它包含了服务提供者(provider)和消费者(consumer)的实现。这个项目旨在帮助开发者理解和学习如何在实际应用中部署和使用Dubbo。 【描述】中...

    springcloudalibaba微服务dubbo+sentinel+gateway+zookeeper+nacos的demo

    这个“springcloudalibaba微服务dubbo+sentinel+gateway+zookeeper+nacos的demo”压缩包文件,显然是一个实战示例,旨在帮助开发者理解并实践这些关键组件的集成与使用。下面将详细解析这些组件以及它们在微服务架构...

    dubbo+zookeeper实例

    【描述】提到的" dubbo+zookeeper+springmvc实例demo"是一个综合性的应用示例,它将Dubbo的远程调用能力、Zookeeper的服务发现和注册功能与Spring MVC的Web开发框架结合在一起。这个实例通常会展示如何在Spring MVC...

    dubbo-demo.zip

    2. **集群(Cluster)**:负责多个服务实例的负载均衡和容错处理,如Failover、Failfast、Failsafe、Fallback等策略。 3. **路由(Router)**:根据特定规则对请求进行路由,如基于IP、版本号等条件过滤。 4. **...

    Dubbo-demo

    【标题】"Dubbo-demo" 是一个基于IntelliJ IDEA开发的示例项目,它用于演示和学习如何使用Apache Dubbo这一高性能的Java RPC框架。这个项目被细分为三个主要部分,分别是`dubbo-api`, `dubbo-provider`, 和 `dubbo-...

    dubbo+zookeeper的Demo工程

    本Demo工程是针对初学者设计的一个实例,它展示了如何使用Apache Dubbo和Zookeeper进行服务的注册与发现,帮助我们理解这两个组件的协同工作原理。 Dubbo,由阿里巴巴开源,是一款高性能、轻量级的Java RPC框架,它...

    dubbo-demo微服务示例代码

    8. **集群(Cluster)**:集群层负责对多个服务提供者的实例进行管理,包括负载均衡、容错处理等。 9. **监控(Monitor)**:监控中心收集服务的调用统计信息,如调用次数、调用时间、异常信息等,帮助开发者分析...

    dubbo+zookeeper+SpringMVC Demo

    【标题】"dubbo+zookeeper+SpringMVC Demo"是一个示例项目,它演示了如何在实际应用中整合这三个关键组件:Dubbo、Zookeeper和SpringMVC。Dubbo是阿里巴巴开源的一个高性能、轻量级的服务框架,用于构建微服务架构;...

    Dubbo+Zookeeper+Spring的demo

    2. **接口级调用**:Dubbo支持基于接口的远程调用,使得服务调用就像调用本地方法一样简单。 3. **负载均衡**:Dubbo内置多种负载均衡策略,如随机、轮询、最少活跃调用数等,确保请求能均衡地分发到各个服务实例。 ...

    dubbo/zookeeper/springMVC demo

    由于是“zookeeper伪集群”,这意味着虽然ZooKeeper可能只运行在一个节点上,但其设计和配置是按照集群模式进行的,以模拟多节点环境下的行为。 再者,Spring MVC是Spring框架的一部分,主要用于构建Web应用。它...

    java-demo-dubbo

    【Java Dubbo初学者入门指南】 Java Dubbo是一款高性能、轻量级的开源Java RPC框架,由阿里巴巴开发并维护,它主要解决了企业服务治理的问题,包括服务注册、服务发现、负载均衡、容错机制等。这个"java-demo-dubbo...

Global site tag (gtag.js) - Google Analytics