MyException - 我的异常网
当前位置:我的异常网» 编程 » Java学习札记29:淘宝HSF使用总结

Java学习札记29:淘宝HSF使用总结

www.MyException.Cn  网友分享于:2013-02-20  浏览:249次
Java学习笔记29:淘宝HSF使用总结

在spring mvc 的项目开发中,由于各个系统之间需要进行数据的传递,因此,一些公司都是通过基于服务的接口方式提供数据,在淘宝,是通过hsf服务的方式开放自己应用的接口,达到数据在各个应用间的流动和互用。同时也达到了分布式开发的目的。这样的好处是显而易见的,通过HSF,我们可以将业务进行拆分,例如可以拆分为订单团队,账号团队,商品团队。而这些团队之间本身的业务会有一些依赖,这些依赖就能通过HSF来解决。


如何运行:

运行HSF项目,需要下载带有HSF 包的web容器 jetty。


HSF组成:

hsf由提供者和消费者组成。

消费者:使用接口的一方。例如我是订单团队的开发者,我在开发下单流程中,需要使用用户的账号,这个时候,我就可以通过配置好的HSF 直接调用账号团队的API。

提供者:提供接口的一方。例如是账号团队,提供给订单团队API使用。账号团队首先会提供一个interface的jar包供订单团队下载查看提供的接口,账号团队通过hsf就可以调用这些接口,而账号团队对外提供的只是interface,而具体实现还在自己这边。


提供者:

假如我要提供一个hello的服务给外部团队使用,使用HSF必须在Service层需要有interface和具体实现。具体代码如下:

HelloWorldService.java

package com.yunos.account.biz.service;

public interface HelloWorldService {
	public String get();
}

HelloWorldServiceImp.java

package com.yunos.account.biz.service.impl;

import com.yunos.account.biz.service.HelloWorldService;

public class HelloWorldServiceImpl implements HelloWorldService {

	@Override
	public String get() {
		return "Hello World";
	}

}

这个是我的代码,但是我要提供出去我写的这个代码的服务,则需要做两步工作:

1. 将interface的代码打成Jar包,放进maven仓库中,供使用者下载使用,并且interface中需要有详细的接口注释。而具体代码实现则不需要放进jar包中。

2. 配置hsf.xml文件,将代码服务提供出去。

   <bean id="helloWorldServiceImpl" class="com.xxx.xxx.biz.service.impl.HelloWorldServiceImpl" />
   <bean id="helloWorldServiceProvider" class="com.taobao.hsf.app.spring.util.HSFSpringProviderBean" init-method="init">
      <property name="serviceInterface">
         <value>com.yunos.account.biz.service.HelloWorldService</value>
      </property>
      <property name="target">
         <ref bean="helloWorldServiceImpl" />
      </property>
      <property name="serviceName">
         <value>HelloWorldService</value>
      </property>
      <property name="serviceVersion">
         <value>1.0.0.daily</value>
      </property>
      <property name="serviceGroup">
         <value>HSF</value>
      </property>
   </bean>

服务提供成功后,一般在淘宝的HSF服务管理中心可以查看到这个HSF服务。


消费者:

消费者是使用HSF服务的用户。使用HSF管理中心中用户提供的HSF服务的时候,首先需要配置一份HSF.XML的配置。

	<bean name="HelloWorldService" class="com.taobao.hsf.app.spring.util.HSFSpringConsumerBean" init-method="init">
        <property name="interfaceName" value="com.xxx.xxx.biz.service.impl.HelloWorldService" />
        <property name="version" value="1.0.1" />
 	</bean>
这个时候,就基本上说明了需要使用这个服务。

我们封装了一个函数:

public class CommonServiceImpl implements CommonService {
	
		@Autowired
		private Gson gson;
		
		/**
		 * 获取HSF ApplicationContext
		 * @return ClassPathXmlApplicationContext
		 */
		public ClassPathXmlApplicationContext getHsfApplicationContext() {
			return new ClassPathXmlApplicationContext("hsf.xml");
		}
		
		/**
		 * 返回json格式字符串
		 * @param status 状态码
		 * @param message 提示信息
		 * @param data 数据
		 * @return String
		 */
		public String returnJson(ApiReturnBo apiReturnData) {
			return gson.toJson(apiReturnData);
		}
		
}

具体使用:

ClassPathXmlApplicationContext applicationContext = commonService.getHsfApplicationContext();
HelloWorldService helloWorldService = (HelloWorldService) applicationContext.getBean("HelloWorldService");



文章评论

软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有