注:本笔记接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项目)的更多相关文章

  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. mysql主从同步与读写分离

    为了解决数据库服务的高可用问题以及负载均衡问题, 1正常情况下可以互为主从,均衡分担数据流量, 2防止数据库服务器在宕机的情况下可以顺利切换到正常的数据库服务器,减少公司的客户流量损失故公司需要搭建数 ...

  2. Kotlin 类和对象

    类定义 Kotlin 类可以包含:构造函数和初始化代码块.函数.属性.内部类.对象声明. Kotlin 中使用关键字 class 声明类,后面紧跟类名: class Runoob { // 类名为 R ...

  3. git 执行pull错误如何撤销

    比如你当前所在的空间是trunk,但是执行了git pull origin branches,这时需要回滚回去,可以用一下步骤: 1.运行git reflog命令查看你的历史变更记录,如下: 69fd ...

  4. JAVA-类方法与实例方法

    1.实例方法:一个方法如果不加static关键字,那么这个方法是实例方法.意思是他属于类的某个实例,通过这个实例调用它,对类的其他实例不产生影响. 2.类方法:也称静态方法.在方法前加static关键 ...

  5. python高阶函数(Map、Reduce、Filter、lamba)

    Map函数 map()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回. 代码如下: >>> def f(x): . ...

  6. Effective java 系列之更优雅的关闭资源-try-with-resources

    背景: 在Java编程过程中,如果打开了外部资源(文件.数据库连接.网络连接等),我们必须在这些外部资源使用完毕后,手动关闭它们.因为外部资源不由JVM管理,无法享用JVM的垃圾回收机制,如果我们不在 ...

  7. C# 动态生成的按钮及定义按钮的事件的代码

    内容闲暇时间,把内容过程中比较常用的内容备份一下,如下的内容内容是关于C# 动态生成的按钮及定义按钮的事件的内容,应该对码农们也有用途. HtmlGenericControl control = ne ...

  8. Django web框架-----Django连接本地现有mysql数据库

    第一步:win10下载mysql5.7压缩包配置安装mysql,创建数据库或导入数据库 第二步:win10搭建django2.1.7开发环境,创建项目为mytestsite,创建应用app为quick ...

  9. vue.js+webpack在一个简单实例中的使用过程demo

    这里主要记录vue.js+webpack在一个简单实例中的使用过程 说明:本次搭建基于Win 7平台 Node.js 安装官网提供了支持多种平台的的LTS版本下载,我们根据需要来进行下载安装.对于Wi ...

  10. JavaScript前端面试题总结

    1.em和rem 像素(px):用于元素的边框或定位. em/rem:用于做响应式页面,em相对于父元素,rem相对于根元素. rem 单位翻译为像素值是由 html 元素的字体大小决定的. 此字体大 ...