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文件:

 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     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">
 6
 7     <!-- 1.提供方应用信息,用于计算依赖关系;name属性用来指定当前服务/应用的名字,使用工程名即可 -->
 8     <dubbo:application name="user-service-provider"  />
 9
10     <!-- 2.指定注册中心的地址:使用zookeeper作为注册中心暴露服务地址  下面两种方式都可以-->
11     <!-- <dubbo:registry address="zookeeper://127.0.0.1:2181" /> -->
12     <dubbo:registry protocol="zookeeper" address="127.0.0.1:2181" />
13
14     <!--3.指定通信规则: 用dubbo协议在20880端口暴露服务 即服务的调用者和服务的提供者之间使用端口20880进行通信 -->
15     <dubbo:protocol name="dubbo" port="20880" />
16
17     <!--4.暴露服务dubbo:service    声明需要暴露的服务接口  ref:指向服务的真正实现对象-->
18     <dubbo:service interface="com.lch.test.service.UserService" ref="userService" />
19
20     <!-- 和本地bean一样实现服务 -->
21     <bean id="userService" class="com.lch.test.service.impl.UserServiceImpl" />
22 </beans>

(4)测试服务提供者:

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

2.让服务的消费者去注册中心订阅服务提供者的服务地址

(1)order-service-consumer工程引入dubbo依赖:在order-service-consumer工程的pom文件中添加依赖:

(2)配置服务的消费者:在order-service-consumer工程的resources目录下创建一个consumer.xml文件,添加如下内容:

 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     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">
 6
 7     <!-- 1.消费方应用名-->
 8     <dubbo:application name="order-service-consumer" />
 9
10     <!-- 2.指定注册中心地址 -->
11     <dubbo:registry address="zookeeper://127.0.0.1:2181"/>
12
13     <!-- 生成远程服务代理dubbo:reference:声明需要调用的远程服务的接口 -->
14     <!-- user-service-provider工程里面暴露了一个名为userService的服务,这里要引用这个服务-->
15     <dubbo:reference id="userService" interface="com.lch.test.service.UserService" />
16 </beans>

3. 服务消费者的实现:

(1)在上一步,order-service-consumer通过dubbo引用了服务提供者暴露的接口userService,那么在orderService的实现类中,就可以使用Spring的注解来注入userService这个bean:

 1 package com.lch.test.service.impl;
 2
 3 import java.util.List;
 4
 5 import org.springframework.beans.factory.annotation.Autowired;
 6 import org.springframework.stereotype.Service;
 7
 8 import com.lch.test.bean.UserAddress;
 9 import com.lch.test.service.OrderService;
10 import com.lch.test.service.UserService;
11
12 /**
13  * 1.将服务提供者注册到注册中心 2.让服务消费者去注册中心订阅服务提供者的服务地址
14  *
15  * @author
16  */
17 @Service // 这里暂时使用spring的注解
18 public class OrderServiceImpl implements OrderService {
19
20     /*
21      * 这里dubbo工程里面只是引入了该接口,而该接口的实现在其他工程里面, 这里就需要远程过程调用才能获取到该接口的实现
22      */
23     @Autowired
24     UserService userService;
25
26     public void initOrder(String userId) {
27         System.out.println("用户id=" + userId);
28         // 调用userService 获取用户收货地址
29         List<UserAddress> addressList = userService.getUserAddressList(userId);
30         addressList.forEach(address -> {
31             System.out.println(address);
32         });
33     }
34
35 }

这里使用了注解,consumer.xml配置文件中需要扫描包里的注解:

(2)服务的消费者测试:

 1 package com.lch.test;
 2
 3 import java.io.IOException;
 4
 5 import org.springframework.context.support.ClassPathXmlApplicationContext;
 6
 7 import com.lch.test.service.OrderService;
 8
 9 public class MainApplication {
10
11     public static void main(String[] args) throws IOException {
12         ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:consumer.xml");
13         OrderService orderService = context.getBean(OrderService.class);
14         orderService.initOrder("1");
15         System.out.println("调用完成");
16         System.in.read();
17     }
18 }

调用结果:

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

原文地址:https://www.cnblogs.com/enjoyjava/p/11184208.html

时间: 2024-10-12 08:44:48

Dubbo学习-4-dubbo简单案例-2-服务提供者和消费者配置的相关文章

Dubbo学习(一) Dubbo原理浅析

一.初入Dubbo Dubbo学习文档: http://dubbo.incubator.apache.org/books/dubbo-user-book/ http://dubbo.incubator.apache.org/books/dubbo-admin-book/ https://github.com/alibaba/dubbo http://alibaba.github.io/dubbo-doc-static/Home-zh.htm 一.什么是dubbo   Dubbo是Alibaba开

【Dubbo】整合Dubbo+Zookeeper+SpringMVC(三)---构建服务提供者和消费者

第一步:provider和customer中添加pom.xml完整依赖 <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/maven-v4

Dubbo学习总结 01 简单介绍

一 Dubbo是什么? Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案.简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需要用的,只有在分布式的时候,才有dubbo这样的分布式服务框架的需求,并且本质上是个服务调用的东东,说白了就是个远程服务调用的分布式框架(告别Web Service模式中的WSdl,以服务者与消费者的方式在dubbo上注册) 其核心部分包含:1. 远程通讯: 提供对多种基于长连接的NIO框架抽象封装,

dubbo学习 一 dubbo概述

1,背景 1,网站刚开时候的时候可能所有的功能业务都在一个应用里面 2,当业务不断复杂,流量不断增多的时候,就需要将原先的一个应用划分成多个独立的应用. 3,当分出来的业务越来越多的时候,应用也变的多而复杂,各个应用之间的交互也必不可少,就需要进行远程服务调用RPC,使用哪个找哪个,调用哪个. 4,当服务越来越多的时候,上面那种用一个找一个的方法,不仅管理混乱而且资源浪费,这时就需要一个服务调度中心来管理所有的服务信息,做为一个服务中心,所有使用者都只要关注服务中心即可.并且还需要不同服务 不同

dubbo学习 二 dubbo源码大致查阅

源码的解析在官网都已经写的非常详细,可以参考:http://dubbo.io/Developer+Guide-zh.htm 服务提供者暴露一个服务的详细过程 首先ServiceConfig类拿到对外提供服务的实际类ref(如:HelloWorldImpl),然后通过ProxyFactory类的getInvoker方法使用ref生成一个AbstractProxyInvoker实例,到这一步就完成具体服务到Invoker的转化.接下来就是Invoker转换到Exporter的过程. Dubbo处理服

dubbo学习之dubbo管理控制台装配及集成zookeeper集群部署(1)【转】

dubbo管理控制台开源部分主要包含:路由规则,动态配置,服务降级,访问控制,权重调整,负载均衡,等管理功能. 1.下载dubbo 地址:http://code.alibabatech.com/mvn/releases/com/alibaba/dubbo-admin/2.4.1/dubbo-admin-2.4.1.war 本人将tomcat安装在/opt/目录下,先删除tomcat/webapps下自带的ROOT文件夹,将下载的war包解压到webapps/ROOT,命令如下: [plain] 

dubbo学习(1)--简单的入门搭建实例

转载请注明源文出处:http://www.cnblogs.com/lighten/p/6828026.html 1 简介 dubbo是一个分布式服务框架,由阿里巴巴的工程师开发,致力于提供高性能和透明化的RPC远程服务调用.可惜的是该项目在2012年之后就没有再更新了,之后由当当基于dubbo开发了dubbox.这里对dubbo的入门构建进行简单的介绍.不涉及dubbo的运行机制,只是搭建过程,方便学习者快速构建项目,运行.熟悉该框架. dubbo提供了两种构建项目的方法.1.通过Spring容

dubbo学习

转自:http://my.oschina.net/u/216330/blog/224873 Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案. 其核心部分包含: 远程通讯: 提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及"请求-响应"模式的信息交换方式. 集群容错: 提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持. 自动发现: 基于注册中心目录服

Dubbo学习小记

前言 周一入职的新公司,到了公司第一件事自然是要熟悉新公司使用的各种技术,搭建本地的环境. 熟悉新公司技术的过程中,首先就是Maven,这个前面已经写过文章了,然后就是Dubbo----公司的服务都是通过Dubbo来治理的.其实之前我就对SOA.RPC等分布式服务的概念有所了解,Dubbo也多多少少知道一些,不过能亲身使用那是再好不过的了. 此文就对我的Dubbo学习做一个小的总结,基本我总结的这些内容对于入门应该是足够了.关于Dubbo的更详细信息,阿里有专门出手册,手册地址为http://d