注:本笔记接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*/@Overridepublic 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.xsdhttp://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 {@AutowiredUserService userService;/*** 初始化订单并调用用户服务的接口* @param userId* @return*/@Overridepublic 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.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsdhttp://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsdhttp://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;

转载于:https://www.cnblogs.com/darling2047/p/9717678.html

dubbo入门学习笔记之入门demo(基于普通maven项目)相关推荐

  1. C#入门学习笔记(基于刘铁锰老师C#入门2014教学视频)【1】

    C#入门学习笔记(基于刘铁锰老师C#入门2014教学视频)[1] 前言: 本笔记作为记录我从零开始学习C#的记录,为了unity的兴趣爱好自学一门C#,也算是寒假为自己充个电,希望这个寒假可以坚持下去 ...

  2. C#入门学习笔记(基于刘铁锰老师C#入门2014教学视频)【2】

    C#入门学习笔记(基于刘铁锰老师C#入门2014教学视频)[2] 初识类和名称空间 前言: 本笔记作为记录我从零开始学习C#的记录,为了unity的兴趣爱好自学一门C#,也算是寒假为自己充个电,希望这 ...

  3. 【带着canvas去流浪(11)】Three.js入门学习笔记

    [摘要] three.js 入门学习笔记 示例代码托管在:http://www.github.com/dashnowords/blogs 一. 资料推荐及建议 1.官方文档 很详细,但是API部分单独 ...

  4. Qt 快速入门学习笔记

    Qt 快速入门学习笔记 环境安装 环境配置以及安装 安装包下载地址 1.windows安装 msvc编译器模块需要安装Windows软件开发工具包. MinGW是Windows平台使用GNU工具导入库 ...

  5. python数据分析入门学习笔记

    python数据分析入门学习笔记儿 学习利用python进行数据分析的笔记儿&下星期二内部交流会要讲的内容,一并分享给大家.博主粗心大意,有什么不对的地方欢迎指正~还有许多尚待完善的地方,待我 ...

  6. Javascript入门学习笔记

    JS入门学习笔记目录 1.JS简介 2.组成部分 3.特点 4.作用 5.JS三种添加方式 6.变量 7.数据类型 8.检测数据类型 9.逗号运算符 10.算术运算符 11.关系运算符 12.逻辑运算 ...

  7. Crypto++入门学习笔记(DES、AES、RSA、SHA-256)

    Crypto++入门学习笔记(DES.AES.RSA.SHA-256) 背景(只是个人感想,技术上不对后面的内容构成知识性障碍,可以skip): 最近,基于某些原因和需要,笔者需要去了解一下Crypt ...

  8. Java快速入门学习笔记8 | Java语言中的数组

    有人相爱,有人夜里开车看海,有人却连LeetCode第一题都解不出来!虽然之前系统地学习过java课程,但是到现在一年多没有碰过Java的代码,遇到LeetCode不知是喜是悲,思来想去,然后清空自己 ...

  9. 【计算机视觉】opencv入门学习笔记Part.1

    [计算机视觉]opencv入门学习笔记Part.1 1 前言 1.1 opencv概述(摘取自百度百科) 1.2 图像概念引入 1.3 安装opencv库 2 图像基本操作 2.1 图像的读取 2.2 ...

最新文章

  1. Tomcat中的线程池(APR和ThreadPool)
  2. 运动估计算法的程序实现_偷天换日,逼真的天空置换算法
  3. string 转 int_面试官:String长度有限制吗?是多少?还好我看过
  4. 删除电脑中的mysql数据库吗_【数据库】怎么彻底删除mysql服务?
  5. CentOS 6.6 nginx PHP 配置
  6. 玩转c语言——c语言小游戏 迷宫小游戏(附源码)
  7. 2022年CXO领导力峰会暨IT东方会技术高管年会
  8. 求球体的表面积和体积
  9. Django之验证码(十七)
  10. Max-Min 带宽公平分配算法
  11. Karma-Protractor 学习
  12. 如何提高学生习作水平
  13. 01 - 嵌入式的学习路线、职业规划:嵌入式基本知识与开发流程
  14. 常见的登录逻辑漏洞总结
  15. 开发规范-java代码注释及IDEA配置代码注释模板
  16. 订单30分钟未支付自动取消怎么实现?
  17. H3C 路由器的作用
  18. 2021-08-07 Gabor滤波器简介以及简单应用
  19. 思博伦Spirent TestCenter _使用iMIX功能配置混合帧长的流量模型 _双极未来
  20. Java游戏 斗地主

热门文章

  1. android sdk国内快速更新下载
  2. sharepoint 2010 beta Workflow
  3. 快速学习ggplot2
  4. python时间序列分析航空旅人_时间序列分析-ARIMA模型(python)
  5. python编程大赛队名_【推荐】程序员团队名称和口号word版本 (12页)
  6. python向文档中输入内容_python处理文档:把选择题的答案选项对应的内容填到选择题题目的括号里面输入的文本...
  7. 如何在电脑上创建python_python怎么创建类Python中的除法
  8. ig服务器维护,IG夺冠遭无视后,LOL官方公开道歉:对不起,都是服务器的问题!...
  9. 交叉线和直通线各自用于什么场合?为什么?_都是软电线,BVR与RV有什么不一样?...
  10. 高性能服务器编程代码清单9-3,JRockit JVM优化清单/调优指南