dubbo入门学习笔记之入门demo(基于普通maven项目)
注:本笔记接dubbo入门学习笔记之环境准备继续记录;
(四)开发服务提供者和消费者并让他们在启动时分别向注册中心注册和订阅服务
需求:订单服务中初始化订单功能需要调用用户服务的获取用户信息的接口(订单服务与用户服务分别部署在不同的服务器)
思路:1、基于官网的dubbo服务化最佳实践,我们开发一个入门级demo可以先开发一个公共的接口层,然后服务提供者和服务消费者分别引用该接口的依赖
2、本例中我们需要新建一个公共接口层的maven项目pub-interfence,定义查询用户信息的接口和初始化订单的接口
3、新建服务提供者和消费者的项目分别引入pub-interfence依赖并实现对应接口
4、进行整合dubbo的相关配置,测试服务提供者和消费者是否成功向注册中心注册和订阅
(1)新建公共接口层的maven项目pub-interfence,定义查询用户信息的接口和初始化订单的接口,关键代码如下:
/**
* 订单服务相关接口
*/
public interface OrderService { /**
* 初始化订单
* @param userId
*/
List<User> initOrder(String userId); }
/**
* @author 董琳琳
* @date 2018/9/14 11:38
* @description 用户服务相关接口
*/
public interface UserService { /**
* 获取用户信息
* @param userId
* @return
*/
List<User> getUserList(String userId);
}
(2)新建服务提供者user-service-provider引入pub-interfence并向注册中心注册,关键代码如下:
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.darling.dubboDemo</groupId>
<artifactId>user-service-provider</artifactId>
<version>1.0-SNAPSHOT</version> <dependencies>
<!-- 引入公共接口层的依赖 -->
<dependency>
<groupId>com.darling.dubboDemo</groupId>
<artifactId>pub-interfence</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency> <!-- 引入dubbo -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.6.2</version>
</dependency>
<!-- 注册中心使用的是zookeeper,引入操作zookeeper的客户端端 -->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>2.12.0</version>
</dependency> </dependencies> </project>
UserServiceImpl:
/**
* @author 董琳琳
* @date 2018/9/28 10:24
* @description 用户服务的实现类 这里用来向订单服务提供相关服务
*/
public class UserServiceImpl implements UserService { /**
* 查询用户信息(这里为订单服务的初始化订单接口提供服务)
* @param userId
* @return
*/
@Override
public List<User> getUserAddressList(String userId) {
List<User> list = new ArrayList();
list.add(new User(3,"韦德","男",36,"迈阿密"));
list.add(new User(23,"詹姆斯","男",34,"洛杉矶"));
list.add(new User(24,"科比","男",39,"洛杉矶"));
return list;
}
}
在项目的resource目录下新建provider.xml整合dubbo:
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
xmlns="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd"> <!-- 当前服务的名称 -->
<dubbo:application name="user-service-provider"/> <!-- 注册中心的地址 这里注册中心用的是zookeeper -->
<dubbo:registry protocol="zookeeper" address="127.0.0.1:2181"/> <!-- 指定通信规则(通信协议?通信端口) -->
<dubbo:protocol name="dubbo" port="20883"></dubbo:protocol> <!-- 需要暴露的服务 -->
<dubbo:service interface="com.darling.pubIn.service.UserService" ref="userService" version="1.0.0"/> <!-- 需要暴露的服务的实现类 -->
<bean id="userService" class="com.darling.user.service.UserServiceImpl"/> <!-- 监控中心协议,如果为protocol="registry",表示从注册中心发现监控中心地址,否则直连监控中心 -->
<dubbo:monitor protocol="registry"></dubbo:monitor> <!--
timeout:超时时间配置
retries:重试次数配置(超时报错后重试连接的次数,不含第一次调用,如果目标服务有多个重试的时候会自动切换别的服务)
-->
<dubbo:provider timeout="2000" retries="6"></dubbo:provider>
</beans>
至此一个简单的服务提供者算是搭建完毕了,下面通过spring来加载 配置文件,测试是否成功向注册中心注册了,测试代码如下:
/**
* @author 董琳琳
* @date 2018/9/14 14:51
* @description 测试服务提供者(用户服务)向注册中心注册是否成功
*/
public class TestProviderDemo { public static void main(String[] args) throws IOException {
// 加载配置文件
ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("provider.xml");
// 容器启动
applicationContext.start();
// 使程序阻塞(由于是单元测试,如果程序跑完了我们再dubbo控制台看不到效果)
System.in.read();
}
}
如果一切顺利的话,打开dubbo-admin的首页点击服务治理==>应用将会看到:

(3)新建服务消费者order-service-consumer引入pub-interfence并向注册中心订阅服务,关键代码如下:
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.darling</groupId>
<artifactId>order-service-consumer</artifactId>
<version>1.0-SNAPSHOT</version> <dependencies>
<!-- 引入公共接口层的依赖 -->
<dependency>
<groupId>com.darling.dubboDemo</groupId>
<artifactId>pub-interfence</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!-- 引入dubbo -->
<!-- https://mvnrepository.com/artifact/com.alibaba/dubbo -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.6.2</version>
</dependency>
<!-- 注册中心使用的是zookeeper,引入操作zookeeper的客户端端 -->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>2.12.0</version>
</dependency>
</dependencies>
</project>
OrderServiceImpl:
/**
* @author 董琳琳
* @date 2018/9/14 11:50
* @description 订单服务的实现类
*/
@Service
public class OrderServiceImpl implements OrderService { @Autowired
UserService userService; /**
* 初始化订单并调用用户服务的接口
* @param userId
* @return
*/
@Override
public List<User> initOrder(String userId) {
return userService.getUserAddressList(userId);
}
}
在项目的resource目录下新建consumer.xml整合dubbo:
<?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://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd
http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<!-- 开启springmvc的包扫描 -->
<context:component-scan base-package="com.darling.order"></context:component-scan>
<!-- 当前服务的名称 -->
<dubbo:application name="order-service-consumer"/> <!-- 注册中心的地址 这里注册中心用的是zookeeper -->
<dubbo:registry protocol="zookeeper" address="127.0.0.1:2181"/> <!-- 声明需要调用的远程服务的接口;生成远程服务代理 -->
<dubbo:reference id="userService" check="false" interface="com.darling.pubIn.service.UserService" version="*"/> <!-- 监控中心协议,如果为protocol="registry",表示从注册中心发现监控中心地址,否则直连监控中心 -->
<dubbo:monitor protocol="registry"></dubbo:monitor>
</beans>
这样,一个简单的消费者也基本搭建完毕,接下来就是测试了,测试代码如下:
/**
* @author 董琳琳
* @date 2018/9/14 15:57
* @description 测试服务调用者是否成功从注册中心订阅服务
*/
public class TestConsumerDemo {
public static void main(String[] args) throws IOException {
ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("consumer.xml");
OrderService service = applicationContext.getBean(OrderService.class);
List<User> list = service.initOrder("1");
for (User user:list) {
System.out.println(user.toString());
}
System.in.read();
}
}
调用成功后控制台会打印UserServiceImpl中返回的用户信息,打开dubbo-admin首页点击服务治理==>应用,内容如下:

至此,一个简单的通过dubbo进行服务间的调用的demo就全部搭建并测试完毕了,需要注意的是此demo中为了方便并没有连接数据库,数据都是写死的,后续会继续记录如何使用dubbo官网上的一些常用配置以及如何整合dubbo和springboot;
dubbo入门学习笔记之入门demo(基于普通maven项目)的更多相关文章
- Spring入门学习笔记(2)——基于Java的配置
目录 基于Java的配置 @Configuration & @Bean Annotations Example 注入Bean依赖 @Import注解 Lifecycle Callbacks(声 ...
- 爬虫制作入门学习笔记2:[转]python爬虫实例项目大全
WechatSogou [1]- 微信公众号爬虫.基于搜狗微信搜索的微信公众号爬虫接口,可以扩展成基于搜狗搜索的爬虫,返回结果是列表,每一项均是公众号具体信息字典. DouBanSpider [2]- ...
- Dubbo -- 系统学习 笔记 -- 入门
Dubbo -- 系统学习 笔记 -- 目录 入门 背景 需求 架构 用法 入门 背景 随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行, ...
- dubbo入门学习笔记之环境准备
粗略的学完springcloud后由于公司的项目有用到一点dubbo,刚好手头上又有dubbo的学习资料,于是趁机相对系统的学了下duboo框架,今天开始记录下我的所学所悟;说来惭愧,今年之前,作为一 ...
- Three入门学习笔记整理
一.官方网站:https://threejs.org 二.关于Three.js 三.开始 四.实例 基本结构 结果 五.概念 坐标系 场景 相机 灯光 3D模型 六.简单动画 七.交互控制 结束 # ...
- Sass简单、快速上手_Sass快速入门学习笔记总结
Sass是世界上最成熟.稳定和强大的专业级css扩展语言 ,除了Sass是css的一种预处理器语言,类似的语言还有Less,Stylus等. 这篇文章关于Sass快速入门学习笔记. 资源网站大全 ht ...
- MongoDB学习笔记:快速入门
MongoDB学习笔记:快速入门 一.MongoDB 简介 MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统.在高负载的情况下,添加更多的节点,可以保证服务器性能.M ...
- Hadoop入门学习笔记---part4
紧接着<Hadoop入门学习笔记---part3>中的继续了解如何用java在程序中操作HDFS. 众所周知,对文件的操作无非是创建,查看,下载,删除.下面我们就开始应用java程序进行操 ...
- Hadoop入门学习笔记---part3
2015年元旦,好好学习,天天向上.良好的开端是成功的一半,任何学习都不能中断,只有坚持才会出结果.继续学习Hadoop.冰冻三尺,非一日之寒! 经过Hadoop的伪分布集群环境的搭建,基本对Hado ...
随机推荐
- leecode第二百三十八题(除自身以外数组的乘积)
class Solution { public: vector<int> productExceptSelf(vector<int>& nums) { int len= ...
- Ubuntu 16.04安装httpd
1.下载httpd源码(当前版本为2.4.37) http://httpd.apache.org/download.cgi 2.解压编译 tar -zxf httpd-2.4.37.tar.gzcd ...
- vue history模式
注意: 1.前端:config.js路径问题 2.后台:配置nginx
- C#_计算目前时间到指定的周X、指定的时间X 还有多少秒
比如:当前时间到下周二 05:00:00还剩下多少秒? /// <summary> /// 计算距离下一个 周XX XX时XX分XX秒,还剩下多少秒 /// </summary> ...
- 第 9 章 数据管理 - 074 - 如何安装和配置 Rex-Ray?
Rex-Ray 安装和配置方法 Rex-Ray 是一个优秀的 Docker volume driver 安装和配置方法 Rex-Ray 以 standalone 进程的方式运行在 Docker 主机上 ...
- Django 建立用户的视图(搜索 )
在web应用上,有两个关于搜索获得巨大成功的故事:Google和Yahoo,通过搜索,他们建立了几十亿美元的业务.几乎每个网站都有很大的比例访问量来自这两个搜索引擎.甚至,一个网站是否成功取决于其站内 ...
- 杂记:Django和static,Nginx配置路径,json_schema
前记:知识无处不在,要懂得珍惜,找到适合自己的方法高效地学习有价值的知识,不念过去,不畏将来. Django对待静态资源,在非前后端分离时的常识 Django会对项目app下的static文件夹的静态 ...
- oracle 将一个表复制到另外一个表里 .
复制一个表到另一个表.视图.临时表 博客分类: oracle Oracle数据结构软件测试SQL 创建一个表new_table和old_table表结构一样(没有old_table的记录) creat ...
- iOS启动速度优化
背景 7月26号我们阿里数据iOS端发布了4.4.0版本,这次版本主要是优化了性能,其中main()阶段的启动耗时优化成果比较明显,从之前的0.5-0.7秒,降低为目前的0.1-0.2秒(main() ...
- JavaScript(ES6)学习笔记-Set和Map与数组和对象的比较(二)
一.Map,Set,Array对比: 1.增 let map = new Map(); let set = new Set(); let array = []; map.set('t',1); //M ...