最简单的dubbo教程-快速入门《一》
最简单的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教程-快速入门《一》相关推荐
- 最全最简单的dubbo教程
前言 网上看dubbo相关文章,都是一堆复制粘贴的,有的甚至直接复制官网的变成自己的博客.无奈之下只有自己学习,顺便把学习的结果分享给大家.全部案例均使用最新的springboot的形式,传统mian ...
- 高性能RPC框架—----------------------Dubbo一站式快速入门
https://blog.csdn.net/tangyang8941/article/details/88025412 一.Web应用架构的演变 随着互联网的发展,网站应用的规模不断扩大,W ...
- Spring MVC 教程,快速入门,深入分析
目录 转载自:http://elf8848.iteye.com/blog/875830 资源下载: Spring_MVC_教程_快速入门_深入分析V1.1.pdf 点击打开链接 SpringMVC核 ...
- struts2教程--快速入门
Struts2框架介绍 1.三大框架 : 是企业主流 JavaEE开发的一套架构 Struts2 + Spring + Hibernate 2. 什么是框架?为什么要学框架 ? 框架 是 实现部分功能 ...
- jmeter压测_简单七步,快速入门 JMeter原生压测
导入本地的 JMeter 原生脚本,即可快速发起一次压测. 前提条件 JMeter 脚本需要在本地调试成功. 请同时上传依赖的 CSV 或者 JAR 文件.CSV 文件的 File Name 只需要文 ...
- 简单七步,快速入门 JMeter原生压测
导入本地的 JMeter 原生脚本,即可快速发起一次压测. 前提条件 JMeter 脚本需要在本地调试成功. 请同时上传依赖的 CSV 或者 JAR 文件.CSV 文件的 File Name 只需要文 ...
- Dubbo实战快速入门 (转)
Dubbo是什么? Dubbo[]是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案. 其核心部分包含: 远程通讯: 提供对多种基于长连接的NIO框架抽象封 ...
- 工业机器人入门z50的含义_工业机器人基础教程——快速入门学习
六轴.水平关节(SCARA).DELTA等不同类型的机器人入门基础教程,学完这些,您将成为一名优秀的机器人应用工程师! 到2020年,工业机器人密度达到每万名员工使用100台以上.我国工业机器人市场将 ...
- springmvc教程--快速入门教程
springmvc教程系列: springmvc史上最好教程(3) springmvc史上最好教程(2) 一. SpringMVC架构 1.1. Spring web mvc介绍 Spring web ...
最新文章
- 11个优秀的Android开发开源项目
- 一个IT人的非典型职场十年 (2)
- idea搭建简单spring-boot项目
- ubuntu 下更新pip后发生 ImportError: cannot import name ‘main‘的问题解决
- java实现微信企业付款到银行卡_微信企业付款到银行卡实现方式 - 黎明互联-官方博客 - 黎明互联 - 区块链培训,PHP培训,IT培训,职业技能培训,追求极致!改变您的职业生涯!...
- python计算1到100的和-Python3基础 sum,range 计算1到100的和
- DFT泄露问题和DFT的频率轴表示方法(第三章离散傅里叶变换(3.8,3.13.4)学习笔记)
- Dubbo 源码分析 - SPI 机制
- 尝鲜RHEV 3.0——概念篇(附RHEV3.0下载)
- asp.net中验证码的实现
- 105款移动应用程序就此被清理下架!
- 业界分享 | 数据科学家工作融入及面试技巧
- Python连接mysql密码用密文_druid配置数据库连接使用密文密码
- 第五周-第13章节-Python3.5-内置模块详解之Hashlib、模块
- python中dir函数的作用_【Python】Python内置函数dir详解
- 最新WIFI分销大师小程序源码+带后端/亲测可用
- 大语言模型将如何影响软件开发?
- Python pip源
- Eclipse资源管理IResource,IWorkspace,IProject, IFolder,IPath
- SAR成像处理算法_CS算法_程序设计(Matlab)
热门文章
- 解决ChatGPT网络总是掉线问题
- 斯坦福cs224n-2021 assignment1-探索词向量—词共现矩阵—SVD(奇异值分解)
- css_使div中的文本自动换行
- 【01】花卉识别-基于tensorflow2.3实现
- 线性子空间和仿射子空间
- Qt编程中的信号和槽机制
- 欧洲共同语言参考标准英语c1,美国小学英语6级语言模块与欧洲共同语言参考标准CEFR...
- 索骥馆-DIY操作系统之《30天自制操作系统》扫描版[PDF]
- Redis介绍及其简单使用方法
- 去年写的代码大全笔记(其实是摘记)