更多文章和资源欢迎访问:SuperCoder Blog



前言

Dubbo是阿里巴巴公司开源(已捐献给Apache)的高性能、轻量级的Java RPC框架。致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。

官网:Dubbo中文官网


一、Dubbo架构

二、安装zookeeper

下载地址:https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/

上传到服务器

# mac 终端上传,可以使用其他工具
scp /Users/chaishuai/Downloads/apache-zookeeper-3.6.3-bin.tar.gz root@192.168.10.111:/usr/local/

解压并重命名

# 解压
tar -zxvf apache-zookeeper-3.6.3-bin.tar.gz
# 重命名
mv apache-zookeeper-3.6.3-bin zookeeper

修改配置文件

# 进入配置文件目录
cd /usr/local/zookeeper/conf/
# 因为zookeeper配置文件要叫zoo.cfg,所以复制一份zoo_sample.cfg
cp zoo_sample.cfg zoo.cfg
# 切换到zookeeper目录下,创建zookeeper数据目录
cd /usr/local/zookeeper
mkdir data
# 修改zoo.cfg
vim zoo.cfg
# 修改dataDir=/tmp/zookeeper 为 /usr/local/zookeeper/data

启动zookeeper

# 进入bin目录
cd /usr/local/zookeeper/bin
# 启动zookeeper
./zkServer.sh start
# 查看状态
./zkServer.sh status
# 停止zookeeper
./zkServer.sh stop

注意:zookeeper启动默认会使用8080端口,如果启动后查看状态显示失败,检查8080端口是否被占用。如果被占用可根据实际情况修改。

三、代码实战

1. 创建服务提供方

创建maven web工程dubbo-provider,引入相关依赖

<?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>cn.com.supercoder</groupId><artifactId>dubbo-provider</artifactId><version>1.0-SNAPSHOT</version><packaging>war</packaging><name>dubbo-provider Maven Webapp</name><url>https://www.supercoder.com.cn</url><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target><dubbo.version>2.7.15</dubbo.version><zookeeper.version>3.4.6</zookeeper.version><spring.version>5.2.9.RELEASE</spring.version></properties><dependencies><!--引入实体类模块,因为实体类在多个服务中公用,所以抽取成一个单独的模块--><dependency><groupId>cn.com.supercoder</groupId><artifactId>dubbo-entity</artifactId><version>1.0-SNAPSHOT</version></dependency><!--引入服务接口模块,同样由于服务提供方和服务消费方都要用到,所有抽取--><dependency><groupId>cn.com.supercoder</groupId><artifactId>dubbo-interface</artifactId><version>1.0-SNAPSHOT</version></dependency><!--dubbo--><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo</artifactId><version>${dubbo.version}</version></dependency><!--zookeeper--><dependency><groupId>org.apache.zookeeper</groupId><artifactId>zookeeper</artifactId><version>${zookeeper.version}</version></dependency><dependency><groupId>org.apache.curator</groupId><artifactId>curator-recipes</artifactId><version>4.2.0</version></dependency><!--spring web--><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>${spring.version}</version></dependency></dependencies><build><finalName>dubbo-provider</finalName><pluginManagement><plugins><!--tomcat插件--><plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.1</version><configuration><port>9001</port><path>/</path></configuration></plugin></plugins></pluginManagement></build>
</project>

服务提供方要提供的方法

/*** @desc UserService实现类* @author supercoder*/
public class UserServiceImpl implements UserService {@Overridepublic List<User> getUserList() {// 此处模拟返回UserListArrayList<User> list = new ArrayList<>();User userA = new User();userA.setUuid(UUID.randomUUID().toString().replace("-",""));userA.setAge("V1.0.0");userA.setUsername("SuperCoderBlog");userA.setAddress("https://www.supercoder.com.cn");User userB = new User();userB.setUuid(UUID.randomUUID().toString().replace("-", ""));userB.setAge("V1.0.0");userB.setUsername("SuperCoderBbs");userB.setAddress("https://bbs.supercoder.com.cn");list.add(userA);list.add(userB);return list;}
}

创建Spring配置文件并配置要暴露的服务

<?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://dubbo.apache.org/schema/dubbo"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd"><!--服务提供方应用名称,用于计算依赖关系--><dubbo:application name="dubbo-provider"/><!--配置zookeeper注册中心地址--><dubbo:registry address="zookeeper://xxx.xxx.xxx.xxx:2181"/><!--用dubbo协议在20880端口暴露协议--><dubbo:protocol name="dubbo" port="20881"/><!--声明需要暴露的服务--><dubbo:service interface="cn.com.supercoder.service.UserService" ref="userService"/><!--注册本地bean--><bean id="userService" class="cn.com.supercoder.service.impl.UserServiceImpl"/></beans>

在web.xml中配置监听器加载Spring配置文件

<!DOCTYPE web-app PUBLIC"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN""http://java.sun.com/dtd/web-app_2_3.dtd" ><web-app><display-name>Archetype Created Web Application</display-name><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:provider.xml</param-value></context-param><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener>
</web-app>

2. 创建服务消费方

创建maven web工程dubbo-consumer,引入相关依赖

<?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>cn.com.supercoder</groupId><artifactId>dubbo-consumer</artifactId><version>1.0-SNAPSHOT</version><packaging>war</packaging><name>dubbo-consumer Maven Webapp</name><url>https://www.supercoder.com.cn</url><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target><dubbo.version>2.7.15</dubbo.version><zookeeper.version>3.4.6</zookeeper.version><spring.version>5.2.9.RELEASE</spring.version></properties><dependencies><!--引入实体类所在模块,因为实体类在多个服务中公用,所以抽取成一个单独的模块--><dependency><groupId>cn.com.supercoder</groupId><artifactId>dubbo-entity</artifactId><version>1.0-SNAPSHOT</version></dependency><!--引入服务接口模块,同样由于服务提供方和服务消费方都要用到,所有抽取--><dependency><groupId>cn.com.supercoder</groupId><artifactId>dubbo-interface</artifactId><version>1.0-SNAPSHOT</version></dependency><!--dubbo--><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo</artifactId><version>${dubbo.version}</version></dependency><!--zookeeper--><dependency><groupId>org.apache.zookeeper</groupId><artifactId>zookeeper</artifactId><version>${zookeeper.version}</version></dependency><dependency><groupId>org.apache.curator</groupId><artifactId>curator-recipes</artifactId><version>4.2.0</version></dependency><!--spring-webmvc--><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${spring.version}</version></dependency></dependencies><build><finalName>dubbo-consumer</finalName><pluginManagement><plugins><!--tomcat插件--><plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.1</version><configuration><port>7001</port><path>/</path></configuration></plugin></plugins></pluginManagement></build>
</project>

创建Service调用服务提供方提供的UserService服务

/*** @author supercoder*/
@Service
public class OrderServiceImpl implements OrderService {@Autowiredprivate UserService userService;@Overridepublic List<User> getUserList() {return userService.getUserList();}
}

创建Controller调用Service实现业务调用

/*** @author supercoder*/
@Controller
@RequestMapping("/order")
public class OrderController {@Autowiredprivate OrderService orderService;@RequestMapping("/getAll")@ResponseBodypublic List<User> getUserList(){List<User> userList = orderService.getUserList();return userList;}
}

创建Spring配置文件引用服务

<?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://dubbo.apache.org/schema/dubbo"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd"><!--服务消费方应用名称,用于计算依赖关系--><dubbo:application name="dubbo-consumer"/><!--配置zookeeper注册中心地址--><dubbo:registry address="zookeeper://123.56.85.35:2181"/><!--生成本地服务代理--><dubbo:reference id="userService" interface="cn.com.supercoder.service.UserService"/><!--开启注解扫描--><context:component-scan base-package="cn.com.supercoder.service"/></beans>

创建SpringMVC配置文件

<?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:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"><!--开启注解扫描--><context:component-scan base-package="cn.com.supercoder.controller"/><!--开启注解驱动--><mvc:annotation-driven/></beans>

在web.xml中配置加载Spring和SpringMVC配置文件

<!DOCTYPE web-app PUBLIC"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN""http://java.sun.com/dtd/web-app_2_3.dtd" ><web-app><display-name>Archetype Created Web Application</display-name><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:consumer.xml</param-value></context-param><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><servlet><servlet-name>dispatcherServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring-mvc.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>dispatcherServlet</servlet-name><url-pattern>/*</url-pattern></servlet-mapping>
</web-app>

四、服务调用

完成服务提供方和消费方的创建后,启动两个工程,测试调用。

注意事项

  1. zookeeper服务正常启动
  2. 因为服务调用结果需要序列化后通过网络传输,所以实体类必须实现Serializable接口
  3. 实体类模块和接口模块的代码比较简单,本文省略,需要自行创建

访问 http://localhost:7001/order/getAll 测试

测试结果:

至此,一个通过Spring配置文件方式实现的Dubbo RPC调用demo就完成了。

使用Dubbo实现简单的RPC调用(Spring配置文件版)相关推荐

  1. spring整合dubbo实现简单分布式接口调用

    随着微服务,分布式的概念越来越火,越来越多的互联网公司开始尝试使用分布式进行项目开发,分布式开发的好处毋庸置疑,分工明确,团队协作高效,安全,解耦分离等,其中以springcloud为代表的新分布式微 ...

  2. 项目通信之RPC调用——java简单实现

    微服务项目通信方法很多,有像springcloud解决方案的http通信,还有像阿里Dubbo的RPC通信,这里简单实现RPC调用.一共2个端,客户端server和客户端client.项目demo很简 ...

  3. 教你用 Netty 实现一个简单的 RPC!

    众所周知,dubbo 底层使用了 Netty 作为网络通讯框架,而 Netty 的高性能我们之前也分析过源码,对他也算还是比较了解了. 今天我们就自己用 Netty 实现一个简单的 RPC 框架. 1 ...

  4. 7.Spring Cloud Alibaba教程:整合Dubbo实现RPC调用

    概述 Apache Dubbo 是一款高性能的.基于Java的开源RPC框架,它提供了以下特性: 基于接口的远程方法调用 智能负载均衡 服务自动注册和发现 高可扩展性 运行期流量调度 可视化的服务治理 ...

  5. Dubbo实现RPC调用使用入门

    使用Dubbo进行远程调用实现服务交互,它支持多种协议,如Hessian.HTTP.RMI.Memcached.Redis.Thrift等等.由于Dubbo将这些协议的实现进行了封装了,无论是服务端( ...

  6. RabbitMQ (五)实现类似Dubbo的RPC调用

    springboot对rabbitMQ的接口做了封装,要实现 request/reponse 模式的调用,只需要调用 rabbitTemplate.convertSendAndReceive 方法即可 ...

  7. SpringCloud集成Dubbo实现RPC调用

    SpringCloud轻松集成Dubbo实现RPC调用 很久之前在做微服务架构选型的时候就听说阿里的微服务RPC框架dubbo,当时与Spring Cloud以http协议调用的架构做对比.发现dub ...

  8. SpringCloud Alibaba实战(12:引入Dubbo实现RPC调用)

    源码地址:https://gitee.com/fighter3/eshop-project.git 持续更新中-- 大家好,我是老三,断更了半年,我又滚回来继续写这个系列了,还有人看吗-- 在前面的章 ...

  9. Dubbo——远程(RPC)调用原理

    摘要 服务暴露和服务引入两个流程了,而这两个流程就是为了服务的调用,本博文将详细的介绍Dubbo的服务调用流程. PRC架构组件 一个基本的RPC架构里面应该至少包含以下4个组件: 客户端(Clien ...

最新文章

  1. js和html以及css的区别,html、css、js中的区别与关系
  2. java获取pdf的页数、内容和缩略图
  3. 基于web的甘特图,易度甘特图edogantt!
  4. 每日一笑 | 3 X 4 = ?
  5. 【原】Redis事务管理
  6. Oracle 存储方式大比拼
  7. 业界总结 | 如何改进双塔模型,才能更好的提升你的算法效果?
  8. 简单python爬虫——图片
  9. 数字货币期货生存指南
  10. 海贝音频384khz_海贝音乐app下载-海贝音乐手机版下载v3.3.0 - 星光下载
  11. 【笔记总结】高中生物——【选一 Ⅱ】第二章 微生物的培养与应用
  12. DZone每日必读-News:2022 年 Java 开发:预测和选定趋势
  13. 聊城大学计算机学院2016级11班,E·社会实践 | “观运河风采,忆聊城古韵”——2016级11班...
  14. Omniverse元宇宙开发框架
  15. java中文件加锁机制
  16. LabVIEW编更改研华数字板卡中DIO方向 例程与相关资料
  17. 电脑重启后鼠标和键盘不好使解决方案
  18. 滴滴公布自查进展:免去黄洁莉顺风车事业部总经理职务
  19. 深度学习入门 一句话告诉你什么是神经网络(CNN RNN DNN)
  20. 用互联网思维给DApp算个命

热门文章

  1. airsim 安装指导(无人机、无人车视觉导航仿真平台)
  2. 几个学习软件测试的网站
  3. iOS自动构建以及打包命令(xcodebuild,xcrun)
  4. 监管总局严打虚假检测报告
  5. Failure to find xxx in http://maven.aliyun.com/nexus/content/groups/public
  6. utf8 to utf16
  7. 然后上传到linux主机上,Xshell实现Windows上传文件到Linux主机
  8. 关于C++ non-aggregate cannot be initialized错误的解决
  9. RabbitMQ简介以及AMQP协议
  10. 第一章 初步认识数据透视表