当前位置: 代码迷 >> 编程 >> Java学习札记29:淘宝HSF使用总结
  详细解决方案

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

热度:7813   发布时间:2013-02-26 00:00:00.0
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");



  相关解决方案