当前位置: 首页 > news >正文

Dubbo入门示例

Dubbo是一个开源的分布式服务治理框架,提供高性能和透明化的RPC远程服务调用方案及SOA服务治理方案。不再使用Web Service模式中的WSDL,而是以服务者或消费者的方式在Dubbo上进行注册。Dubbo提供3个主要功能:基于接口的远程调用、容错和负载均衡、自动服务注册和发现。

服务自动注册与发现,不再需要写死服务提供方地址,注册中心基于接口名查询服务提供者的IP地址,并且能够平滑添加或者删除服务提供者。Dubbo采用全Spring配置方式,透明化接入应用,对应用没有任何API侵入,只需要Spring加载Dubbo的配置即可,Dubbo基于Spring的Schema扩展进行加载。





Provider:暴露服务的服务提供方

Consumer:调用远程服务的服务消费方

Registry:服务注册与发现的注册中心

Monitor:统计服务的调用次数和调用时间的监控中心

Container:服务运行容器

调用关系说明
  1. 服务容器负责启动,加载,运行服务提供者。
  2. 服务提供者在启动时,向注册中心注册自己提供的服务。
  3. 服务消费者在启动时,向注册中心订阅自己所需的服务。
  4. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
  5. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
  6. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

Dubbo 示例

本地服务Spring配置

local.xml

<bean id=“xxxService” class=“com.xxx.XxxServiceImpl” />
<bean id=“xxxAction” class=“com.xxx.XxxAction”>
    <property name=“xxxService” ref=“xxxService” />
</bean>

远程服务Spring配置

在本地服务的基础上,只需做简单配置,即可完成远程化:

  • 将上面的 local.xml 配置拆分成两份,将服务定义部分放在服务提供方 remote-provider.xml,将服务引用部分放在服务消费方 remote-consumer.xml
  • 并在提供方增加暴露服务配置 <dubbo:service>,在消费方增加引用服务配置 <dubbo:reference>

remote-provider.xml:

<!-- 和本地服务一样实现远程服务 -->
<bean id=“xxxService” class=“com.xxx.XxxServiceImpl” /> 
<!-- 增加暴露远程服务配置 -->
<dubbo:service interface=“com.xxx.XxxService” ref=“xxxService” />
remote-consumer.xml:
<!-- 增加引用远程服务配置 -->
<dubbo:reference id=“xxxService” interface=“com.xxx.XxxService” />
<!-- 和本地服务一样使用远程服务 -->
<bean id=“xxxAction” class=“com.xxx.XxxAction”> 
    <property name=“xxxService” ref=“xxxService” />
</bean>


在github下载dubbo,在Eclipse中import这个maven项目

https://github.com/alibaba/dubbo

选中dubbo-admin项目,右键maven--update project

双击dubbo-admin项目中的pom.xml,查看到dubbo的版本号为2.5.8,packaging为war即一个web项目


修改dubbo-admin项目中的WEB-INF目录下的dubbo.properties


选中dubbo-admin项目,右键run as--maven install,在target目录下可以看到新生成的war包


将dubbo-admin-2.5.8.war上传到192.168.0.217 Linux虚拟机的tomcat的webapps下

启动tomcat,查看catalina.out输出的信息,发现无异常

此时,在Windows上的浏览器中输入http://192.168.0.217:8080/dubbo-admin-2.5.8/   ,访问dubbo管控台。

输入用户名root和密码root后,进入管控台界面,如下图。


在Eclipse中打开dubbo-demo-provider项目,修改文件dubbo-demo-provider.xml中注册中心地址为zookeeper集群中相关机器。

<dubbo:registry address="zookeeper://192.168.0.217:2181?backup=192.168.0.218:2181,192.168.0.219:2181"/>



DemoServiceImpl.java

package com.alibaba.dubbo.demo.provider;

import com.alibaba.dubbo.demo.DemoService;
import com.alibaba.dubbo.rpc.RpcContext;
import java.text.SimpleDateFormat;
import java.util.Date;

public class DemoServiceImpl implements DemoService {

    public String sayHello(String name) {
        System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "] Hello " + name + ", request from consumer: " + RpcContext.getContext().getRemoteAddress());
        return "Hello " + name + ", response form provider: " + RpcContext.getContext().getLocalAddress();
    }
}

选中dubbo-demo-provider项目中的Provider.java,右键run as --java application

package com.alibaba.dubbo.demo.provider;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Provider {

    public static void main(String[] args) throws Exception {
        //Prevent to get IPV6 address,this way only work in debug mode
        //But you can pass use -Djava.net.preferIPv4Stack=true,then it work well whether in debug mode or not
        System.setProperty("java.net.preferIPv4Stack", "true");
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"META-INF/spring/dubbo-demo-provider.xml"});
        context.start();

        System.in.read(); // press any key to exit
    }

}

此时,在浏览器中查看dubbo控制台内容





在Eclipse中打开dubbo-demo-consumer项目,修改文件dubbo-demo-consumer.xml中注册中心地址为zookeeper集群中相关机器。

<dubbo:registry address="zookeeper://192.168.0.217:2181?backup=192.168.0.218:2181,192.168.0.219:2181"/>


选中dubbo-demo-consumer项目中的Consumer.java,右键run as --java application

package com.alibaba.dubbo.demo.consumer;

import com.alibaba.dubbo.demo.DemoService;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Consumer {

    public static void main(String[] args) {
        //Prevent to get IPV6 address,this way only work in debug mode
        //But you can pass use -Djava.net.preferIPv4Stack=true,then it work well whether in debug mode or not
        System.setProperty("java.net.preferIPv4Stack", "true");
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"META-INF/spring/dubbo-demo-consumer.xml"});
        context.start();
        DemoService demoService = (DemoService) context.getBean("demoService"); // get remote service proxy

        while (true) {
            try {
                Thread.sleep(1000);
                String hello = demoService.sayHello("world"); // call remote method
                System.out.println(hello); // get result

            } catch (Throwable throwable) {
                throwable.printStackTrace();
            }
        }

    }
}

此时,在Consumer对应的console中,显示内容如下:


同时,在Provider对应的console中,显示内容如下:


其中,192.168.0.107为运行dubbo-demo-consumer与dubbo-demo-provider所在windows机器的ip地址


此时,在dubbo-admin管控台查看消费者信息



相关文章:

  • 网络编程之BIO、NIO、AIO
  • 脏读+synchronized使用
  • volatile使用
  • Can not find the tag library descriptor for http://java.sun.com/jsp/jstl/ core
  • javax.servlet.jsp.JspException cannot be resolved to a type
  • 使用wait/notify模拟Queue+ThreadLocal
  • 多线程模式中的单例
  • Semaphore信号量
  • Linux中./configure、make、make install 命令
  • 无锁并行计算框架Disruptor
  • 重入锁+读写锁+公平锁+非公平锁
  • JVM各组成部分说明+相关参数设置
  • java中垃圾回收算法+垃圾收集器
  • Linux中安装Nexus+Maven
  • Oracle数据库创建实例
  • 2017 前端面试准备 - 收藏集 - 掘金
  • Bytom交易说明(账户管理模式)
  • download使用浅析
  • emacs初体验
  • iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
  • JavaScript 基本功--面试宝典
  • Linux链接文件
  • mysql常用命令汇总
  • Python 反序列化安全问题(二)
  • python学习笔记 - ThreadLocal
  • Redux系列x:源码分析
  • Vim Clutch | 面向脚踏板编程……
  • 工作手记之html2canvas使用概述
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的?
  • 快速构建spring-cloud+sleuth+rabbit+ zipkin+es+kibana+grafana日志跟踪平台
  • 理清楚Vue的结构
  • 漂亮刷新控件-iOS
  • 区块链分支循环
  • 区块链技术特点之去中心化特性
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 3月27日云栖精选夜读 | 从 “城市大脑”实践,瞭望未来城市源起 ...
  • 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
  • ​创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化
  • ​如何在iOS手机上查看应用日志
  • # C++之functional库用法整理
  • #pragma data_seg 共享数据区(转)
  • #QT(TCP网络编程-服务端)
  • (1)SpringCloud 整合Python
  • (3)Dubbo启动时qos-server can not bind localhost22222错误解决
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (C语言)字符分类函数
  • (k8s中)docker netty OOM问题记录
  • (PHP)设置修改 Apache 文件根目录 (Document Root)(转帖)
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • **PHP二维数组遍历时同时赋值
  • .NET : 在VS2008中计算代码度量值
  • .net framwork4.6操作MySQL报错Character set ‘utf8mb3‘ is not supported 解决方法
  • .NET Micro Framework初体验
  • .Net mvc总结