`

hsf服务和spring结合的用法小结

 
阅读更多

    在spring mvc 的项目开发中,由于各个系统之间需要进行数据的传递,因此,一些公司都是通过基于服务的接口方式提供数据,在淘宝,是通过hsf服务的方式开放自己应用的接口,达到数据在各个应用间的流动和互用。

 

一:hsf服务提供的方式。

  1. 在biz层(业务逻辑层),可以写一个直接直接与数据库dao层打交道的接口和实现类:

比如:

 

 

package com.taobao.tee.hsfPrivider;
public interface RuleService4CaseCenter {

	//根据案例id获取与与其关联的规则rule的信息
	public List<Map<Integer, Object>> getRuleInfoByCaseId(long caseId);
	
	//由于案例中心那边的案例id对应的案例名称会更改,所以在更改时同步到tee这边对应的规则中
	public void updateCaseName4Rule(Map<String,String> paraMap);
}

 

 

package com.taobao.tee.hsfPrivider.impl;

import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class RuleService4CaseCenterImpl implements RuleService4CaseCenter {
	
	
	private RuleDAOSqlMap ruleDAOSqlMap;
	

	public RuleDAOSqlMap getRuleDAOSqlMap() {
		return ruleDAOSqlMap;
	}

	public void setRuleDAOSqlMap(RuleDAOSqlMap ruleDAOSqlMap) {
		this.ruleDAOSqlMap = ruleDAOSqlMap;
	}

	public List<Map<Integer, Object>> getRuleInfoByCaseId(long caseId){
	
		List<RuleBean> listRuleBean=ruleDAOSqlMap.getRuleInfo4CaseCenter(caseId);
		List<Map<Integer,Object>> returnResult=new ArrayList<Map<Integer,Object>>();
		
		for(RuleBean rb:listRuleBean){
			Map<Integer, Object>  tempMap=new HashMap<Integer,Object>();
			
			RuleInfo4CaseCenter tempRuleInfo=new RuleInfo4CaseCenter();
			tempRuleInfo.setRuleId(rb.getId());
			tempRuleInfo.setRuleName(rb.getName());
			
			tempMap.put(rb.getId(), tempRuleInfo);
			returnResult.add(tempMap);
		}
		return returnResult;
	}
	
	public void updateCaseName4Rule(Map<String,String> paraMap){
		List<RuleBean> listRuleBean=ruleDAOSqlMap.getRuleInfo4CaseCenter(Long.parseLong(paraMap.get("caseId")));
		Date nowDate=new Date();
		for(RuleBean rb:listRuleBean){
			rb.setCaseName(paraMap.get("caseName"));
			rb.setUpdateTime(DateUtil.formatDateYmdHms(nowDate));
			
			//这个更新语句就包括些历史库的过程
			ruleDAOSqlMap.updateRuleById(rb);	

		}
	}
	
	
}

 

这个实现类中由于引用到了数据库操作bean类ruleDAOSqlMap提供的服务,所以在spring通过set的方式将其注入进去。

ruleDAOSqlMap在xml文件中配置,其原理是在jboss启动的时候jvm就把xml中配置的所有bean都注入到spring容器,在运行的时候外部类获取相应bean的服务。

 

2. 当然为了数据安全考虑,不会把这个biz打成jar部署到maven二方库,而是通过common层暴露这个接口给外部需要服务的接口人,所以在common层中写一个RuleService4CaseCenter 接口,其包路径和内容都跟biz中一样,然后把common层通过pom.xml配置并通过package生成jar包,通过mvn deploy方式将jar部署到

maven二方库给别人使用。

 

 

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
	<parent>
	    <groupId>com.taobao</groupId>
	    <artifactId>parent</artifactId>
	    <version>1.0.2</version>
	</parent>
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.taobao.tee</groupId>
	<artifactId>tee-common</artifactId>
	<packaging>jar</packaging>
	<name>tee-common</name>
	<version>1.0.0</version>

	<dependencies>
		<dependency>
			<groupId>commons-logging</groupId>
			<artifactId>commons-logging</artifactId>
			<version>1.1</version>
		</dependency>
	</dependencies>
</project>
 

3.提供hsf服务:

	<bean id="ruleHsfService4CaseCenter" class="com.taobao.hsf.app.spring.util.HSFSpringProviderBean" init-method="init">
	    <property name="serviceInterface">
			 <value>com.taobao.tee.hsfPrivider.RuleService4CaseCenter</value>
		</property>
		<property name="target">
			<ref bean="ruleService4CaseCenter" />
		</property>	
		<property name="serviceVersion">
			<value>${teeRuleCaller.version}</value>
		</property>
		<property name="serviceName">
			<value>ruleService4CaseCenter</value>
		</property>
		<property name="clientTimeout">
			<value>4000</value>
		</property>
	</bean>
				
   <bean id="ruleService4CaseCenter" class="com.taobao.tee.hsfPrivider.impl.RuleService4CaseCenterImpl">
	   <property name="ruleDAOSqlMap">
		   <ref bean="ruleDAOSqlMap" />
	   </property>
   </bean>
 

3. 使用方通过pom文件的依赖配置,获取common的jar包提供的RuleService4CaseCenter接口和配置的hsf服务(也就是RuleService4CaseCenter接口的实现)的消费就能得到服务。

 

二:当使用别的应用提供的接口时,一般是采用hsf服务消费的配置方式,相当是服务的消费方。

而且最好是在本地对这个服务接口做一个封装,这样的好处是解耦,一个是做一个服务方出现异常情况的一个保护操作,不至于受到提供方的接口失败影响到自己的正常业务。

 另一个好处是能在此基础上封装自己应用需要的一些方法,做到接口的自适应,满足自身业务的需求。

 

比如: 服务方通过jar包提供接口,我通过pom.xml文件配置获取这个jar包,引进这个接口到本地应用:

 

@SuppressWarnings("rawtypes")
public interface CaseService {
	/**
	 * @param data [keys]: name, flag, desc, filename, eventTime, operator, attachment
	 * @return
	 */
	public Result add(Map<String, Object> data);
	public Result update(Map<String, Object> data);
	public Result delete(long id);
	public Result<Map<String, Object>> getCaseById(long id);
	public Result<Map<String, Object>> queryCase(Map<String, Object> para);
	public Result<Map<String, Object>> queryCaseFive();
}

由于是第三方提供的hsf服务,在本地消费,需要在web层的source/main/resource目录下的配置hsf的消费配置,把他当成是bean的方式供本地其他类进行spring的注入和应用:

 

	<bean id="caseService"
       class="com.taobao.hsf.app.spring.util.HSFSpringConsumerBean" init-method="init">
      <property name="interfaceName" value="com.tcp.service.CaseService" />
      <property name="version" value="${tee.hsf.common.version}"/>     
    </bean>
	<bean id="caseService4Tee" class="com.taobao.tee.CaseService.CaseService4Tee">
		<property name="caseService">
			<ref bean="caseService" />
		</property>
	</bean>
 

然后,最好对CaseService接口bean在本地进行封装(通过依赖注入方式),以满足本地应用的特殊要求:

 

public class CaseService4Tee {
	private   CaseService caseService;

	public CaseService getCaseService() {
		return caseService;
	}

	public void setCaseService(CaseService caseService) {
		this.caseService = caseService;
	}
	
	
	//用于显示案例名称的下拉菜单
	public  List<Map<String,String>> getCaseNameByList(){
		
		Map<String ,Object> caseMap=new HashMap<String,Object>();
		caseMap.put("start", 0);
		caseMap.put("pagesize", 1000);
		List<Map<String,String>> caseList=new ArrayList<Map<String,String>>();
		try {
			Result<Map<String,Object>> caseResult =caseService.queryCase(caseMap);
			Collection<Map<String,Object>> caseCollection=caseResult.getDataList();	
	        //由于一个对象中有太多的key-value值,一些是不要的,所以只有这么循环遍历了
			
			for(Iterator<Map<String,Object>> iterator=caseCollection.iterator(); iterator.hasNext(); ){
				Map<String,Object> retMap=iterator.next();
				Map<String, String> vMap = new HashMap<String, String>();
		        vMap.put("key", retMap.get("id").toString());
		        vMap.put("display", retMap.get("name").toString());
				caseList.add(vMap);
			}
			return caseList;
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		return caseList;
	}
}
 

然后把这个封装的类在xml中配置成bean的方式,这样便于其他类对其进行依赖注入的方式进行使用:

 

	<bean id="caseService4Tee" class="com.taobao.tee.CaseService.CaseService4Tee">
		<property name="caseService">
			<ref bean="caseService" />
		</property>
	</bean>
 

 

 

 

 

分享到:
评论

相关推荐

    Springboot+HSF分布式服务框架+EDAS注册中心,实现发布订阅模式

    总结起来,Spring Boot、HSF和EDAS结合使用,能够帮助开发者构建一套健壮的分布式服务架构,实现高效的服务注册、发现和通信。发布订阅模式的引入进一步增强了系统的异步处理能力和扩展性,为大型企业的微服务架构...

    taobao-hsf.sar

    6. **服务治理**:HSF监控服务状态,根据策略进行负载均衡和服务发现。 总的来说,"taobao-hsf.sar"文件是HSF服务的载体,它的部署意味着HSF服务可以在Tomcat环境中运行,提供高效、稳定的分布式服务。对于开发者来...

    HSF服务框架共28页.pdf.zip

    HSF是基于Java开发的,它提供了一种简单、高效的方式来进行服务的发布、消费和服务治理。在本压缩包文件"HSF服务框架共28页.pdf.zip"中,我们可以期待学习到关于HSF服务框架的详细知识,包括其核心概念、工作原理、...

    EDAS-HSF-BOOT

    总之,"EDAS-HSF-BOOT"是针对HSF服务的快速启动框架,结合"pandora-hsf-boot-demo"示例,开发者可以轻松上手HSF服务的开发,实现高效、稳定的微服务架构。通过HSF-BOOT,可以充分利用EDAS的云原生能力,提高开发效率...

    HSF项目例子IDEA 与 eclipse 开发环境说明

    在HSF项目例子`hsf-master-master`中,你可以看到一个完整的HSF项目结构,包括服务提供者和服务消费者的示例代码。通过学习这个项目,你可以更好地理解HSF的工作原理和开发流程。同时,也可以借鉴其配置和编码实践,...

    HSF and 编码规范

    首先,HSF的核心概念包括服务提供者(Provider)、服务消费者(Consumer)和服务注册中心(Registry)。服务提供者通过HSF将服务暴露出去,服务消费者则通过HSF发现并调用这些服务。在服务的生命周期管理中,HSF提供...

    阿里hsf接口 sar包

    HSF(High Speed Service Framework,...总的来说,HSF接口的`.sar`包是HSF服务的重要组成部分,它封装了服务的实现和依赖,便于服务的发布和调用。在实际开发中,选择合适的`.sar`包能有效提高服务的稳定性和效率。

    taobao-hsf.tgz

    SAR文件可以理解为HSF服务的容器,包含了服务提供者的所有必要配置和服务实现,使得HSF能够快速地加载和运行服务。 HSF的核心特性包括: 1. **高性能**:HSF采用了优化的序列化协议和网络通信库,确保了服务调用的...

    taobao-HSF的两种安装方案

    标题中的“taobao-HSF”指的是淘宝的High Speed Service(HSF)框架,它是一个高性能、高可用的服务治理框架,...总的来说,HSF在Mastercard环境下的安装需要结合金融行业的特性和需求,确保服务的稳定、安全和高效。

    阿里云HSF用户开发指导手册

    4. **容错机制**:HSF支持多种容错策略,如快速失败、超时重试等,以应对网络异常和服务故障。 5. **扩展性**:HSF提供了丰富的插件接口,可以自定义实现各种功能,如服务拦截器、协议插件等。 二、HSF开发流程 ...

    hsf服务器HFS网络文件服务器V2.3Beta完美汉化版很好的一个文件传输软件,和FTP一样的稳定性,但用的确实HTTP协议,文件传输好,汉化版简单易用!...

    HFS网络文件服务器V2.3Beta完美汉化版很好的一个文件传输软件,和FTP一样的稳定性,但用的确实HTTP协议,文件传输好,汉化版简单易用!... HFS网络文件服务器V2.3Beta完美汉化版很好的一个文件传输软件,和FTP一样的...

    taobao-hsf

    4. **熔断与降级**:HSF 支持服务的熔断和降级策略,当服务出现异常或压力过大时,可以自动切换到备用方案,保证系统的稳定性和可用性。 5. **异步调用与批量调用**:对于一些耗时的操作,HSF 支持异步调用,提高...

    springcloud集成调用跟踪.docx

    Spring Cloud Sleuth 就是这样一个工具,它与 Zipkin、Kafka 和 Elasticsearch 结合,提供了强大的分布式追踪解决方案。下面将详细介绍这个集成方案。 首先,Spring Cloud Sleuth 是 Spring Cloud 的一个子项目,它...

    HSF用户手册

    - **统一的发布/调用方式**: 提供一致的API和服务调用模式。 - **支持多种调用方式**: 同步、异步、单向等。 - **高度可扩展性**: 支持插件化架构,可以根据需求定制服务。 - **应用场景**: 主要应用于微服务架构...

    分布式服务框架原理与实践(Dubbo,HSF)_李林锋著

    总之,《分布式服务框架原理与实践(Dubbo,HSF)_李林锋著》是一本深度结合理论与实践的书籍,旨在帮助读者掌握分布式服务框架的核心技术,提升在大规模分布式系统设计和运维上的专业能力。无论是初学者还是经验丰富的...

    HSF实现原理讲解

    HSF 框架的原理讲解,主要包含了知识点:rpc,动态代理,HSF可以作为微服务的基础框架进行二次开发

    淘宝好舒服 taobao-hsf

    总结来说,"淘宝好舒服"(Taobao-HSF)是一个为企业级服务架构设计的高性能框架,通过其强大的服务治理和高性能特性,助力大型分布式系统的构建和维护。了解并熟练掌握HSF,对于在阿里巴巴或其他类似环境工作的...

Global site tag (gtag.js) - Google Analytics