Dubbo 入门教程与实战(一)上
目录
dubbo前言
dubbo学习网址
项目dubbo-demo实战篇
(实战一)dubbo-demo-api定义
(实战二)dubbo-demo-provider实现
(实战三)dubbo-demo-consumer实现
dubbo-demo资源下载
本篇实战总结
dubbo前言
Dubbo是高性能的,基于java的RPC框架,RPC框架之前的文章有讲过可以看一下。
dubbo学习网址
- 官网:http://dubbo.io/
- 中文网:http://dubbo.apache.org/zh-cn/
进不去请点击中文网,快速开发
项目dubbo-demo实战篇
1)先创建如图所示的项目结构【接口、服务提供者、消费者】
2)dubbo-demo/pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<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.imooc</groupId><artifactId>dubbo-demo</artifactId><packaging>pom</packaging><version>1.0-SNAPSHOT</version><modules><module>dubbo-demo-provider</module><module>dubbo-demo-api</module><module>dubbo-demo-consumer</module></modules><properties><maven.compiler.source>1.7</maven.compiler.source><maven.compiler.target>1.7</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><!-- spring版本号 --><spring.version>4.2.5.RELEASE</spring.version><!-- log4j日志包版本号 --><slf4j.version>1.7.18</slf4j.version><log4j.version>1.2.17</log4j.version></properties><dependencies><!-- 添加spring核心依赖 --><dependency><groupId>org.springframework</groupId><artifactId>spring-core</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-context</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId><version>${spring.version}</version></dependency><!-- spring 结束 --><!-- 添加日志相关jar包 --><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>${log4j.version}</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>${slf4j.version}</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>${slf4j.version}</version></dependency><!-- log end --><!-- zeekeeper注册中心 --><dependency><groupId>org.apache.zookeeper</groupId><artifactId>zookeeper</artifactId><version>3.4.9</version></dependency><dependency><groupId>com.101tec</groupId><artifactId>zkclient</artifactId><version>0.10</version></dependency><!-- dubbo --><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></dependencies>
</project>
(实战一)dubbo-demo-api定义
- 根据快速文档新增 dubbo-demo/dubbo-demo-api/src/main/java/org/apache/dubbo/demo/DemoService.java
package org.apache.dubbo.demo;/*** @Description : api* @Auth : Xuhy* @Date : 2019-02-04* @Time : 21:58*/ public interface DemoService {String sayHello(String name); }
- 修改 dubbo-demo/dubbo-demo-api/pom.xml 文件内容,如图所示
- 具体 pom.xml 如下
<?xml version="1.0" encoding="UTF-8"?> <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><artifactId>dubbo-demo-api</artifactId><groupId>com.imooc</groupId><version>1.0-SNAPSHOT</version> </project>
(实战二)dubbo-demo-provider实现
- Implement service provider
1)根据快速开发文档,创建服务实现类DemoServiceImpl
package org.apache.dubbo.demo.provider;import org.apache.dubbo.demo.DemoService;/*** @Description : 在服务提供方实现接口* @Auth : Xuhy* @Date : 2019-02-04* @Time : 22:14*/
public class DemoServiceImpl implements DemoService {@Overridepublic String sayHello(String name) {return "Hello " + name;}
}
- Configure service provider
1.1 配置篇 resource/dubbo-provider.xml(值得注意的是将快速开发的provider.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/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://code.alibabatech.com/schema/dubbohttp://code.alibabatech.com/schema/dubbo/dubbo.xsd"><!-- 提供方应用信息,用于计算依赖关系 --><dubbo:application name="hello-world-app"/><!--使用 zookeeper 注册中心暴露服务,注意要先开启 zookeeper--><dubbo:registry address="zookeeper://localhost:2181"/><!-- 使用multicast广播注册中心暴露服务地址 --><!--<dubbo:registry address="multicast://224.5.6.7:1234"/>--><!-- 用dubbo协议在20880端口暴露服务 --><dubbo:protocol name="dubbo" port="20880"/><!-- 声明需要暴露的服务接口 --><dubbo:service interface="org.apache.dubbo.demo.DemoService" ref="demoService"/><!-- 和本地bean一样实现服务 --><bean id="demoService" class="org.apache.dubbo.demo.provider.DemoServiceImpl"/>
</beans>
1.2 配置篇 新增log4j(resource/log4j.xml)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false"><appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender"><layout class="org.apache.log4j.PatternLayout"><param name="ConversionPattern" value="[%d{dd/MM/yy hh:mm:ss:sss z}] %t %5p %c{2}: %m%n" /></layout></appender><root><level value="INFO" /><appender-ref ref="CONSOLE" /></root>
</log4j:configuration>
- Start service provider(准备一个启动类)
3.1)导入对应pom文件,支持ClassPathXmlApplicationContext.class,如果是这个class报错 再导入
<!-- 导入pom文件jar -->
<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
<dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>4.3.14.RELEASE</version>
</dependency>
3.2)编写启动类MainProvider
package org.apache.dubbo.demo.provider;import org.springframework.context.support.ClassPathXmlApplicationContext;/*** @Description : Start service provider* @Auth : Xuhy* @Date : 2019-02-04* @Time : 22:23*/
public class MainProvider {public static void main(String[] args) throws Exception {ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("dubbo-provider.xml");context.start();System.err.print("启动成功!"); // 按任意键退出System.in.read(); // 按任意键退出}
}
3)启动篇
3.1 如果使用Intellij Idea 广播模式:请加上-Djava.net.preferIPv4Stack=true,也可以利用zookeeper启动
zookeeper3.4.10下载地址:https://mirrors.cnnic.cn/apache/zookeeper/zookeeper-3.4.10/(解压到本地,并进入其conf目录,重命名zoo_sample.cfg为zoo.cfg即可,其余无需改动。windows启动方式:zookeeper-3.4.10/bin下的zkServer)
3.2 run MainProvider.java
(实战三)dubbo-demo-consumer实现
Consumer.java
package com.alibaba.dubbo.consumer;import org.apache.dubbo.demo.DemoService; import org.springframework.context.support.ClassPathXmlApplicationContext;/*** @Description : 加载Spring配置,并调用远程服务* @Auth : Xuhy* @Date : 2019-02-06* @Time : 17:37*/ public class Consumer {public static void main(String[] args) throws Exception {ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("consumer.xml");context.start();System.err.println("consumer start");DemoService demoService = (DemoService)context.getBean("demoService"); // 获取远程服务代理String hello = demoService.sayHello("world"); // 执行远程方法System.out.println( hello ); // 显示调用结果} }
配置篇 resource/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.xsdhttp://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"><!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 --><dubbo:application name="consumer-of-helloworld-app" /><!--向 zookeeper 订阅 provider 的地址,由 zookeeper 定时推送--><dubbo:registry address="zookeeper://localhost:2181"/><!-- 使用multicast广播注册中心暴露发现服务地址 --><!--<dubbo:registry address="multicast://224.5.6.7:1234" />--><!-- 生成远程服务代理,可以和本地bean一样使用demoService --><dubbo:reference id="demoService" interface="org.apache.dubbo.demo.DemoService" /> </beans>
配置篇 resource/log4j.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false"><appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender"><layout class="org.apache.log4j.PatternLayout"><param name="ConversionPattern" value="[%d{dd/MM/yy hh:mm:ss:sss z}] %t %5p %c{2}: %m%n" /></layout></appender><root><level value="INFO" /><appender-ref ref="CONSOLE" /></root> </log4j:configuration>
dubbo-demo资源下载
下载地址:正在审核中。。。。。
本篇实战总结
遇见问题:
1、加载不出来配置信息,我将provider和consumer的xml文件除了log4j都修改了;
2、启动偶而不成功问题,如果你用了zookeeper启动,都要用它来启动,不能一个广播一个zookeeper;
3、都用广告启动不成功问题,这个我也遇见了,provider用广播,consumer也用广播,启动不成功!不知道为啥,也配置了Vm option,没有用!
所以上面的案例全部修改为zookeeper启动
Dubbo 入门教程与实战(一)上相关推荐
- Systemd 入门教程:实战篇
Systemd 入门教程:实战篇 原文出处: 阮一峰(@ruanyf) http://blog.jobbole.com/98671/?utm_source=blog.jobbole.com& ...
- 2021最新HarmonyOS鸿蒙系统应用开发之基础入门教程到实战—持续更新(第三节:鸿蒙的技术特征)
第三节:鸿蒙的技术特征 每篇内容都有视频讲解,可直接点击观看+关注,持续更新中 2021最新HarmonyOS鸿蒙系统应用开发之基础入门教程到实战-持续更新(第二节:鸿蒙OS系统分布式操作) 硬件互助 ...
- 2021最新HarmonyOS鸿蒙系统应用开发之基础入门教程到实战—持续更新(第二节:鸿蒙OS系统分布式操作)
老罗带你了解鸿蒙,专注于移动端领域技术的研发和推广,助力鸿蒙在国内技术推广和普及. 每篇内容都有视频讲解,可直接点击观看+关注,持续更新中 2021最新HarmonyOS鸿蒙系统应用开发之基础入门教程 ...
- 超详细Redis入门教程——Redis命令(上)
前言 本文小新为大家带来 超详细Redis入门教程--Redis命令(上) 相关知识,具体内容包括Redis 基本命令,Key 操作命令,String 型 Value 操作命令,Hash 型 Valu ...
- Linux Capabilities 入门教程--进阶实战篇
该系列文章总共分为三篇: Linux Capabilities 入门教程:概念篇 Linux Capabilities 入门教程:基础实战篇 Linux Capabilities 入门教程:进阶实战篇 ...
- Linux Capabilities 入门教程--基础实战篇
该系列文章总共分为三篇: Linux Capabilities 入门教程:概念篇 Linux Capabilities 入门教程:基础实战篇 Linux Capabilities 入门教程:进阶实战篇 ...
- TensorFlow 中文资源精选,官方网站,安装教程,入门教程,实战项目,学习路径。
转载至:http://www.nanjixiong.com/thread-122211-1-1.html Awesome-TensorFlow-Chinese TensorFlow 中文资源全集,学习 ...
- 前端开发入门教程-HTML标签(上)
本文素材来源于黑马程序员pink老师的前端教学视频.在此基础上有部分改动. 博客文章: https://blog.manchan.top/post/introduction-to-front-end- ...
- Dubbo入门教程,谈谈为什么要用Dubbo?
Dubbo是一款高性能.轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现. Dubbo核心部分包含: 远程通讯:提供对多种基于 ...
最新文章
- 关于谷歌自动换行的奇异效果
- JS获取浏览器高度 并赋值给类
- 进军人工智能,数学基础很重要?
- laravel api_如何在现有的Laravel应用中获取即时GraphQL API
- jquery微博实例
- android apk 防止反编译技术加壳技术(转)
- 【C】VC6调试器的使用
- 第12期 《博观而约取,厚积而薄发》6月刊
- 如何给网页设置自己的字体
- 2022“杭电杯”中国大学生算法设计超级联赛(7) 2022杭电多校第七场
- 5e检索服务器信息,服务器检索 - 找服玩|Minecraft服务器列表
- 从不确定性中寻找“确定性”——一位交管从业者对行业发展趋势的思考
- [应用推荐]FreeMind自动生成系统盘的树状图(思维导图)
- 周易六十四卦——震为雷卦
- Fiddler抓取HTTPs流量
- 计算机毕业设计Java后勤管理系统(源码+系统+mysql数据库+lw文档)
- 是不正确的python语句_关于Python的if else语句,调用else不正确的问题
- JMeter学习(五)---察看结果树和聚合报告指标项详解
- 一名SM是怎么炼成的(之一锻炼领导力)
- Python:基本语法看这一篇就够了