dubbo处理文件上传

标签: dubbo 文件 上传 | 发表时间:2013-12-10 23:02 | 作者:dreamoftch
出处:http://www.iteye.com

 

 

 

 

dubbo和hessian的maven依赖:

 

		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>dubbo</artifactId>
			<version>2.5.3</version>
		</dependency>
		<dependency>
			<groupId>com.caucho</groupId>
			<artifactId>hessian</artifactId>
			<version>4.0.7</version>
		</dependency>

 

 

 

服务提供者(项目名称:provider)

 

首先是web.xml配置(使用spring):

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath*:applicationContext.xml</param-value>
	</context-param>
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
	<servlet>
		<servlet-name>dubbo</servlet-name>
		<servlet-class>com.alibaba.dubbo.remoting.http.servlet.DispatcherServlet</servlet-class>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>dubbo</servlet-name>
		<url-pattern>/*</url-pattern>
	</servlet-mapping>

</web-app>

 

 

 

然后是服务接口:

 

package com.tch.test.dubbo.service;

import java.io.InputStream;

public interface DemoService {
	
    String sayHello(String name);

    /**
     * 处理上传
     * @param in
     * @return
     */
    String upload(String destPath,InputStream in);


}

 

 

服务实现类:

 

package com.tch.test.dubbo.service;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;

public class DemoServiceImpl implements DemoService {

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

	@Override
	public String upload(String destPath,InputStream in) {
		try {
			FileOutputStream out = new FileOutputStream("E:\\temp\\a.js");
			int n = -1;
			byte[] b = new byte[10240];
			while((n=in.read(b)) != -1){
				System.out.println(new String(b,0,n,"utf-8"));
				out.write(b, 0, n);
			}
			out.close();
			out.flush();
			in.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return "upload complete !";
	}

}

 

 

最重要的applicationContext.xml :

 

参考: dubbo hessian协议

 

<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
				http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
        			http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd
				http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
	<!-- 提供方应用信息,用于计算依赖关系 -->
    <dubbo:application name="hello-world-app"  />
    <!-- 使用multicast广播注册中心暴露服务地址 -->
    <dubbo:registry address="multicast://224.5.6.7:1234" />
    <!-- 用hessian协议在8080(servlet容器的端口)端口暴露服务,contextpath是项目名称,server这里是使用的web.xml里面配置的servlet -->
    <dubbo:protocol name="hessian" port="8080" contextpath="dubbo" server="servlet"/>
    <!-- 声明需要暴露的服务接口 -->
    <dubbo:service interface="com.tch.test.dubbo.service.DemoService" ref="demoService" />
    <!-- 和本地bean一样实现服务 -->
    <bean id="demoService" class="com.tch.test.dubbo.service.DemoServiceImpl" />
	
</beans>

 

启动项目之后,就同时启动了服务。。。

 

 

 

 

下面是 consumer :

 

首先是服务接口:

 

package com.tch.test.dubbo.service;

import java.io.InputStream;

public interface DemoService {
	
    String sayHello(String name);

    /**
     * 上传
     * @param in
     */
    String upload(String destPath,InputStream in);
    
}

 

 

 

然后是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="consumer-of-helloworld-app" />

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

	<!-- 生成远程服务代理,可以和本地bean一样使用demoService -->
	<dubbo:reference id="demoService"
		interface="com.tch.test.dubbo.service.DemoService" />

</beans>

 

 

好了,开始调用provider提供的服务:

 

package com.tch.test.dubbo.service;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;

import org.springframework.context.support.ClassPathXmlApplicationContext;

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"); // 获取远程服务代理
        sayHello(demoService);  //sayHello
        upload(demoService);    //upload
        
        context.close();
    }
    //调用sayHello
    public static void sayHello(DemoService demoService){
    	String result = demoService.sayHello(" dubbo "); // 执行远程方法
        System.out.println(result); // 显示调用结果
    }
    //调用upload
    public static void upload(DemoService demoService) throws FileNotFoundException{
    	String result = demoService.upload("E:\\temp\\a.js",new FileInputStream("E:\\temp\\dubbo.xml")); // 执行远程方法
        System.out.println(result); // 显示调用结果
    }
    

}

 

 

 

就可以看到上传成功的结果了。。。

 

 

 

 

 

 



已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [dubbo 文件 上传] 推荐:

dubbo处理文件上传

- - 开源软件 - ITeye博客
dubbo和hessian的maven依赖:. 服务提供者(项目名称:provider). 首先是web.xml配置(使用spring):. 最重要的applicationContext.xml :. 参考: dubbo hessian协议. .

[原]Dubbo实例

- -
Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案. Remoting: 网络通信框架,实现了sync-over-async 和 request-response 消息机制. RPC: 一个远程过程调用的抽象,支持负载均衡、容灾和集群功能. Registry: 服务目录框架用于服务的注册和服务事件发布和订阅.

DUBBO用户指南

- - 开源软件 - ITeye博客
随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进. 当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本. 此时,用于简化增删改查工作量的 数据访问框架(ORM) 是关键. 当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆成互不相干的几个应用,以提升效率.

dubbo 问题整理

- - 行业应用 - ITeye博客
1 面试题:Dubbo中zookeeper做注册中心,如果注册中心集群都挂掉,发布者和订阅者之间还能通信么. 可以的,启动dubbo时,消费者会从zk拉取注册的生产者的地址接口等数据,缓存在本地. 每次调用时,按照本地存储的地址进行调用. 注册中心对等集群,任意一台宕掉后,会自动切换到另一台 . 注册中心全部宕掉,服务提供者和消费者仍可以通过本地缓存通讯 .

dubbo服务降级实现dubbo-plus/circuitbreaker at master · dubboclub/dubbo-plus · GitHub

- -
向注册中心写入动态配置覆盖规则:(通过由监控中心或治理中心的页面完成). 表示消费方对该服务的方法调用都直接返回null值,不发起远程调用. 屏蔽不重要服务不可用时对调用方的影响. 表示消费方对该服务的方法调用在失败后,再返回null值,不抛异常. 容忍不重要服务不稳定时对调用方的影响. Dubbo支持服务降级,并且支持当服务出现异常的时候进行服务降级处理,但是存在一下几个缺陷.

多文件上传

- - BlogJava-首页技术区
多文件上传 jquery的插件. 使用的方法  导入 jquery.js 及 jquery.MultiFile.js ,. 方式一: 后台是文件数组  .  private File[] upload; // 与jsp表单中的名称对应. 在 form 中加入 即可.

学习dubbo源代码

- - Java - 编程语言 - ITeye博客
1、Dubbo与Spring的整合. Dubbo在使用上可以做到非常简单,不管是Provider还是Consumer都可以通过Spring的配置文件进行配置,配置完之后,就可以像使用springbean一样进行服务暴露和调用了,完全看不到dubboapi的存在. 这是因为dubbo使用了spring提供的可扩展Schema自定义配置支持.

dubbo的安装和使用

- - CSDN博客云计算推荐文章
随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进. 当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本. 此时,用于简化增删改查工作量的 . 数据访问框架(ORM) 是关键.

Dubbo基本原理机制

- - 开源软件 - ITeye博客
转自:http://blog.csdn.net/paul_wei2008/article/details/19355681 分布式服务框架:. –高性能和透明化的RPC远程服务调用方案. -Apache MINA 框架基于Reactor模型通信框架,基于tcp长连接. Dubbo缺省协议采用单一长连接和NIO异步通讯,.

dubbo中的Filter顺序

- - 互联网 - ITeye博客
最近发现dubbo的小 bug,顺便整理了一下dubbo中的Filter调用顺序及如何确定的. 服务提供方的过滤器被调用顺序:. EchoFilter->ClassLoaderFilter->GenericFilter->ContextFilter->(这4个是在代码中指定的). 服务消费方的过滤器顺序:.