首页 > 编程语言 > 详细

java Dubbo

时间:2021-04-03 09:46:38      阅读:21      评论:0      收藏:0      [点我收藏+]

 

Dubbo

 

架构演变

 

技术分享图片

 

Dubbo概念

 

单一应用架构

 

当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。此时,用于简化增删改查工作量的数据访问框架(ORM)是关键。

 

 

 

垂直应用架构

 

当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,提升效率的方法之一是将应用拆成互不相干的几个应用,以提升效率。此时,用于加速前端页面开发的Web框架(MVC)是关键。

 

 

 

分布式服务架构

 

当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。此时,用于提高业务复用及整合的分布式服务框架(RPC)是关键。

 

 

 

流动计算架构

 

当服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需增加一个调度中心基于访问压力实时管理集群容量,提高集群利用率。此时,用于提高机器利用率的资源调度和治理中心(SOA)是关键。

 

Dubbo需求

 

本文介绍了 Dubbo 要解决的需求

 

技术分享图片

 

 

 

在大规模服务化之前,应用可能只是通过 RMI Hessian 等工具,简单的暴露和引用远程服务,通过配置服务的URL地址进行调用,通过 F5 等硬件进行负载均衡。

 

 

 

当服务越来越多时,服务 URL 配置管理变得非常困难,F5 硬件负载均衡器的单点压力也越来越大。 此时需要一个服务注册中心,动态地注册和发现服务,使服务的位置透明。并通过在消费方获取服务提供方地址列表,实现软负载均衡和 Failover,降低对 F5 硬件负载均衡器的依赖,也能减少部分成本。

 

 

 

当进一步发展,服务间依赖关系变得错踪复杂,甚至分不清哪个应用要在哪个应用之前启动,架构师都不能完整的描述应用的架构关系。 这时,需要自动画出应用间的依赖关系图,以帮助架构师理清关系。

 

 

 

接着,服务的调用量越来越大,服务的容量问题就暴露出来,这个服务需要多少机器支撑?什么时候该加机器? 为了解决这些问题,第一步,要将服务现在每天的调用量,响应时间,都统计出来,作为容量规划的参考指标。其次,要可以动态调整权重,在线上,将某台机器的权重一直加大,并在加大的过程中记录响应时间的变化,直到响应时间到达阈值,记录此时的访问量,再以此访问量乘以机器数反推总容量。

 

 

 

以上是 Dubbo 最基本的几个需求。

 

 

 

技术分享图片

 

 

 

技术分享图片

 

Rpc概念

 

技术分享图片

 

概念:

 

Remote Procedure Call 远程过程调用,是一种不同进程之间的通信方式,他允许程序调用另一个地址空间的过程或者是函数,不用程序员显式的编写代码实现调用的细节(底层使用的是Socket)

 

搭建Dubbo环境

 

下载Zookeeper安装包

 

Zookeeper是一个分布式开源框架,交给了Apache进行管理,实现服务的地址分配.

 

提供功能:配置维护,域名维护,分布式同步,组服务

 

他的目标是将封装好的 复杂易出错的关键服务,将简单易用的接口和性能高效,功能稳定的系统提供给用户使用

 

它包含了一个简单的 原语集,提供javaC使用的接口

 

还提供了分布式独享锁,选举,队列等

 

 

 

解压zookeeper安装包

 

进入到zookeeper中的conf目录

 

复制粘贴zoo.sample.cfg文件

 

修改文件名为zoo.cfg 并作出相应的修改

 

修改 zkEnv.cmd 没有JAVA_HOME会报错

 

修改本地中的hosts文件,放开这两个注解

 

127.0.0.1       localhost

::1             localhost

 

 

 

 

 

 

 

安装dubbo

 

进入到:D:\java8\incubator-dubbo-ops-master\dubbo-admin\src\main\resources修改application.properties文件

 

dubbo.registry.address=zookeeper://127.0.0.1:2181

 

进入到dubbo-admin项目的根目录中

 

mvc clean pakage -Dmaven.test.skip=true

 

启动dubbo-admin管理平台

 

java -jar dubbo-admin-0.0.1-SNAPSHOT.jar

 

 

 

启动成功后在浏览器url中输入  localhost:7001方可进入管理界面用户名密码为root root

 

 

 

创建服务的消费者和服务的提供者

 

根据用户的id值查询用户所含有的角色信息

 

用户模块消费者

 

角色模块提供者

 

在用户服务中去调用角色服务中的selectRole(userId)

 

角色服务中需要暴露接口  RoleService

 

用户服务中需要消费或者引用角色服务中的暴露的RoleService服务

 

 

 

 

 

配置服务提供者

 

引入dubbo依赖  zookeeper注册中心客户端  提供者和消费者公用的API

 

<dependencies>

    <!--引入dubbo坐标依赖-->

    <dependency>

        <groupId>com.alibaba</groupId>

        <artifactId>dubbo</artifactId>

        <version>2.6.2</version>

    </dependency>

 

    <!--引入zookeeper注册中心的客户端-->

    <dependency>

        <groupId>org.apache.curator</groupId>

        <artifactId>curator-framework</artifactId>

        <version>2.12.0</version>

    </dependency>

 

    <!--引入service-API坐标依赖-->

    <dependency>

        <groupId>com.zhiyou100</groupId>

        <artifactId>service-API</artifactId>

        <version>1.0-SNAPSHOT</version>

    </dependency>

</dependencies>

 

定义服务接口:

 

RoleService.java

 

import com.zhiyou100.pojo.Role;

 

import java.util.List;

 

//提供者  角色服务

public interface RoleService {

    List<Role> selectRoleByUserId(Integer uId);

}

 

在服务提供方实现接口

 

RoleServiceImpl

 

import com.zhiyou100.pojo.Role;

import com.zhiyou100.service.RoleService;

import org.springframework.stereotype.Service;

 

import java.util.ArrayList;

import java.util.List;

@Service  //交给Spring管理

public class RoleServiceImpl implements RoleService {

    //属性注入 mapper

    //@AutoWired

 

    @Override

    public List<Role> selectRoleByUserId(Integer uId) {

        ArrayList<Role> roles = new ArrayList<>();

        roles.add(new Role(1,"CEO", "高级打工者"));

        roles.add(new Role(2,"CTO", "高级代码搬运工"));

        roles.add(new Role(3,"Programmer", "cv工程师"));

        //假定从数据库查询出对应的角色信息

        return roles;

    }

}

 

pojo

 

Role.java

 

import java.io.Serializable;

 

//JavaBean 角色

public class Role implements Serializable {

    private Integer rId;

    private String rName;

    private String rDesc;

}

 

 

 

Spring配置生命暴露服务

 

provide.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" xmlns:context="http://www.springframework.org/schema/context"

       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 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

 

    <!--组件扫描-->

    <!--<context:component-scan base-package="com.zhiyou100.service.impl"/>-->

 

    <!-- 1.指定当前应用名称 区分不同的应用服务的 服务名称不能重复 -->

    <dubbo:application name="service-provider"  />

 

    <!--

        2.指定注册中心的位置

        使用zookeeper 自动注册与发现

        zookeeper 使用哪个注册中心

        127.0.0.1:2181  ip地址+端口号

    -->

    <dubbo:registry address="zookeeper://127.0.0.1:2181" />

 

    <!-- 3.指定服务之间的通信规则

        dubbo协议在20880端口暴露服务

        dubbo服务之间通信的协议

        20880 dubbo的端口号

    -->

    <dubbo:protocol name="dubbo" port="20880" />

 

    <!--4.指定服务提供者暴露的接口

        声明需要暴露的服务接口

    -->

    <dubbo:service interface="com.zhiyou100.service.RoleService" ref="roleService" />

 

    <!-- 和本地bean一样实现服务 -->

    <bean id="roleService" class="com.zhiyou100.service.impl.RoleServiceImpl" />

</beans>

 

加载Spring配置

 

Provider.java

 

import org.springframework.context.support.ClassPathXmlApplicationContext;

 

import java.io.IOException;

 

//服务提供者

public class Provider {

    public static void main(String[] args) throws IOException {

        //创建ClassPathXmlApplicationContext Spring容器  classpath 类路径下

        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"classpath:provider.xml"});

        //启动Spring容器

        context.start();

        //从输入流中读取字节 读到系统内存中

        //信息  阻塞

        System.in.read(); // 按任意键退出

    }

}

 

 

 

 

 

配置服务消费者

 

导入依赖

 

<dependencies>

    <!--引入dubbo坐标依赖-->

    <dependency>

        <groupId>com.alibaba</groupId>

        <artifactId>dubbo</artifactId>

        <version>2.6.2</version>

    </dependency>

 

    <!--引入zookeeper注册中心的客户端-->

    <dependency>

        <groupId>org.apache.curator</groupId>

        <artifactId>curator-framework</artifactId>

        <version>2.12.0</version>

    </dependency>

 

    <!--引入service-API坐标依赖-->

    <dependency>

        <groupId>com.zhiyou100</groupId>

        <artifactId>service-API</artifactId>

        <version>1.0-SNAPSHOT</version>

    </dependency>

   

</dependencies>

 

通过Spring配置引用远程服务

 

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" xmlns:context="http://www.springframework.org/schema/context"

       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 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

 

    <!--组件扫描-->

    <context:component-scan base-package="com.zhiyou100.service.impl"/>

 

    <!--

        1.指定服务消费者应用名称

        消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样

    -->

    <dubbo:application name="service-consumer"  />

 

    <!--

        2.指定注册中心

        使用zookeeper暴露发现服务地址

    -->

    <dubbo:registry address="zookeeper://127.0.0.1:2181" />

 

    <!--

        3.声明需要远程调用的远程的服务接口  生成远程服务代理

        生成远程服务代理,可以和本地bean一样使用demoService

    -->

    <dubbo:reference id="roleService" interface="com.zhiyou100.service.RoleService" />

</beans>

 

加载Spring配置 并调用远程服务

 

Consumer.java

 

package com.zhiyou100.starter;

 

import com.zhiyou100.pojo.Role;

import com.zhiyou100.service.RoleService;

import org.springframework.context.support.ClassPathXmlApplicationContext;

 

import java.util.List;

 

//服务消费者  启动类

public class Consumer {

    public static void main(String[] args) throws Exception {

        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"classpath:consumer.xml"});

        context.start();

        RoleService roleService = (RoleService)context.getBean("roleService"); // 获取远程服务代理

        List<Role> roles = roleService.selectRoleByUserId(1);// 执行远程方法

        for (Role role : roles) {

            System.out.println( role.getrName() ); // 显示调用结果

        }

 

        //信息阻塞

        System.in.read();

    }

}

 

定义消费接口的

 

UserService

 

import com.zhiyou100.pojo.Role;

 

import java.util.List;

 

public interface UserService {

 

    //传输userId  调用role服务  获取所有的角色信息

    List<Role> listRoles(Integer userId);

 

}

 

定义消费接口的实现类

 

import com.zhiyou100.pojo.Role;

import com.zhiyou100.service.RoleService;

import com.zhiyou100.service.UserService;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;

 

import java.util.List;

@Service

public class UserServiceImpl implements UserService {

 

    //注入RoleService属性

    @Autowired

    private RoleService roleService;

 

    @Override

    public List<Role> listRoles(Integer userId) {

        return roleService.selectRoleByUserId(userId);

    }

}

 

 

 

 

 

 

 

配置service-API

 

把提供者和消费者需要共同使用的接口或者类提取出来返点高service-API

 

这个Demo中涉及到的公用的类和接口有Role    RoleService    UserService

 

注意提取出来把service-API导入到本地仓库  然后通过maven导入就可以使用里面的接口和类

 

Dubbo

架构演变

技术分享图片

Dubbo概念

单一应用架构

当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。此时,用于简化增删改查工作量的数据访问框架(ORM)是关键。

 

垂直应用架构

当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,提升效率的方法之一是将应用拆成互不相干的几个应用,以提升效率。此时,用于加速前端页面开发的Web框架(MVC)是关键。

 

分布式服务架构

当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。此时,用于提高业务复用及整合的分布式服务框架(RPC)是关键。

 

流动计算架构

当服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需增加一个调度中心基于访问压力实时管理集群容量,提高集群利用率。此时,用于提高机器利用率的资源调度和治理中心(SOA)是关键。

Dubbo需求

本文介绍了 Dubbo 要解决的需求

技术分享图片

 

在大规模服务化之前,应用可能只是通过 RMI Hessian 等工具,简单的暴露和引用远程服务,通过配置服务的URL地址进行调用,通过 F5 等硬件进行负载均衡。

 

当服务越来越多时,服务 URL 配置管理变得非常困难,F5 硬件负载均衡器的单点压力也越来越大。 此时需要一个服务注册中心,动态地注册和发现服务,使服务的位置透明。并通过在消费方获取服务提供方地址列表,实现软负载均衡和 Failover,降低对 F5 硬件负载均衡器的依赖,也能减少部分成本。

 

当进一步发展,服务间依赖关系变得错踪复杂,甚至分不清哪个应用要在哪个应用之前启动,架构师都不能完整的描述应用的架构关系。 这时,需要自动画出应用间的依赖关系图,以帮助架构师理清关系。

 

接着,服务的调用量越来越大,服务的容量问题就暴露出来,这个服务需要多少机器支撑?什么时候该加机器? 为了解决这些问题,第一步,要将服务现在每天的调用量,响应时间,都统计出来,作为容量规划的参考指标。其次,要可以动态调整权重,在线上,将某台机器的权重一直加大,并在加大的过程中记录响应时间的变化,直到响应时间到达阈值,记录此时的访问量,再以此访问量乘以机器数反推总容量。

 

以上是 Dubbo 最基本的几个需求。

 

技术分享图片

 

技术分享图片

Rpc概念

技术分享图片

概念:

Remote Procedure Call 远程过程调用,是一种不同进程之间的通信方式,他允许程序调用另一个地址空间的过程或者是函数,不用程序员显式的编写代码实现调用的细节(底层使用的是Socket)

搭建Dubbo环境

下载Zookeeper安装包

Zookeeper是一个分布式开源框架,交给了Apache进行管理,实现服务的地址分配.

提供功能:配置维护,域名维护,分布式同步,组服务

他的目标是将封装好的 复杂易出错的关键服务,将简单易用的接口和性能高效,功能稳定的系统提供给用户使用

它包含了一个简单的 原语集,提供javaC使用的接口

还提供了分布式独享锁,选举,队列等

 

解压zookeeper安装包

进入到zookeeper中的conf目录

复制粘贴zoo.sample.cfg文件

修改文件名为zoo.cfg 并作出相应的修改

修改 zkEnv.cmd 没有JAVA_HOME会报错

修改本地中的hosts文件,放开这两个注解

127.0.0.1       localhost

::1             localhost

 

 

 

安装dubbo

进入到:D:\java8\incubator-dubbo-ops-master\dubbo-admin\src\main\resources修改application.properties文件

dubbo.registry.address=zookeeper://127.0.0.1:2181

进入到dubbo-admin项目的根目录中

mvc clean pakage -Dmaven.test.skip=true

启动dubbo-admin管理平台

java -jar dubbo-admin-0.0.1-SNAPSHOT.jar

 

启动成功后在浏览器url中输入  localhost:7001方可进入管理界面用户名密码为root root

 

创建服务的消费者和服务的提供者

根据用户的id值查询用户所含有的角色信息

用户模块消费者

角色模块提供者

在用户服务中去调用角色服务中的selectRole(userId)

角色服务中需要暴露接口  RoleService

用户服务中需要消费或者引用角色服务中的暴露的RoleService服务

 

 

配置服务提供者

引入dubbo依赖  zookeeper注册中心客户端  提供者和消费者公用的API

<dependencies>

    <!--引入dubbo坐标依赖-->

    <dependency>

        <groupId>com.alibaba</groupId>

        <artifactId>dubbo</artifactId>

        <version>2.6.2</version>

    </dependency>

 

    <!--引入zookeeper注册中心的客户端-->

    <dependency>

        <groupId>org.apache.curator</groupId>

        <artifactId>curator-framework</artifactId>

        <version>2.12.0</version>

    </dependency>

 

    <!--引入service-API坐标依赖-->

    <dependency>

        <groupId>com.zhiyou100</groupId>

        <artifactId>service-API</artifactId>

        <version>1.0-SNAPSHOT</version>

    </dependency>

</dependencies>

定义服务接口:

RoleService.java

import com.zhiyou100.pojo.Role;

 

import java.util.List;

 

//提供者  角色服务

public interface RoleService {

    List<Role> selectRoleByUserId(Integer uId);

}

在服务提供方实现接口

RoleServiceImpl

import com.zhiyou100.pojo.Role;

import com.zhiyou100.service.RoleService;

import org.springframework.stereotype.Service;

 

import java.util.ArrayList;

import java.util.List;

@Service  //交给Spring管理

public class RoleServiceImpl implements RoleService {

    //属性注入 mapper

    //@AutoWired

 

    @Override

    public List<Role> selectRoleByUserId(Integer uId) {

        ArrayList<Role> roles = new ArrayList<>();

        roles.add(new Role(1,"CEO", "高级打工者"));

        roles.add(new Role(2,"CTO", "高级代码搬运工"));

        roles.add(new Role(3,"Programmer", "cv工程师"));

        //假定从数据库查询出对应的角色信息

        return roles;

    }

}

pojo

Role.java

import java.io.Serializable;

 

//JavaBean 角色

public class Role implements Serializable {

    private Integer rId;

    private String rName;

    private String rDesc;

}

 

Spring配置生命暴露服务

provide.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" xmlns:context="http://www.springframework.org/schema/context"

       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 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

 

    <!--组件扫描-->

    <!--<context:component-scan base-package="com.zhiyou100.service.impl"/>-->

 

    <!-- 1.指定当前应用名称 区分不同的应用服务的 服务名称不能重复 -->

    <dubbo:application name="service-provider"  />

 

    <!--

        2.指定注册中心的位置

        使用zookeeper 自动注册与发现

        zookeeper 使用哪个注册中心

        127.0.0.1:2181  ip地址+端口号

    -->

    <dubbo:registry address="zookeeper://127.0.0.1:2181" />

 

    <!-- 3.指定服务之间的通信规则

        dubbo协议在20880端口暴露服务

        dubbo服务之间通信的协议

        20880 dubbo的端口号

    -->

    <dubbo:protocol name="dubbo" port="20880" />

 

    <!--4.指定服务提供者暴露的接口

        声明需要暴露的服务接口

    -->

    <dubbo:service interface="com.zhiyou100.service.RoleService" ref="roleService" />

 

    <!-- 和本地bean一样实现服务 -->

    <bean id="roleService" class="com.zhiyou100.service.impl.RoleServiceImpl" />

</beans>

加载Spring配置

Provider.java

import org.springframework.context.support.ClassPathXmlApplicationContext;

 

import java.io.IOException;

 

//服务提供者

public class Provider {

    public static void main(String[] args) throws IOException {

        //创建ClassPathXmlApplicationContext Spring容器  classpath 类路径下

        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"classpath:provider.xml"});

        //启动Spring容器

        context.start();

        //从输入流中读取字节 读到系统内存中

        //信息  阻塞

        System.in.read(); // 按任意键退出

    }

}

 

 

配置服务消费者

导入依赖

<dependencies>

    <!--引入dubbo坐标依赖-->

    <dependency>

        <groupId>com.alibaba</groupId>

        <artifactId>dubbo</artifactId>

        <version>2.6.2</version>

    </dependency>

 

    <!--引入zookeeper注册中心的客户端-->

    <dependency>

        <groupId>org.apache.curator</groupId>

        <artifactId>curator-framework</artifactId>

        <version>2.12.0</version>

    </dependency>

 

    <!--引入service-API坐标依赖-->

    <dependency>

        <groupId>com.zhiyou100</groupId>

        <artifactId>service-API</artifactId>

        <version>1.0-SNAPSHOT</version>

    </dependency>

   

</dependencies>

通过Spring配置引用远程服务

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" xmlns:context="http://www.springframework.org/schema/context"

       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 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

 

    <!--组件扫描-->

    <context:component-scan base-package="com.zhiyou100.service.impl"/>

 

    <!--

        1.指定服务消费者应用名称

        消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样

    -->

    <dubbo:application name="service-consumer"  />

 

    <!--

        2.指定注册中心

        使用zookeeper暴露发现服务地址

    -->

    <dubbo:registry address="zookeeper://127.0.0.1:2181" />

 

    <!--

        3.声明需要远程调用的远程的服务接口  生成远程服务代理

        生成远程服务代理,可以和本地bean一样使用demoService

    -->

    <dubbo:reference id="roleService" interface="com.zhiyou100.service.RoleService" />

</beans>

加载Spring配置 并调用远程服务

Consumer.java

package com.zhiyou100.starter;

 

import com.zhiyou100.pojo.Role;

import com.zhiyou100.service.RoleService;

import org.springframework.context.support.ClassPathXmlApplicationContext;

 

import java.util.List;

 

//服务消费者  启动类

public class Consumer {

    public static void main(String[] args) throws Exception {

        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"classpath:consumer.xml"});

        context.start();

        RoleService roleService = (RoleService)context.getBean("roleService"); // 获取远程服务代理

        List<Role> roles = roleService.selectRoleByUserId(1);// 执行远程方法

        for (Role role : roles) {

            System.out.println( role.getrName() ); // 显示调用结果

        }

 

        //信息阻塞

        System.in.read();

    }

}

定义消费接口的

UserService

import com.zhiyou100.pojo.Role;

 

import java.util.List;

 

public interface UserService {

 

    //传输userId  调用role服务  获取所有的角色信息

    List<Role> listRoles(Integer userId);

 

}

定义消费接口的实现类

import com.zhiyou100.pojo.Role;

import com.zhiyou100.service.RoleService;

import com.zhiyou100.service.UserService;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;

 

import java.util.List;

@Service

public class UserServiceImpl implements UserService {

 

    //注入RoleService属性

    @Autowired

    private RoleService roleService;

 

    @Override

    public List<Role> listRoles(Integer userId) {

        return roleService.selectRoleByUserId(userId);

    }

}

 

 

 

配置service-API

把提供者和消费者需要共同使用的接口或者类提取出来返点高service-API

这个Demo中涉及到的公用的类和接口有Role    RoleService    UserService

注意提取出来把service-API导入到本地仓库  然后通过maven导入就可以使用里面的接口和类

java Dubbo

原文:https://www.cnblogs.com/shangjinshuai/p/14612828.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!