注:本笔记接dubbo入门学习笔记之环境准备继续记录;

  (四)开发服务提供者和消费者并让他们在启动时分别向注册中心注册和订阅服务

  需求:订单服务中初始化订单功能需要调用用户服务的获取用户信息的接口(订单服务与用户服务分别部署在不同的服务器)

  思路:1、基于官网的dubbo服务化最佳实践,我们开发一个入门级demo可以先开发一个公共的接口层,然后服务提供者和服务消费者分别引用该接口的依赖

     2、本例中我们需要新建一个公共接口层的maven项目pub-interfence,定义查询用户信息的接口和初始化订单的接口

       3、新建服务提供者和消费者的项目分别引入pub-interfence依赖并实现对应接口

       4、进行整合dubbo的相关配置,测试服务提供者和消费者是否成功向注册中心注册和订阅

  (1)新建公共接口层的maven项目pub-interfence,定义查询用户信息的接口和初始化订单的接口,关键代码如下:

  1. /**
  2. * 订单服务相关接口
  3. */
  4. public interface OrderService {
  5.  
  6. /**
  7. * 初始化订单
  8. * @param userId
  9. */
  10. List<User> initOrder(String userId);
  11.  
  12. }
  1. /**
  2. * @author 董琳琳
  3. * @date 2018/9/14 11:38
  4. * @description 用户服务相关接口
  5. */
  6. public interface UserService {
  7.  
  8. /**
  9. * 获取用户信息
  10. * @param userId
  11. * @return
  12. */
  13. List<User> getUserList(String userId);
  14. }

  (2)新建服务提供者user-service-provider引入pub-interfence并向注册中心注册,关键代码如下:

  pom.xml:  

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <modelVersion>4.0.0</modelVersion>
  6.  
  7. <groupId>com.darling.dubboDemo</groupId>
  8. <artifactId>user-service-provider</artifactId>
  9. <version>1.0-SNAPSHOT</version>
  10.  
  11. <dependencies>
  12. <!-- 引入公共接口层的依赖 -->
  13. <dependency>
  14. <groupId>com.darling.dubboDemo</groupId>
  15. <artifactId>pub-interfence</artifactId>
  16. <version>1.0-SNAPSHOT</version>
  17. </dependency>
  18.  
  19. <!-- 引入dubbo -->
  20. <dependency>
  21. <groupId>com.alibaba</groupId>
  22. <artifactId>dubbo</artifactId>
  23. <version>2.6.2</version>
  24. </dependency>
  25. <!-- 注册中心使用的是zookeeper,引入操作zookeeper的客户端端 -->
  26. <dependency>
  27. <groupId>org.apache.curator</groupId>
  28. <artifactId>curator-framework</artifactId>
  29. <version>2.12.0</version>
  30. </dependency>
  31.  
  32. </dependencies>
  33.  
  34. </project>
  1.   UserServiceImpl
  1. /**
  2. * @author 董琳琳
  3. * @date 2018/9/28 10:24
  4. * @description 用户服务的实现类 这里用来向订单服务提供相关服务
  5. */
  6. public class UserServiceImpl implements UserService {
  7.  
  8. /**
  9. * 查询用户信息(这里为订单服务的初始化订单接口提供服务)
  10. * @param userId
  11. * @return
  12. */
  13. @Override
  14. public List<User> getUserAddressList(String userId) {
  15. List<User> list = new ArrayList();
  16. list.add(new User(3,"韦德","男",36,"迈阿密"));
  17. list.add(new User(23,"詹姆斯","男",34,"洛杉矶"));
  18. list.add(new User(24,"科比","男",39,"洛杉矶"));
  19. return list;
  20. }
  21. }

  在项目的resource目录下新建provider.xml整合dubbo:

  1. <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2. xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
  3. xmlns="http://www.springframework.org/schema/beans"
  4. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
  5. http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
  6.  
  7. <!-- 当前服务的名称 -->
  8. <dubbo:application name="user-service-provider"/>
  9.  
  10. <!-- 注册中心的地址 这里注册中心用的是zookeeper -->
  11. <dubbo:registry protocol="zookeeper" address="127.0.0.1:2181"/>
  12.  
  13. <!-- 指定通信规则(通信协议?通信端口) -->
  14. <dubbo:protocol name="dubbo" port="20883"></dubbo:protocol>
  15.  
  16. <!-- 需要暴露的服务 -->
  17. <dubbo:service interface="com.darling.pubIn.service.UserService" ref="userService" version="1.0.0"/>
  18.  
  19. <!-- 需要暴露的服务的实现类 -->
  20. <bean id="userService" class="com.darling.user.service.UserServiceImpl"/>
  21.  
  22. <!-- 监控中心协议,如果为protocol="registry",表示从注册中心发现监控中心地址,否则直连监控中心 -->
  23. <dubbo:monitor protocol="registry"></dubbo:monitor>
  24.  
  25. <!--
  26. timeout:超时时间配置
  27. retries:重试次数配置(超时报错后重试连接的次数,不含第一次调用,如果目标服务有多个重试的时候会自动切换别的服务)
  28. -->
  29. <dubbo:provider timeout="2000" retries="6"></dubbo:provider>
  30. </beans>

  至此一个简单的服务提供者算是搭建完毕了,下面通过spring来加载 配置文件,测试是否成功向注册中心注册了,测试代码如下:

  1. /**
  2. * @author 董琳琳
  3. * @date 2018/9/14 14:51
  4. * @description 测试服务提供者(用户服务)向注册中心注册是否成功
  5. */
  6. public class TestProviderDemo {
  7.  
  8. public static void main(String[] args) throws IOException {
  9. // 加载配置文件
  10. ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("provider.xml");
  11. // 容器启动
  12. applicationContext.start();
  13. // 使程序阻塞(由于是单元测试,如果程序跑完了我们再dubbo控制台看不到效果)
  14. System.in.read();
  15. }
  16. }

  如果一切顺利的话,打开dubbo-admin的首页点击服务治理==>应用将会看到:

  (3)新建服务消费者order-service-consumer引入pub-interfence并向注册中心订阅服务,关键代码如下:

  pom.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <modelVersion>4.0.0</modelVersion>
  6.  
  7. <groupId>com.darling</groupId>
  8. <artifactId>order-service-consumer</artifactId>
  9. <version>1.0-SNAPSHOT</version>
  10.  
  11. <dependencies>
  12. <!-- 引入公共接口层的依赖 -->
  13. <dependency>
  14. <groupId>com.darling.dubboDemo</groupId>
  15. <artifactId>pub-interfence</artifactId>
  16. <version>1.0-SNAPSHOT</version>
  17. </dependency>
  18. <!-- 引入dubbo -->
  19. <!-- https://mvnrepository.com/artifact/com.alibaba/dubbo -->
  20. <dependency>
  21. <groupId>com.alibaba</groupId>
  22. <artifactId>dubbo</artifactId>
  23. <version>2.6.2</version>
  24. </dependency>
  25. <!-- 注册中心使用的是zookeeper,引入操作zookeeper的客户端端 -->
  26. <dependency>
  27. <groupId>org.apache.curator</groupId>
  28. <artifactId>curator-framework</artifactId>
  29. <version>2.12.0</version>
  30. </dependency>
  31. </dependencies>
  32. </project>

  OrderServiceImpl:

  1. /**
  2. * @author 董琳琳
  3. * @date 2018/9/14 11:50
  4. * @description 订单服务的实现类
  5. */
  6. @Service
  7. public class OrderServiceImpl implements OrderService {
  8.  
  9. @Autowired
  10. UserService userService;
  11.  
  12. /**
  13. * 初始化订单并调用用户服务的接口
  14. * @param userId
  15. * @return
  16. */
  17. @Override
  18. public List<User> initOrder(String userId) {
  19. return userService.getUserAddressList(userId);
  20. }
  21. }

   在项目的resource目录下新建consumer.xml整合dubbo:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
  5. xmlns:context="http://www.springframework.org/schema/context"
  6. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
  7. http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
  8. http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd
  9. http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
  10. <!-- 开启springmvc的包扫描 -->
  11. <context:component-scan base-package="com.darling.order"></context:component-scan>
  12. <!-- 当前服务的名称 -->
  13. <dubbo:application name="order-service-consumer"/>
  14.  
  15. <!-- 注册中心的地址 这里注册中心用的是zookeeper -->
  16. <dubbo:registry protocol="zookeeper" address="127.0.0.1:2181"/>
  17.  
  18. <!-- 声明需要调用的远程服务的接口;生成远程服务代理 -->
  19. <dubbo:reference id="userService" check="false" interface="com.darling.pubIn.service.UserService" version="*"/>
  20.  
  21. <!-- 监控中心协议,如果为protocol="registry",表示从注册中心发现监控中心地址,否则直连监控中心 -->
  22. <dubbo:monitor protocol="registry"></dubbo:monitor>
  23. </beans>

  这样,一个简单的消费者也基本搭建完毕,接下来就是测试了,测试代码如下:

  1. /**
  2. * @author 董琳琳
  3. * @date 2018/9/14 15:57
  4. * @description 测试服务调用者是否成功从注册中心订阅服务
  5. */
  6. public class TestConsumerDemo {
  7. public static void main(String[] args) throws IOException {
  8. ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("consumer.xml");
  9. OrderService service = applicationContext.getBean(OrderService.class);
  10. List<User> list = service.initOrder("1");
  11. for (User user:list) {
  12. System.out.println(user.toString());
  13. }
  14. System.in.read();
  15. }
  16. }

  调用成功后控制台会打印UserServiceImpl中返回的用户信息,打开dubbo-admin首页点击服务治理==>应用,内容如下:

  至此,一个简单的通过dubbo进行服务间的调用的demo就全部搭建并测试完毕了,需要注意的是此demo中为了方便并没有连接数据库,数据都是写死的,后续会继续记录如何使用dubbo官网上的一些常用配置以及如何整合dubbo和springboot;

dubbo入门学习笔记之入门demo(基于普通maven项目)的更多相关文章

  1. Spring入门学习笔记(2)——基于Java的配置

    目录 基于Java的配置 @Configuration & @Bean Annotations Example 注入Bean依赖 @Import注解 Lifecycle Callbacks(声 ...

  2. 爬虫制作入门学习笔记2:[转]python爬虫实例项目大全

    WechatSogou [1]- 微信公众号爬虫.基于搜狗微信搜索的微信公众号爬虫接口,可以扩展成基于搜狗搜索的爬虫,返回结果是列表,每一项均是公众号具体信息字典. DouBanSpider [2]- ...

  3. Dubbo -- 系统学习 笔记 -- 入门

    Dubbo -- 系统学习 笔记 -- 目录 入门 背景 需求 架构 用法 入门 背景 随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行, ...

  4. dubbo入门学习笔记之环境准备

    粗略的学完springcloud后由于公司的项目有用到一点dubbo,刚好手头上又有dubbo的学习资料,于是趁机相对系统的学了下duboo框架,今天开始记录下我的所学所悟;说来惭愧,今年之前,作为一 ...

  5. Three入门学习笔记整理

    一.官方网站:https://threejs.org 二.关于Three.js 三.开始 四.实例 基本结构 结果 五.概念 坐标系 场景 相机 灯光 3D模型 六.简单动画 七.交互控制 结束 # ...

  6. Sass简单、快速上手_Sass快速入门学习笔记总结

    Sass是世界上最成熟.稳定和强大的专业级css扩展语言 ,除了Sass是css的一种预处理器语言,类似的语言还有Less,Stylus等. 这篇文章关于Sass快速入门学习笔记. 资源网站大全 ht ...

  7. MongoDB学习笔记:快速入门

    MongoDB学习笔记:快速入门   一.MongoDB 简介 MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统.在高负载的情况下,添加更多的节点,可以保证服务器性能.M ...

  8. Hadoop入门学习笔记---part4

    紧接着<Hadoop入门学习笔记---part3>中的继续了解如何用java在程序中操作HDFS. 众所周知,对文件的操作无非是创建,查看,下载,删除.下面我们就开始应用java程序进行操 ...

  9. Hadoop入门学习笔记---part3

    2015年元旦,好好学习,天天向上.良好的开端是成功的一半,任何学习都不能中断,只有坚持才会出结果.继续学习Hadoop.冰冻三尺,非一日之寒! 经过Hadoop的伪分布集群环境的搭建,基本对Hado ...

随机推荐

  1. UVALive - 5857 Captain Q's Treasure

    UVALive - 5857 思路: 状压dp,用map写 代码: #pragma GCC optimize(2) #pragma GCC optimize(3) #pragma GCC optimi ...

  2. 第 9 章 数据管理 - 073 - 如何实现跨 Docker 主机存储?

    从业务数据的角度看,容器可以分为两类: 无状态(stateless)容器 无状态是指容器在运行过程中不需要保存数据,每次访问的结果不依赖上一次访问,比如提供静态页面的 web 服务器. 有状态(sta ...

  3. [Linux] 关闭防火墙以及开放端口

    一. service iptables stop 临时关闭, chkconfig iptables off完全关闭 service iptables status状态, service iptable ...

  4. 集合基本操作 Python DAY2

    集合本身具有两个特性 1.去重  2.关系测试 列表转集合的两种写法: list_1=[1,2,3,4,1,2,7,8,] list_1=set(list_1) #方法二 list_2=set([1, ...

  5. CF923E Perpetual Subtraction

    生成函数好题! 搬一手铃悬的题解(侵删) 现在只需要考虑怎么求出g和逆变换即可,其实也就是对函数F(x)求F(x+1)和F(x-1). 直接二项式定理展开发现是个卷积的形式,大力NTT即可. #inc ...

  6. dedecms织梦文章微信分享带缩略图与简介

    dedecms V5.7二次开发 php5.6 mysql5.1 问题:dedecms文章分享到微信,带缩略图与简介.如下图: 1.准备工作 PHP 5.3+ 并且 curl扩展已经开启 微信服务号一 ...

  7. 思科模拟器PacketTracer7--利用一台交换机将两台pc划分到不同vlan下

    实验2—3 实验内容:将同一交换机下的两台pc划分到不同vlan中 实验工具:思科模拟器PacketTracer7 使用设备:一台交换机,两台PC 实验步骤: 一.配置网络拓扑图 注:1.连线可选择闪 ...

  8. 关于微信小程序获取当前位置信息

    小程序开发---获取当前位置信息 一.获取用户地理位置信息 1.配置app.json文件 { "pages": ["pages/index/index"], & ...

  9. Analysis servlet

    @WebServlet("/cdiservlet") public class NewServlet extends HttpServlet { private Message m ...

  10. boost库中的 program_options

    1.阅读rviz中的源码时在rviz/visualizer_app.cpp中遇到如下代码: po::options_description options; options.add_options() ...