`
ccii
  • 浏览: 54971 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Dubbo

阅读更多
一. Dubbo概述
    Dubbo是Alibaba开源的一个高性能优秀的分布式服务框架,致力于提供高性能和透明化的RPC(远程过程调用协议)远程服务调用方案,以及SOA(面向服务的体系结构)服务治理方案。可以和Spring框架无缝集成。  

1. 核心部件:
(1)远程通讯——提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。
(2)集群容错——提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。
(3)自动发现——基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器。

2. Dubbo功能:
(1)透明化的远程方法调用,就像调用本地方法一样调用远程方法,只需简单配置,没有任何API侵入。
(2)软负载均衡及容错机制,可在内网替代F5等硬件负载均衡器,降低成本,减少单点。
(3)服务自动注册与发现,不再需要写死服务提供方地址,注册中心基于接口名查询服务提供者的IP地址,并且能够平滑添加或删除服务提供者。


3. 原理图如下:



Provider——暴露服务方称之为“服务提供者”。
Consumer——调用远程服务方称之为“服务消费者”。
Registry——服务注册与发现的中心目录服务称之为“服务注册中心”。
Monitor——统计服务的调用次数和调用时间的日志服务称之为“服务监控中心”。

4. dubbo示例+dubbo官方配置文档+dubbo培训ppt下载地址:http://download.csdn.net/detail/u011631266/8456945
   当然你也可以访问访问地址:http://alibaba.github.io/dubbo-doc-static/Home-zh.htm
  

二. Dubbo示例
1. 服务提供者
(1)定义服务接口: (该接口需单独打包,在服务提供方和消费方共享)
DemoService.java:
package com.unj.dubbotest.provider;

import java.util.List;

public interface DemoService {
	public String sayHello(String name);
	public List<User> getUsers();
}


User.java:
package com.unj.dubbotest.provider;

import java.io.Serializable;

public class User implements Serializable {
	private static final long serialVersionUID = 1L;
	private int age;
	private String name;
	private String sex;

	public User() {
		super();
	}

	public User(int age, String name, String sex) {
		super();
		this.age = age;
		this.name = name;
		this.sex = sex;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getSex() {
		return sex;
	}

	public void setSex(String sex) {
		this.sex = sex;
	}
}


(2)在服务提供方实现接口:(对服务消费方隐藏实现)
DemoServiceImpl.java:
package com.unj.dubbotest.provider;

import java.util.ArrayList;
import java.util.List;

import org.springframework.stereotype.Component;

@Component("demoService")
public class DemoServiceImpl implements DemoService {

	public String sayHello(String name) {
		return "Hello " + name;
	}

	public List<User> getUsers() {
		List<User> list = new ArrayList<User>();
		User u1 = new User();
		u1.setName("jack");
		u1.setAge(20);
		u1.setSex("男");

		User u2 = new User();
		u2.setName("tom");
		u2.setAge(21);
		u2.setSex("女");

		User u3 = new User();
		u3.setName("rose");
		u3.setAge(19);
		u3.setSex("女");

		list.add(u1);
		list.add(u2);
		list.add(u3);
		return list;
	}
}


(3)用Spring配置声明暴露服务
spring.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:tx="http://www.springframework.org/schema/tx"
	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"
	xmlns:util="http://www.springframework.org/schema/util"
	xsi:schemaLocation="
          http://www.springframework.org/schema/beans
          http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
       http://www.springframework.org/schema/tx
       http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
       http://www.springframework.org/schema/aop
       http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
       http://www.springframework.org/schema/util
       http://www.springframework.org/schema/util/spring-util-3.1.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context-3.0.xsd">

	<context:property-placeholder location="classpath*:*.properties" />
	<context:component-scan base-package="com.unj.dubbotest.provider" />
	<context:annotation-config />
	
	<import resource="classpath*:/provider_registry.xml"></import>

</beans>


dubbo.properties:
dubbo.application.name=dubbo_demo_provider
dubbo.registry.address=127.0.0.1:2181
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880

dubbo.own.version=0.0.1


provider_registry.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://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:application name="dubbo_demo_provider" />

	<!-- 使用multicast广播注册中心暴露服务地址 <dubbo:registry address="multicast://224.5.6.7:1234" /> -->

	<!-- 使用zookeeper注册中心暴露服务地址 -->
	<dubbo:registry protocol="zookeeper" address="${dubbo.registry.address}" />

	<!-- 用dubbo协议在20880端口暴露服务 -->
	<dubbo:protocol name="${dubbo.protocol.name}" port="${dubbo.protocol.port}" />

	<!-- 声明需要暴露的服务接口 -->
	<dubbo:service interface="com.unj.dubbotest.provider.DemoService"
		ref="demoService" version="${dubbo.own.version}"/>

</beans>


log4j.properties:
log4j.rootLogger=info, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n


(4)注册服务
Provider.java:
package com.unj.dubbotest.provider;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Provider {
	public static void main(String[] args) throws Exception {
		ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
				new String[] { "spring.xml" });
		context.start();

		System.in.read(); // 为保证服务一直开着,利用输入流的阻塞来模拟
	}
}


2. 服务消费者
(1)引入服务提供方提供的接口(DemoService.java,User.java)

(2)用Spring配置订阅服务
applicationContext.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://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:application name="dubbo_demo_consumer" />

	<!-- 使用multicast广播注册中心暴露服务地址 -->
	<!-- <dubbo:registry address="multicast://224.5.6.7:1234" /> -->
	<dubbo:registry protocol="zookeeper" address="127.0.0.1:2181" />

	<!-- 生成远程服务代理,可以像使用本地bean一样使用demoService -->
	<dubbo:reference id="demoService"
		interface="com.unj.dubbotest.provider.DemoService" version="0.0.1"/>

</beans>


log4j.properties:
log4j.rootLogger=info, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n


(3)调用服务
Consumer.java:
package com.alibaba.dubbo.demo.pp;

import java.util.List;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.unj.dubbotest.provider.DemoService;
import com.unj.dubbotest.provider.User;

public class Consumer {

	public static void main(String[] args) throws Exception {
		ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
				new String[] { "applicationContext.xml" });
		context.start();

		DemoService demoService = (DemoService) context.getBean("demoService");
		String hello = demoService.sayHello("tom");
		System.out.println(hello);

		List<User> list = demoService.getUsers();
		if (list != null && list.size() > 0) {
			for (int i = 0; i < list.size(); i++) {
				System.out.println(list.get(i));
			}
		}
		System.in.read();
	}
}


3. 运行步骤
(1)安装并启动注册中心(Zookeeper)。
(2)运行Provider
使用如下命令查看:
D:\Test\zookeeper-3.4.6\bin>zkCli.cmd (zk未在本机时使用:D:\Test\zookeeper-3.4.6\bin>zkCli.cmd -server 172.24.2.35:2181)
[zk: localhost:2181(CONNECTED) 5] ls /du
bbo
[com.unj.dubbotest.provider.DemoService]
[zk: localhost:2181(CONNECTED) 6] ls /dubbo/com.unj.dubbotest.provider.DemoServi
ce
[consumers, routers, providers, configurators]
[zk: localhost:2181(CONNECTED) 9] ls /dubbo/com.unj.dubbotest.provider.DemoServi
ce/providers
[dubbo%3A%2F%2F10.28.160.21%3A20880%2Fcom.unj.dubbotest.provider.DemoService%3Fa
nyhost%3Dtrue%26application%3Ddubbo_demo_provider%26dubbo%3D2.4.9%26interface%3D
com.unj.dubbotest.provider.DemoService%26methods%3DsayHello%2CgetUsers%26pid%3D3
276%26revision%3D0.0.1%26side%3Dprovider%26timestamp%3D1424854254629%26version%3
D0.0.1]

(3)运行Consumer
使用如下命令查看:
[zk: localhost:2181(CONNECTED) 35] ls /dubbo/com.unj.dubbotest.provider.DemoServ
ice/consumers
[consumer%3A%2F%2F10.28.160.21%2Fcom.unj.dubbotest.provider.DemoService%3Fapplic
ation%3Ddubbo_demo_consumer%26category%3Dconsumers%26check%3Dfalse%26connected%3
Dtrue%26dubbo%3D2.4.9%26interface%3Dcom.unj.dubbotest.provider.DemoService%26met
hods%3DsayHello%2CgetUsers%26pid%3D2904%26revision%3D0.0.1%26side%3Dconsumer%26t
imestamp%3D1424856806014%26version%3D0.0.1]
  • 大小: 24 KB
0
0
分享到:
评论

相关推荐

    dubbo视频教程|基于Dubbo的分布式系统架构实战

    Dubbo是阿里巴巴开源的分布式服务化治理框架(微服务框架),久经阿里巴巴电商平台的大规模复杂业务的高并发考验,到目前为止Dubbo仍然是开源界中体系最完善的服务化治理框架,因此Dubbo被国内大量的的互联网公司和...

    尚硅谷最新dubbo视频

    本套视频从分布式系统的基本概念出发,由浅入深,讲解了RPC原理,Dubbo基本使用,Dubbo高可用场景以及Dubbo原理,涉及了分布式系统中服务注册、服务发现、负载均衡、灰度发布、集群容错、服务降级等核心概念的讲解及...

    dubbo接口测试调试工具

    前段时间排查某问题的时候,想要快速知道某些dubbo接口(三无)的响应结果,但不想启动项目(因为这些项目不是你负责的,不会部署而且超级笨重),也不想新建一个dubbo客户端项目(占地方),也不想开telnet客户端...

    dubbo找不到dubbo.xsd报错

    构建dubbo项目的时候会遇到: Multiple annotations found at this line: - cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element 'dubbo:application'. - ...

    dubbo-2.5.8-API文档-中英对照版.zip

    赠送jar包:dubbo-2.5.8.jar; 赠送原API文档:dubbo-2.5.8-javadoc.jar; 赠送源代码:dubbo-2.5.8-sources.jar; 赠送Maven依赖信息文件:dubbo-2.5.8.pom; 包含翻译后的API文档:dubbo-2.5.8-javadoc-API文档-...

    dubbo-2.8.4.jar

    at com.alibaba.dubbo.remoting.exchange.support.DefaultFuture.returnFromResponse(DefaultFuture.java:190) at com.alibaba.dubbo.remoting.exchange.support.DefaultFuture.get(DefaultFuture.java:110) at ...

    dubbo示例代码dubbo-sample

    dubbo示例代码dubbo-sample

    DubboDemo.rar

    Dubbo是 [1] 阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 [2] Spring框架无缝集成。 Dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了三大...

    Dubbo培训与实战

    首先,从知识层面对Dubbo有一个了解和认识,请看《Dubbo培训与实战.pptx》,然后把Dubbo用到实际项目中来,请看实例代码《Dubbo实例代码(Sping+Dubbo+Maven).zip》,里面包括dubboDemoProvide和dubboDemoConsumer...

    dubbo-admin-2.5.4.war

    dubbo-admin-2.5.4提供支持JDK1.7及JDK1.8的War包 Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合)。从服务模型的角度来看...

    dubbo-zookeeper springSpringMVC 一个生产者,多消费者 例子

    1.dubbo-zookeeper springSpringMVC 一个生产者,多消费者 例子 2. ssm-dubbo 源码 ssm-tomcat 里放的是 warbao ,程序包 zookeeper-3.4.9 zookeeper 免安装包 设置都是默认的 zookeeper 端口 2181 dubbo-...

    dubbo admin管理平台及dubbo monitor监控中心

    Dubbo是Alibaba开源的分布式服务框架,我们可以非常容易地通过Dubbo来构建分布式服务,并根据自己实际业务应用场景来选择合适的集群容错模式,这个对于很多应用都是迫切希望的,只需要通过简单的配置就能够实现...

    incubator-dubbo-dubbo-2.6.1

    incubator-dubbo-dubbo-2.6.1

    【BAT必备】dubbo面试题

    【BAT必备】dubbo面试题【BAT必备】dubbo面试题【BAT必备】dubbo面试题【BAT必备】dubbo面试题【BAT必备】dubbo面试题【BAT必备】dubbo面试题【BAT必备】dubbo面试题【BAT必备】dubbo面试题【BAT必备】dubbo面试题...

    dubbo资源 dubbo-admin dubbo demo

    dubbo资源 dubbo-admin dubbo demo

    Dubbo入门_实战

    Dubbo入门_实战  使用dubbo优化单点登录系统、 Dubbo的架构 监控中心

    dubbo捕获自定义异常_dubbo异常捕获_dubbo异常_自定义异常_捕捉异常_

    解决dubbo接口自定义异常的捕捉问题,dubbo消费者可以捕捉到提供者所抛出的自定义异常。

    Spring Boot + Nacos + Dubbo + Dubbo Admin

    Spring Boot + Nacos + Dubbo + Dubbo Admin,详见:https://blog.csdn.net/z1353095373/article/details/121704570

    dubbo.xsd文件

    &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?... targetNamespace="http://code.alibabatech.com/schema/dubbo"&gt; &lt;xsd:import namespace="http://www.springframework.org/schema/tool"/&gt;

Global site tag (gtag.js) - Google Analytics