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 ...
随机推荐
- 换工作之后需要兼容ie8的我
以下是我ie8踩得坑,总结了一下,以免以后会遇到,虽然有的度娘也能搜到但是偶尔看看自己的文章也能学到很多(后续如有添加继续补上) 1,ie8 input框建议不要使用line-height去撑高度,在 ...
- 给web请求加遮罩动画
效果预览: css: /*#fountainG{ position:relative; margin:10% auto; width:240px; height:29px }*/ #fountainG ...
- wordpress-基础插件,常用函数
一,插件制作 1.首先在plugin文件夹下创建一个php文件,我以制作一个banner插件为例,把以下代码拷贝到php文件中 <?php add_action("init" ...
- 事务,mybatis
数据库事务:一件完整的事情, 要么全部成功,要么就全部失败 金典案例:转账 A给B转账:100 A:-100 B:+100 如何开启事务: Start transaction; 之前的转账操作(如果在 ...
- jquery表单提交获取数据(带toast dialog)
最近写了一个召集令,传统表单提交注册.写写遇到的费时间的点与解决办法 git项目地址:form-demo(针对于手机版,懒人可以直接使用,有排版和样式) demo使用Jquery,toast使用jqu ...
- 学习python的几种模块
最近在研究python写的拷屏系统,里面应用到了很多种模块,有文件操作的(shutil,os),多进程控制的(thread,threading),涉及时间的(time,datetime),数据库操作的 ...
- Mac OS X 操作系统下JDK安装与环境变量配置
1. 下载JDK. 去oracle官网的Java SE Downloads页面(如图 1),下载Mac os版本JDK(如图 2): 图 1 图 2 2. 安装JDK. 下载完成后,双击.dmg文 ...
- ubuntu 安装nginx, 出现 Unable to locate package
今天在初始化一台新的ubuntu 服务器时,敲上了 sudo apt-get install nginx 来安装nginx, 却发现提示: Reading package lists... Done ...
- 学习mysql,记录下常用的命令行语句
MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用 ...
- angular学习笔记(2)
1.angular可观察对象 2.angular绑定方式 3.angular模板 4.angular生命周期 5.angular组件通信