最简单的dubbo教程-快速入门《一》

目录(?)[+]

所需环境

zookeeper作为dubbo的注册中心,dubbo服务提供方和消费方都需要在zookeeper注册中心注册。
可参考:http://blog.csdn.net/jingyangv587/article/details/78901508
注意:启动后,请勿关闭!

开始搭建

1. 服务提供方和消费方都需要的包(这里我新建的maven工程为pom工程,将共同的项目依赖写到pom.xml中)

  • 总的项目结构为

  • pom.xml文件内容为

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.test</groupId><artifactId>dubbo-demo</artifactId><version>0.0.1-SNAPSHOT</version><packaging>pom</packaging><properties><motan.version>0.3.0</motan.version><!-- 在阿里巴巴内部广泛使用的GA版本为:2.4.9,强烈推荐此版本 --><dubbo.version>2.5.3</dubbo.version><dubbox.version>2.8.4</dubbox.version><spring.version>4.3.6.RELEASE</spring.version><java.version>1.7</java.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>com.alibaba</groupId><artifactId>dubbo</artifactId><version>2.5.3</version><exclusions><exclusion><groupId>org.springframework</groupId><artifactId>spring</artifactId></exclusion></exclusions></dependency><dependency><groupId>com.github.sgroschupf</groupId><artifactId>zkclient</artifactId><version>0.1</version></dependency><!-- spring相关 --><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-orm</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jms</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.aspectj</groupId><artifactId>aspectjrt</artifactId><version>1.6.11</version></dependency><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.6.11</version></dependency></dependencies><modules><module>demo-api</module><module>dubbo-consumer</module><module>dubbo-provider</module></modules>
</project>

2. 在demo-api中定义服务接口(注意服务提供方和消费方都需要依赖这个项目)

package com.test;public interface DemoService{  String sayHello(String name);
}

3. 服务提供方实现

  • 项目结构
  • 实现接口
package com.test;
import org.springframework.stereotype.Service;import com.test.DemoService;
@Service("demoService")
public class DemoServiceImpl implements DemoService{@Overridepublic String sayHello(String name) {// TODO Auto-generated method stubreturn name; }
}
  • 声明暴露服务:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://code.alibabatech.com/schema/dubbohttp://code.alibabatech.com/schema/dubbo/dubbo.xsd"><!-- 提供方应用信息,用于计算依赖关系 -->  <dubbo:application name="dubbo_provider"  />  <!-- 使用zookeeper注册中心暴露服务地址 -->  <dubbo:registry address="zookeeper://127.0.0.1:2181" />   <!-- 用dubbo协议在20880端口暴露服务 -->  <dubbo:protocol name="dubbo" port="20880" />  <!-- 声明需要暴露的服务接口 -->  <dubbo:service interface="com.test.DemoService" ref="demoService" />
</beans>
  • 在springmvc.xml中扫描service注解并将dubbo-provider.xml中的相关的dubbo配置引入进来
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:aop="http://www.springframework.org/schema/aop"xmlns:context="http://www.springframework.org/schema/context"xmlns:util="http://www.springframework.org/schema/util" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/aop   http://www.springframework.org/schema/aop/spring-aop-4.0.xsd   http://www.springframework.org/schema/beans   http://www.springframework.org/schema/beans/spring-beans-4.0.xsd   http://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-4.0.xsd   http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd"default-autowire="byName"><aop:aspectj-autoproxy /><context:component-scan base-package="com.test" /><import resource="classpath:dubbo-provider.xml" />
</beans>
  • 加载Spring配置,启动服务:
package com.test;import java.io.IOException;import org.springframework.context.support.ClassPathXmlApplicationContext;public class Test {public static void main(String[] args) throws Exception {ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:springmvc.xml");context.start();System.out.println("Dubbo provider start...");try {System.in.read();   // 按任意键退出} catch (IOException e) {e.printStackTrace();} }
}

4. 服务消费者实现

  • 项目结构
  • 在dubbo-consumer.xml中声明所所需要消费的服务
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"    xsi:schemaLocation="http://www.springframework.org/schema/beans    http://www.springframework.org/schema/beans/spring-beans.xsd    http://code.alibabatech.com/schema/dubbo    http://code.alibabatech.com/schema/dubbo/dubbo.xsd ">          <!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->    <dubbo:application name="dubbo_consumer" />       <!-- 使用multicast广播注册中心暴露发现服务地址 -->    <dubbo:registry  protocol="zookeeper" address="zookeeper://127.0.0.1:2181" />         <!-- 生成远程服务代理,可以和本地bean一样使用demoService -->    <dubbo:reference id="demoService" interface="com.test.DemoService" />
</beans>   
  • 在springmvc.xml中扫描service注解并将dubbo-consumer.xml中的相关的dubbo配置引入进来
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:aop="http://www.springframework.org/schema/aop"xmlns:context="http://www.springframework.org/schema/context"xmlns:util="http://www.springframework.org/schema/util" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/aop   http://www.springframework.org/schema/aop/spring-aop-4.0.xsd   http://www.springframework.org/schema/beans   http://www.springframework.org/schema/beans/spring-beans-4.0.xsd   http://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-4.0.xsd   http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd"default-autowire="byName"><aop:aspectj-autoproxy /><context:component-scan base-package="com.test" /><import resource="classpath:/dubbo-consumer.xml" />
</beans>
  • 加载Spring配置,调用服务:
package com.test;import java.io.IOException;import org.springframework.context.support.ClassPathXmlApplicationContext;public class Test {public static void main(String[] args) {ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] { "classpath:springmvc.xml" });context.start();DemoService demoService = (DemoService) context.getBean("demoService");System.out.println(demoService.sayHello("哈哈哈"));try {System.in.read();} catch (IOException e) {e.printStackTrace();}}
}
  • 如果出现以下结果则调用成功
  • 通过dubbo-admin管理后台可以看到服务的提供方与消费方
    具体搭建可参考博客:http://blog.csdn.net/jingyangv587/article/details/78904369
    提供方

    消费者

完整项目的git地址:https://gitee.com/jingyang3877/dubbo-demo.git

参考博客:https://www.cnblogs.com/Javame/p/3632473.html

最简单的dubbo教程-快速入门《一》相关推荐

  1. 最全最简单的dubbo教程

    前言 网上看dubbo相关文章,都是一堆复制粘贴的,有的甚至直接复制官网的变成自己的博客.无奈之下只有自己学习,顺便把学习的结果分享给大家.全部案例均使用最新的springboot的形式,传统mian ...

  2. 高性能RPC框架—----------------------Dubbo一站式快速入门

    https://blog.csdn.net/tangyang8941/article/details/88025412 一.Web应用架构的演变 ​    随着互联网的发展,网站应用的规模不断扩大,W ...

  3. Spring MVC 教程,快速入门,深入分析

    目录  转载自:http://elf8848.iteye.com/blog/875830 资源下载: Spring_MVC_教程_快速入门_深入分析V1.1.pdf 点击打开链接 SpringMVC核 ...

  4. struts2教程--快速入门

    Struts2框架介绍 1.三大框架 : 是企业主流 JavaEE开发的一套架构 Struts2 + Spring + Hibernate 2. 什么是框架?为什么要学框架 ? 框架 是 实现部分功能 ...

  5. jmeter压测_简单七步,快速入门 JMeter原生压测

    导入本地的 JMeter 原生脚本,即可快速发起一次压测. 前提条件 JMeter 脚本需要在本地调试成功. 请同时上传依赖的 CSV 或者 JAR 文件.CSV 文件的 File Name 只需要文 ...

  6. 简单七步,快速入门 JMeter原生压测

    导入本地的 JMeter 原生脚本,即可快速发起一次压测. 前提条件 JMeter 脚本需要在本地调试成功. 请同时上传依赖的 CSV 或者 JAR 文件.CSV 文件的 File Name 只需要文 ...

  7. Dubbo实战快速入门 (转)

    Dubbo是什么? Dubbo[]是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案. 其核心部分包含: 远程通讯: 提供对多种基于长连接的NIO框架抽象封 ...

  8. 工业机器人入门z50的含义_工业机器人基础教程——快速入门学习

    六轴.水平关节(SCARA).DELTA等不同类型的机器人入门基础教程,学完这些,您将成为一名优秀的机器人应用工程师! 到2020年,工业机器人密度达到每万名员工使用100台以上.我国工业机器人市场将 ...

  9. springmvc教程--快速入门教程

    springmvc教程系列: springmvc史上最好教程(3) springmvc史上最好教程(2) 一. SpringMVC架构 1.1. Spring web mvc介绍 Spring web ...

最新文章

  1. 11个优秀的Android开发开源项目
  2. 一个IT人的非典型职场十年 (2)
  3. idea搭建简单spring-boot项目
  4. ubuntu 下更新pip后发生 ImportError: cannot import name ‘main‘的问题解决
  5. java实现微信企业付款到银行卡_微信企业付款到银行卡实现方式 - 黎明互联-官方博客 - 黎明互联 - 区块链培训,PHP培训,IT培训,职业技能培训,追求极致!改变您的职业生涯!...
  6. python计算1到100的和-Python3基础 sum,range 计算1到100的和
  7. DFT泄露问题和DFT的频率轴表示方法(第三章离散傅里叶变换(3.8,3.13.4)学习笔记)
  8. Dubbo 源码分析 - SPI 机制
  9. 尝鲜RHEV 3.0——概念篇(附RHEV3.0下载)
  10. asp.net中验证码的实现
  11. 105款移动应用程序就此被清理下架!
  12. 业界分享 | 数据科学家工作融入及面试技巧
  13. Python连接mysql密码用密文_druid配置数据库连接使用密文密码
  14. 第五周-第13章节-Python3.5-内置模块详解之Hashlib、模块
  15. python中dir函数的作用_【Python】Python内置函数dir详解
  16. 最新WIFI分销大师小程序源码+带后端/亲测可用
  17. 大语言模型将如何影响软件开发?
  18. Python pip源
  19. Eclipse资源管理IResource,IWorkspace,IProject, IFolder,IPath
  20. SAR成像处理算法_CS算法_程序设计(Matlab)

热门文章

  1. 解决ChatGPT网络总是掉线问题
  2. 斯坦福cs224n-2021 assignment1-探索词向量—词共现矩阵—SVD(奇异值分解)
  3. css_使div中的文本自动换行
  4. 【01】花卉识别-基于tensorflow2.3实现
  5. 线性子空间和仿射子空间
  6. Qt编程中的信号和槽机制
  7. 欧洲共同语言参考标准英语c1,美国小学英语6级语言模块与欧洲共同语言参考标准CEFR...
  8. 索骥馆-DIY操作系统之《30天自制操作系统》扫描版[PDF]
  9. Redis介绍及其简单使用方法
  10. 去年写的代码大全笔记(其实是摘记)