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 ...
随机推荐
- Android 简单记事本
写在前面 课程作业需要,于是忙活好几天抄了一个简单的记事本,使用已学内容包括Android UI布局,Activity的跳转,SQLite数据库. 开发环境:Android Studio 参考:htt ...
- curl提交请求时,如何把cookie带过去
curl请求有一个CURLOPT_COOKIE参数,把获取到的cookie内容,通过字符串组装,赋值给这个参数就可以了 例子: $defaults = array( CURLOPT_URL =&g ...
- 如何让写得html页面自动刷新
一:新建一个文件夹用vscode打开 二:终端输入npm init 然后一路回车会在文件夹中生成一个package.json文件 三:新建个html,在终端中输入cnpm install -g liv ...
- 5种网络IO模型
5种网络IO模型(有图,很清楚) 同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到 ...
- 利用window.name+iframe跨域获取接口数据
最近做了一个表单广告,需要从接口读取数据,做完发现谷歌火狐下正常,360兼容和IE浏览器无法获取数据,以下是鲜明的对比: 调试发现报错了: 然后开发把接口改成支持windowname,一开始 ...
- linux jdk 安装教程
一.下载 到 https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 下载jdk, 二 ...
- 为二级域名注册ssl证书,并强制使用https对http进行跳转
服务器上仍然使用nginx进行代理 1.为二级域名申请ssl证书,如blog.yourdomain.com,见前文. 2.在域名解析服务中,为二级域名添加解析记录 3.nginx默认读取/etc/ng ...
- day 08 文件操作
1.文件操作 1.文件操作 模特主妇护士老师.txt 1.文件路径:d:\ 模特主妇护士老师.txt 2.编码方式:utf-8 3.操作方式:只读,只写,追加,读写,写读 以什么编码方式储存的,就必须 ...
- Map、List、Set在Java中的各种遍历方法
一.Map的4种遍历 Map<String, String> map = new HashMap<String, String>(); map.put("姓名&quo ...
- react 入坑之罪
componentDidMount :生命周期在react下只调用一次, render:比它先执行 componentWillRecvieProps(newProps) :能取到父组件的值 rende ...