Dubbo之旅--Provider示例

2023-05-16

       在本篇文章中我们将通过集体的示例来对Dubbo的提供和消费进行代码层面的认识.这里所介绍的是基本的提供者和消费者通过Spring容器来进行相关的提供和消费的服务.首先看整个示例的项目结构如下:

 

计算机生成了可选文字:dubbo-demo dubbo-demo-consumer d ubbo-d d er

 

      我们通过Maven的方式来进行示例,其中dubbo-demo-api为提供者所定义的接口,项目结构如下:

计算机生成了可选文字:d u b 60 -demo dubbo-demo-api java org pactera u b 60 DemoService.Java DemoService2java DemoService3.ja va main4.iml test ta rget dubbo-demo-api.iml pom.xml d u bbo-demo-consu mer d u 660 -demo-provider

 

此项目里的内容很简单,为服务的一个接口DemoService:

/dubbo-demo/dubbo-demo-api/src/main/java/org/pactera/dubbo/DemoService.java

 

 

packageorg.pactera.dubbo;

 

/**

 *

 * @author Qing

 *

 */

publicinterface DemoService {

 

    public String sayHello(String str);

 

}

 

      Dubbo-demo-provider为服务提供者的示例项目,结构如下图:

 

计算机生成了可选文字:d u bbo-demo-provider mal n Java org pactera provid er @ Bootstrapjava @ DubboProvİderDemojava resou rces d u bbo-demo-provider.xml [X] logback.xml maİn3.İml test ta rget dependency-reduced -pom.xml dubbo-demo-provİder.İml pom.xml

 

 

Dubbo-demo-consumer为服务消费者的示例项目,结构如下图:

 

 

 

计算机生成了可选文字:d u bbo-demo-consu mer Java org pactera d u 880 model provid er thread Bootstrap java DemoServiceConsu merjava resou rces d u bbo-demo-consu mer.xml logback.xml main2.iml test ta rget dependency-red uced -pom.xml dubbo-demo-consumer.iml pom.xml

 

 

以上是整个示例程序的整体框架.

接下来我们将从提供者的项目入手开始.在提供者的项目里先要对相关提供的服务进行配置.

 

 

1   Dubbo-demo-provider的项目里我们需要用到Dubbo,Zookeeper,以及dubbo-demo-api的相关java,因此需要在pom.xml对其进行引用,如下:

 

    <dependencies>

        <dependency>

           <groupId>org.pactera.dubbo</groupId>

           <artifactId>dubbo-demo-api</artifactId>

           <version>1.0-SNAPSHOT</version>

        </dependency>

        <dependency>

           <groupId>com.alibaba</groupId>

           <artifactId>dubbo</artifactId>

           <version>2.4.10</version>

        </dependency>

        <dependency>

           <groupId>com.101tec</groupId>

           <artifactId>zkclient</artifactId>

            <version>0.3</version>

        </dependency>

        <dependency>

           <groupId>junit</groupId>

           <artifactId>junit</artifactId>

           <version>3.8.1</version>

            <scope>test</scope>

        </dependency>

    </dependencies>

 

 

2  接下来为了能够让Dubbo的提供者通过Spring方式加载,我们需要对其进行相关配置,如下文件内容.

 

/dubbo-demo/dubbo-demo-provider/src/main/resources/dubbo-demo-provider.xml

 

<?xmlversion="1.0" encoding="UTF-8"?>

<beansxmlns="http://www.springframework.org/schema/beans"

   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

   xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"

   xsi:schemaLocation="http://www.springframework.org/schema/beans

        http://www.springframework.org/schema/beans/spring-beans.xsd

        http://code.alibabatech.com/schema/dubbo

        http://code.alibabatech.com/schema/dubbo/dubbo.xsd

        ">

    <!-- 提供方应用信息,用于计算依赖关系 -->

    <dubbo:applicationname="hello-world-app"  />

   

 

     <!-- 使用zookeeper广播注册中心暴露服务地址 -->

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

    <!-- 用dubbo协议在20880端口暴露服务 -->

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

    <dubbo:monitorprotocol="registry"></dubbo:monitor>

   

    <!-- 声明需要暴露的服务接口 -->

    <dubbo:serviceinterface="org.pactera.dubbo.DemoService" ref="demoService"/>

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

    <bean id="demoService"class="org.pactera.dubbo.provider.DemoServiceImpl" />

</beans>

 

 

3  需要将dubbo提供的服务接口进行实现.

 

/dubbo-demo/dubbo-demo-provider/src/main/java/org/pactera/dubbo/provider/DemoServiceImpl.java

 

 

 

packageorg.pactera.dubbo.provider;

 

importcom.alibaba.dubbo.rpc.RpcContext;

importlombok.extern.slf4j.Slf4j;

importorg.pactera.dubbo.DemoService;

 

@Slf4j

publicclass DemoServiceImpl implements DemoService {

    public String sayHello(String str) {

      System.out.println("reqInfo: "+ str + ", request form consumer: " +RpcContext.getContext().getRemoteHost());

        return "Hello " + str;

    }

}

 

 

接下来我们需要再写一个提供者启动服务的程序,主要是用来启动Spring容器,并注入相关的服务,同时将提供者的内容注册到Zookeeper.

 

 启动程序如下:

/dubbo-demo/dubbo-demo-provider/src/main/java/org/pactera/dubbo/Bootstrap.java

 

packageorg.pactera.dubbo;

 

importcom.google.common.util.concurrent.AbstractIdleService;

importlombok.extern.slf4j.Slf4j;

importorg.springframework.context.support.ClassPathXmlApplicationContext;

 

@Slf4j

publicclass Bootstrap extends AbstractIdleService {

 

    private ClassPathXmlApplicationContextcontext;

 

    public static void main(String[] args) {

        Bootstrap bootstrap = new Bootstrap();

        bootstrap.startAsync();

        try {

            Object lock = new Object();

            synchronized (lock) {

                while (true) {

                    lock.wait();

                }

            }

        } catch (InterruptedException ex) {

            System.err.println("ignoreinterruption");

        }

    }

 

    /**

     * Start the service.

     */

    @Override

    protected void startUp() throws Exception {

        context = newClassPathXmlApplicationContext("dubbo-demo-provider.xml");

        context.start();

        context.registerShutdownHook();

       System.out.println("----------------provider service startedsuccessfully------------");

    }

 

    /**

     * Stop the service.

     */

    @Override

    protected void shutDown() throws Exception{

        context.stop();

       System.out.println("-------------service stoppedsuccessfully-------------");

    }

}

 

 

       5    提供者服务启动日志:

 

计算机生成了可选文字:B cc.tstra 2m5-a3- 383) t c urn ins i sta cc of singleton i tance of singleton r start cd (13 liason) kl .7.0_1 c on ca 2ø1s-øs-3e (Def.u1tSins c of simglcton • dubbc• STARTING) DEBUG STARr1w,J 2g15-gy-3a 2g15-g3-3a Finished 2ø15-ø3-3e to for o. s. b.f.s.DefaultListablegeanF.ctory creating of ' tubbo• of 'ors-p t Eagerly DEBUG STARTING) DEBUG INFO pre-Lnst.ntlatlng s Lngletæ•.s Ln (DefaultLista definint STARTING) STARTING) STARTING) urn n urning e urning of factory håæ-archy 2ø15-ø3-3a 2us-ø3-se 2ø1S-ø3-3ø 2m5-g3-3a . java zm5-g3-3g 2ø1s-ø3-3e a•214) R t 8:21') Ret •214) Ret •214) R t c a c hÆd •app b.f. (AbstractSu B _ dubEE. b.f. s.CRfauLtListabLe3eanFactory C AbstractSu ton 'dubbo' • . alibaba. dubbc. b.f. (Abstract3e instance of singleton STARTING)

 

         至此,服务者Provider的示例基本上已经结束,如果读者配置监控中心的话,可以打开监控中心搜索demoService,你便可以在监控中心看到此提供者服务的具体信息.限于篇幅的原因,关于消费者的相关示例将在接下来的文章进行阐述.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Dubbo之旅--Provider示例 的相关文章

  • MQ--6 Message queuing)>>>>微服务与dubbo以及Nexus

    MQ 1 Message queuing gt gt gt gt RabbitMQ MQ 2 Message queuing gt gt gt gt ZooKeeper MQ 3 Message queuing gt gt gt gt ka
  • Dubbo SpringBoot版本入门

    Dubbo SpringBoot版本入门 1 目的 2 方法 2 1 系统工程总体介绍 2 2 系统工程环境搭建 2 2 1 新建 springboot order service consumer 服务 2 2 2 新建 springbo
  • SpringBoot中MyBatis传参的方式

    版本 SpringBoot调用MyBatis访问数据库 依赖为org mybatis spring boot 版本为2 1 2 两种调用方式 两种调用方式为 注解方式和SqlProvider方式 两种方式所遵循的规则相同 无论是否使用 Pa
  • zookeeper看这一篇就够了

    第一章 zookeeper简介 第1节 zookeeper的由来 1 2 3 4 1 zookeeper最早起源于雅虎研究院的一个研究小组 2 在雅虎内部很多大型系统基本都需要依赖一个类似的系统来进行分布式协调 并且这个系统还有单点问题 3
  • Dubbo源码解析:服务暴露与发现

    dubbo源码解析 服务暴露与发现 概述 dubbo是一个简单易用的RPC框架 通过简单的提供者 消费者配置就能完成无感的网络调用 那么在dubbo中是如何将提供者的服务暴露出去 消费者又是如何获取到提供者相关信息的呢 这就是本章我们要讨论
  • 深入探索 Dubbo 的 AOT 技术及其技术演进历程

    引言 随着云原生和微服务架构的兴起 高性能和低延迟成为了开发者们的关注重点 在 Java 生态系统中 Spring 和 Dubbo 是两个备受青睐的框架 它们为开发者提供了强大的功能和灵活性 为了进一步提升性能 Dubbo 团队引入了 AO
  • Thrift、Dubbo、Spring Cloud 和 gRPC

    何为RPC RPC Remote Procedure Call 远程过程调用 是一种进程间通信方式 是一种技术的思想 而不是规范 它允许程序调用另一个地址空间 通常是共享网络的另一台机器上 的过程或函数 而不用程序员显式编码这个远程调用的细
  • dubbo分布式服务

    架构 节点角色说明 Provider 暴露服务的服务提供方 Consumer 调用远程服务的服务消费方 Registry 服务注册与发现的注册中心 Monitor 统计服务的调用次调和调用时间的监控中心 Container 服务运行容器 调
  • 重置提供商数据 - Flutter

    我在我的应用程序中使用多提供商 Provider 工作得很好 它存储数据 并且在任何事情发生变化时提供完美的事件 现在 我的应用程序中有这个场景 gt 用户 1 已登录 现在 当我在同一登录中添加第二个帐户 例如 Gmail 多帐户 时 提
  • 说说一次 Dubbo 服务请求流程?

    Dubbo 是一个高性能 轻量级的开源 Java RPC 框架 用于构建服务化应用程序 下面是一个简单的 Dubbo 服务请求流程 客户端发起请求 客户端通过 Dubbo 提供的 RPC 客户端库发送请求到 Dubbo 服务提供者 请求包含
  • Dubbo 动态代理策略有哪些?

    Dubbo 是一个高性能 轻量级的 Java RPC 框架 它支持多种动态代理策略 以下是 Dubbo 支持的一些动态代理策略 JDK动态代理 这是 Java 动态代理的基础 通过代理接口生成代理类 当调用远程服务时 Dubbo 会根据接口
  • Dubbo怎么实现动态感知服务下线的呢?

    Dubbo是一个高性能 轻量级的开源Java RPC框架 用于服务间的远程通信 为了实现动态感知服务下线 Dubbo提供了多种策略 服务监控 Dubbo提供了内置的监控功能 通过在服务提供者上配置监控信息 可以实时监测服务状态 当服务下线时
  • Zookeeper 和 Dubbo 的关系?

    Zookeeper的作用 zookeeper用来注册服务和进行负载均衡 哪一个服务由哪一个机器来提供必需让调用者知道 简单来说就是ip地址和服务名称的对应关系 当然也可以通过硬编码的方式把这种对应关系在调用方业务代码中实现 但是如果提供服务
  • Dubbo 动态代理策略有哪些?

    Dubbo 是一个高性能 轻量级的 Java RPC 框架 它支持多种动态代理策略 以下是 Dubbo 支持的一些动态代理策略 JDK动态代理 这是 Java 动态代理的基础 通过代理接口生成代理类 当调用远程服务时 Dubbo 会根据接口
  • Zookeeper 和 Dubbo 的关系?

    Zookeeper的作用 zookeeper用来注册服务和进行负载均衡 哪一个服务由哪一个机器来提供必需让调用者知道 简单来说就是ip地址和服务名称的对应关系 当然也可以通过硬编码的方式把这种对应关系在调用方业务代码中实现 但是如果提供服务
  • 是否有实用的方法来确定正在使用哪些 JCE 加密提供商?

    我们已将 Java 产品配置为仅使用经过 FIPS 验证的 RSA JCE 加密提供程序 但是 该产品将无法工作 当onlyRSA 库列在 java security 中 因此 某些内容正在向其他提供商请求非 FIPS 算法 通过排除过程
  • HttpRunner(20):脚手架工具使用(一键搭建)-httprunner运行方式

    脚手架工具使用 每一个成熟的系统工具 都会有对应的脚手架工具 它可以快速构建项目的必要目录 不必自己一个一个的配置与搭建 只需要执行一些命令即可 httprunner也提供了脚手架工具 使用步骤如下 1 在命令模式下输入hrun start
  • HttpRunner(22):httprunner设置代理及请求证书验证

    httprunner设置代理 httprunner 库本身没有提供设置代理的接口 但是底层使用了urllib requests 等库 可以设置HTTP PROXY 和HTTPS PROXY 环境变量 常用的网络库会自动识别这些环境变量 日常
  • 在一个组件视图中完成的更改不会反映在角度 4 中的另一组件视图中

    在这里 我正在更改一个组件中的一些数据 例如 更改一个模块的用户个人资料图片 并且相同的个人资料图片应该反映在其他模块的另一个组件中 这些不是父 子组件 因此我正在导入模块和特定组件 调用组件的函数来分配个人资料图片的范围值 如果我在控制台
  • Terraform - Azure 作为提供商和受限访问帐户

    我想使用 Terraform 在 Azure 上部署一些资源 在 Azure 上 我拥有一个仅对一个资源组 RGName 具有 所有者权限 的帐户 不在订阅级别 在我的 Linux 服务器上 我安装了 az cli 并执行了 az logi

随机推荐

  • Android NDK中C++ STL库动态和静态链接

    0x00 本文参考 本文参考Android NDK中C 43 43 运行时库介绍 我们在开发NDK的时候 xff0c 经常需要使用C 43 43 STL库开发 xff0c 那么这些库是如何和我们的程序链接的呢 xff1f 0x01 C 43
  • 80386保护模式--GDT,LDT,TSS,调用门,特权级转移,附pmtest5代码详解

    教材选择一个操作系统的实现 xff0c 作者于渊 xff0c 看此书前最好了有汇编语言 xff0c 保护模式下的汇编 xff08 参考清华杨季文的80X86汇编语言程序设计教程 xff09 xff0c C语言 xff0c 计算机组成原理 x
  • 80386保护模式--描述符,附pm.inc代码详解

    描述符包括 xff0c 存储段描述符 xff08 代码段 xff0c 数据段 xff0c 堆栈段 xff09 xff0c 系统描述符 xff08 任务状态段TSS xff0c 局部描述符表LDT xff09 xff0c 门描述符 xff08
  • 80386保护模式--分页机制,附pmtest8代码详解

    一 分段机制 逻辑地址 分段机制 线性地址 分页机制 物理地址 xff0c 分页机制示意图如图1 页目录表中的每一项叫页目录项 xff1b 页表中的每一项叫页表项 图 1 页映射表结构 页目录表PDE xff0c 及页表PTE如图2
  • 80386保护模式--中断机制,附pmtest9代码详解

    一 80386 xff0c 内存 xff0c 8259A的连接如图1 图 1 二 编程8259A中断控制器 xff08 将ICW写入特定的寄存器 xff09 8259A是可编程中断控制器 xff0c 对它的设置并不复杂 xff0c 是通过向
  • Android--›系统源码下载之"指定模块源码的下载"(如:系统闹钟源码下载)

    网上大多数的文章都是介绍Android系统源码的下载 本文小清新 介绍Android系统中 单个模块源码的下载 其实repo下载的Android系统 就是通过下载多个小模块 然后拼起来的 简单介绍下Android源码下载方法 来自Andro
  • FAT12文件系统

    一 FAT12软盘格式 软盘格式如图1 xff1a 每个扇区是512字节 xff0c 512B 2880 61 1 44MB 图 1 软盘 xff08 1 44MB xff0c FAT12 xff09 1 引导扇区 占512字节 xff0c
  • X86/Win32函数调用规范研究

    一 函数调用总体框图如下 xff1a 二 C语言函数如下 xff1a int sum int x int y int s s 61 x 43 y return s int foo void int m 61 2 int n 61 3 int
  • ELF文件结构

    一 ELF文件结构如下图 xff1a 之所以要用ELF文件格式 xff0c 是因为这样可以用C语言和汇编语言混合写内核代码 二 ELF header及Program header详细介绍 nasm f elf o kernel o kern
  • int 13H int 10H int 15H

    一 int 13h中断 对于1 44MB的软盘来讲 xff0c 总共有两面 xff08 磁头号0和1 xff09 xff0c 每面有80个柱面 xff08 0 79 xff09 xff0c 每个柱面有18个扇区 软盘的容量的由来 xff1a
  • Orange's 进程

    解释一个操作系统的实现 chapter6 r中代码 程序流程如下 xff1a 1 把Loader中的GDT和esp挪到Kernel中 xff0c 初始化IDTPTR 2 初始化8259 xff0c 初始化IDT xff0c 初始化GDT中的
  • Orange's TTY

    一 TYY任务本质就是增加了一个进程 xff0c 并且运行在ring1 xff0c 且优先级调高了 并且设置了键盘中断用于接收键盘输入 xff0c 并将扫描码存放在缓冲区 task tyy也就是新加入的进程 xff0c 循环执行读写缓冲区
  • C语言指针强制类型转换

    一 举例说明 上图 对应函数调用为int printf const char fmt xff0c fmt为char 指针类型 xff0c 所以共占了32位字节 xff0c 但是 fmt执行的是一个字节 xff0c fmt 43 43 执行的
  • Orange's 进程间通信

    新增一个系统进程 xff0c 和TESTA进行通信 xff0c 通信的流程是这样的 xff0c 如果首先执行到系统进程 xff0c 发送消息 xff0c 那么会触发内中断到ring0级 xff0c 完成发送所需要的动作 xff0c 之后回到
  • IDEA找不到项目根路径问题【多模块情况】

    如果不对idea进行设置 则默认项目根路径是父项目根路径下 xff0c 即使父项目就是一个壳儿 从eclipse转过来又点不习惯 下面给出解决方法 在启动项找到Edit 这个配置 找到要启动的那个项目 xff0c 进行配置 解决 这时候这个
  • 使用wmic命令获得计算机硬件信息

    wmic的使用方法 wmic 硬件信息名称 get 属性名称 xff0c 属性名称2 代码示例 xff1a java获取CPU代码 public static String getCpuId throws IOException Proce
  • Kotlin--›Android Activity/Fragment转场动画极简使用方法

    Activity之间共享元素实现的转场动画 需要API gt 61 21才支持 但是 转场动画 在 support包里面提供了支持 所以没有API 21的限制 可以参考Transition转场动画的文章 https blog csdn ne
  • android日志抓取

    目录说明 00 mtk dump mtk dump文件 01 qcom dump qcom dump文件
  • 带你走进EJB--EJB和Spring对比

    通过对 EJB 系列的总结和学习我们已经对 EJB 有了基本的了解 但是为了更进一步的去深入学习 EJB 我们很有必要将它拿出来跟之前非常熟悉的 Spring 进行一下对比 通过对比来了解这两个内容的相同与不同之处 更有利于我们对两者进行深
  • Dubbo之旅--Provider示例

    在本篇文章中我们将通过集体的示例来对 Dubbo 的提供和消费进行代码层面的认识 这里所介绍的是基本的提供者和消费者通过 Spring 容器来进行相关的提供和消费的服务 首先看整个示例的项目结构如下 我们通过 Maven 的方式来进行示例