看着自己的园龄才知道都在这里这么久了,可是一直没发过一篇博文,评论和回复也几乎可以忽略。在这里收藏了好多博文,默默的学习,十分感谢这个平台。工作也有段时间了,开始觉得什么都知道点,什么都不会,不知道有没有这种感觉的人。
程序员的开始都是Hello World,今天在这发一篇Hello World,开始用博客记录学习和工作中的点点滴滴,于自己是种积累,也希望认识更多的朋友,即使我的文笔和技术都很烂。絮絮叨叨这么多废话,根本不是程序员的风格,第一篇Hello World也不例外,先来记录下最近工作中的一个问题,利用dubbo传输图片,第一个想到的肯定是流化,对于dubbo也不是很熟悉,就按普通的方式来传了,可是根本接收不到什么鬼。官网去转一下吧,给出的方案是利用hessian。下面就把主要的配置说下。
web.xml
<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>
Provider dubbo配置
<!-- 提供方应用信息,用于计算依赖关系 --> <dubbo:application name="dubbo_demo_provider" /> <!-- 使用zookeeper注册中心暴露服务地址 --> <dubbo:registry protocol="zookeeper" address="127.0.0.1:2181" /> <!-- 用dubbo协议在20880端口暴露服务 --> <dubbo:protocol name="dubbo" port="20880" />
<!-- contextpath 使用的是项目名称 -->
<dubbo:protocol name="hessian" port="8080" contextpath="dubbo" server="servlet"/> <!-- 声明需要暴露的服务接口 --> <dubbo:service interface="com.unj.dubbotest.provider.InputStremTest" ref="inputStremTest" protocol="hessian"/>
Consumer dubbo配置
<!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 --> <dubbo:application name="dubbo_demo_consumer" /> <dubbo:registry protocol="zookeeper" address="127.0.0.1:2181" /> <dubbo:reference id="inputStremTest" interface="com.unj.dubbotest.provider.InputStremTest" protocol="hessian" />
其实这个问题解决的过程还是有很多的点的,jar包冲突,hessioan报的奇奇怪的问题。另外还有个想说就是利用dubbo传InputStrem,我的建议是把流转换成字节数组,字节数组,字节数组,重要的事情说三遍。
具体的代码就不在这里罗列了,作为一个有开源精神和责任心的程序员公司的代码没法提供出来,自己的demo还是可以的,博客园的上传没明白,奉上百度云的地址http://pan.baidu.com/s/1qYiT4mg,关于这个有问题可以随时联系我。
后记:随让当时把这个问题顺利解决了,但是当开始全面联调时候发现普通的接口,时通时不通,报未检测到的错误,把原因打印出来后发现是“java-io-ioexception-premature-eof”,解决了好一阵,我承认这个问题我被百度误导了,居然没去看服务管理中心,一个服务同时挂在了hessian和zk的端口,发现后指定协议搞定。。。。