Dubbo学习-4-dubbo简单案例-2-服务提供者和消费者配置
在上一篇帖子的基础上,开始使用dubbo来实现RPC调用:

根据dubbo的架构图可知,需要做以下几件事情:
1.将服务提供者注册到注册中心(暴露服务)
(1)引入dubbo依赖, 这里依赖2.6.2版本(版本如果使用zookeeper作为注册中心,那么对应的客户端是curator,不是原来的zkClient)
(2)注册中心使用的是zookeeper,需要引入操作zookeeper的客户端 2.6.以上版本的dubbo,如果使用zookeeper作为注册中心,那么注册中心客户端使用的是curator,2.6版本之前的dubbo,是使用zkClient操作zookeeper注册中心

(3)配置服务提供者:在src/main/resources目录下创建一个provider.xml文件:
<?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"
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"> <!-- 1.提供方应用信息,用于计算依赖关系;name属性用来指定当前服务/应用的名字,使用工程名即可 -->
<dubbo:application name="user-service-provider" /> <!-- 2.指定注册中心的地址:使用zookeeper作为注册中心暴露服务地址 下面两种方式都可以-->
<!-- <dubbo:registry address="zookeeper://127.0.0.1:2181" /> -->
<dubbo:registry protocol="zookeeper" address="127.0.0.1:2181" /> <!--3.指定通信规则: 用dubbo协议在20880端口暴露服务 即服务的调用者和服务的提供者之间使用端口20880进行通信 -->
<dubbo:protocol name="dubbo" port="20880" /> <!--4.暴露服务dubbo:service 声明需要暴露的服务接口 ref:指向服务的真正实现对象-->
<dubbo:service interface="com.lch.test.service.UserService" ref="userService" /> <!-- 和本地bean一样实现服务 -->
<bean id="userService" class="com.lch.test.service.impl.UserServiceImpl" />
</beans>
(4)测试服务提供者:

还可以在dubbo管理控制台查看服务提供者的信息:(先要启动dubbo监控中心)

2.让服务的消费者去注册中心订阅服务提供者的服务地址
(1)order-service-consumer工程引入dubbo依赖:在order-service-consumer工程的pom文件中添加依赖:

(2)配置服务的消费者:在order-service-consumer工程的resources目录下创建一个consumer.xml文件,添加如下内容:
<?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"
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"> <!-- 1.消费方应用名-->
<dubbo:application name="order-service-consumer" /> <!-- 2.指定注册中心地址 -->
<dubbo:registry address="zookeeper://127.0.0.1:2181"/> <!-- 生成远程服务代理dubbo:reference:声明需要调用的远程服务的接口 -->
<!-- user-service-provider工程里面暴露了一个名为userService的服务,这里要引用这个服务-->
<dubbo:reference id="userService" interface="com.lch.test.service.UserService" />
</beans>
3. 服务消费者的实现:
(1)在上一步,order-service-consumer通过dubbo引用了服务提供者暴露的接口userService,那么在orderService的实现类中,就可以使用Spring的注解来注入userService这个bean:
package com.lch.test.service.impl; import java.util.List; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import com.lch.test.bean.UserAddress;
import com.lch.test.service.OrderService;
import com.lch.test.service.UserService; /**
* 1.将服务提供者注册到注册中心 2.让服务消费者去注册中心订阅服务提供者的服务地址
*
* @author
*/
@Service // 这里暂时使用spring的注解
public class OrderServiceImpl implements OrderService { /*
* 这里dubbo工程里面只是引入了该接口,而该接口的实现在其他工程里面, 这里就需要远程过程调用才能获取到该接口的实现
*/
@Autowired
UserService userService; public void initOrder(String userId) {
System.out.println("用户id=" + userId);
// 调用userService 获取用户收货地址
List<UserAddress> addressList = userService.getUserAddressList(userId);
addressList.forEach(address -> {
System.out.println(address);
});
} }
这里使用了注解,consumer.xml配置文件中需要扫描包里的注解:

(2)服务的消费者测试:
package com.lch.test;
import java.io.IOException;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.lch.test.service.OrderService;
public class MainApplication {
public static void main(String[] args) throws IOException {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:consumer.xml");
OrderService orderService = context.getBean(OrderService.class);
orderService.initOrder("1");
System.out.println("调用完成");
System.in.read();
}
}
调用结果:

在dubbo管理控制台查看消费者:

Dubbo学习-4-dubbo简单案例-2-服务提供者和消费者配置的更多相关文章
- Dubbo学习(六) dubbo 架构图 以及调用过程
一.Dubbo结构图 duubo结构图 我们解释以下这个架构图:Consumer服务消费者,Provider服务提供者.Container服务容器.消费当然是invoke提供者了,invoke这条 ...
- Dubbo学习(一) Dubbo原理浅析
一.初入Dubbo Dubbo学习文档: http://dubbo.incubator.apache.org/books/dubbo-user-book/ http://dubbo.incubator ...
- Dubbo学习(九) Dubbo面试问题
Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合). 从服务模型的角度来看,Dubbo采用的是一种非常简单的 ...
- vue.js的学习中的简单案例
今天学习了近年来挺火的一门JS技术,叫vue.js下面是它的一个简单案例: <html> <head> <title>$Title$</title> / ...
- Dubbo学习(四) dubbo的特点,8种通信协议之对比
一.dubbo的特性 (1) 连通性: 注册中心负责服务地址的注册与查找,相当于目录服务,服务提供者和消费者只在启动时与注册中心交互,注册中心不转发请求,压力较小 监控中心负责统计各服务调用次数,调用 ...
- Dubbo学习(二) Dubbo 集群容错模式-负载均衡模式
Dubbo是Alibaba开源的分布式服务框架,我们可以非常容易地通过Dubbo来构建分布式服务,并根据自己实际业务应用场景来选择合适的集群容错模式,这个对于很多应用都是迫切希望的,只需要通过简单的配 ...
- WPF+MVVM学习总结 DataGrid简单案例
一.WPF概要 WPF(Windows Presentation Foundation)是微软推出的基于Windows 的用户界面框架,属于.NET Framework 3.0的一部分.它提供了统一的 ...
- dubbo学习 二 dubbo源码大致查阅
源码的解析在官网都已经写的非常详细,可以参考:http://dubbo.io/Developer+Guide-zh.htm 服务提供者暴露一个服务的详细过程 首先ServiceConfig类拿到对 ...
- dubbo学习 一 dubbo概述
1,背景 1,网站刚开时候的时候可能所有的功能业务都在一个应用里面 2,当业务不断复杂,流量不断增多的时候,就需要将原先的一个应用划分成多个独立的应用. 3,当分出来的业务越来越多的时候,应用 ...
- Dubbo学习(五) Dubbo 从下载到编译成功
DUBBO是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000+个服务提供3,000,000,000+次访问量支持,并被广 ...
随机推荐
- 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_01 File类_1_File类的概述
- delphi中如何实现文件的复制?
http://zhidao.baidu.com/link?url=nyAzCpeXAbaT8M3qqAePCF1Zr7q-oK4hpAUNIaRYpHcbmIwYsLr1TXoTt8759HtR1EB ...
- python基础-7.2文件内置属性__doc__ __file__ __package__ __cached__ __name__
__doc__ #py文件开头的注释文字 __file__ #当前py文件的路径 __package__ #包含文件所在包,用 . 分隔,当前文件为None,导入的其他文件:指定文件所在包,用.分隔. ...
- raid10 五块硬盘/raid5(三块使用,两块备份)
raid 10五块硬盘 第一步:在虚拟机中在添加五块硬盘 第二步:使用mdadm命令创建RAID10,名称为“/dev/md0/” -C代表创建操作,-v显示创建过程,-a yes检查RAID名称,- ...
- [Git] 013 远程仓库篇 第零话 使用前的一些配置
0. 前言 本地仓库和 GitHub 上的远程仓库之间的传输是通过 "SSH" 加密的,所以使用前需要进行一些设置 这回的任务 设置"身份象征" 创建 &quo ...
- PHP中的异常和错误(转载)
博客好久没有更新了,实在惭愧,最近在忙人生大事,哈哈!这段时间没有看什么新的东西,结合项目中遇到的PHP异常处理问题,我又重新梳理了之前模糊的概念,希望对大家理解PHP异常处理有所帮助. 请一定要注意 ...
- HNUSTOJ-1696 简单验证码识别(模拟)
1696: 简单验证码识别 时间限制: 2 Sec 内存限制: 128 MB 提交: 148 解决: 44 [提交][状态][讨论版] 题目描述 验证码是Web系统中一种防止暴力破解的重要手段.其 ...
- RocksDB解析
0. 存储引擎基础 存储引擎的基本功能和数据结构 一个存储引擎需要实现三个基本的功能: write(key, value) ...
- 《死磕 Elasticsearch 方法论》:普通程序员高效精进的 10 大狠招!(完整版)
原文:<死磕 Elasticsearch 方法论>:普通程序员高效精进的 10 大狠招!(完整版) 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链 ...
- mysql的sql语句优化方法面试题总结
mysql的sql语句优化方法面试题总结 不要写一些没有意义的查询,如需要生成一个空表结构: select col1,col2 into #t from t where 1=0 这类代码不会返回任何结 ...