如何将Spring bean对外发布,以供远程调用
已有一个名称为HelloWorld的Spring Bean,此Bean实现的接口为com.taobao.hsf.test.HelloWorld,现需让其他功能模块能远程调用此Spring Bean;
* 增加一个如下内容的Spring Bean XML:
<beans>
<bean class="com.taobao.hsf.app.spring.util.HSFSpringProviderBean">
serviceInterface必须配置[String],为服务对外提供的接口
<property name="serviceInterface">
<value>com.taobao.hsf.test.HelloWorld</value>
</property>
target必须配置[ref],为需要发布为HSF服务的spring bean id
<property name="target">
<ref bean="HelloWorld"/>
</property>
serviceVersion为可选配置[String],含义为服务的版本,默认为1.0.0
<property name="serviceVersion">
<value>1.1.0</value>不要有空白字符/回车换行
</property>
serviceName为推荐配置[String],含义为服务的名称,便于管理,默认为null
<property name="serviceName">
<value>HelloWorldService</value>
</property>
serviceDesc为可选配置[String],含义为服务的描述信息,便于管理,默认为null
<property name="serviceDesc">
<value>HelloWorldService providered by HSF</value>
</property>
serviceGroup为可选配置[String],含义为服务所属的组别,相当于此机器所在的VIP,默认为HSF
<property name="serviceGroup">
<value>HSF</value>
</property>
supportAsynCall为可选配置[true|false],含义为标识此服务是否支持持久可靠的异步调用
默认值为false,也就是不支持持久可靠的异步调用,但仍然支持非持久可靠的oneway、future以及callback方式的异步调用
<property name="supportAsynCall">
<value>false</value>
</property>
clientTimeout为可选配置[int],含义为客户端调用此服务时的超时时间,单位为ms,默认为3000ms
<property name="clientTimeout">
<value>3000</value>
</property>
clientIdleTimeout为可选配置[int],含义为客户端连接空闲的超时时间,单位为s,默认为600
<property name="clientIdleTimeout">
<value>60</value>
</property>
serializeType为可选配置[String(hessian|java)],含义为序列化类型,默认为hessian
<property name="serializeType">
<value>java</value>
</property>
methodToInjectConsumerIp为可选配置,含义为注入调用端IP的方法,这样业务服务也可以得知是哪个IP在调用,该方法的参数必须为String
<property name="methodToInjectConsumerIp">
<value>setConsumerIP</value>
</property>
methodSpecials为可选配置,含义为为方法单独配置超时时间,这样接口中的方法可以采用不同的超时时间
<property name="methodSpecials">
<list>
<bean class="com.taobao.hsf.model.metadata.MethodSpecial">
<property name="methodName" value="sum" />
<property name="clientTimeout" value="10000" />
</bean>
</list>
</property>
</bean>
</beans>
将此XML加入到Spring加载的applicationContext文件中;
按项目正常方式打包部署,启动JBoss,此HelloWorld就可被远程以HSF服务的方式调用了。
注意:序列化注意事项
如何在Spring中远程调用其他系统提供的HSF服务
在Spring中需远程调用一个接口为com.taobao.hsf.test.HelloWorld,版本为1.1.0的服务,需调用此服务的Spring bean名称定为CallHelloWorld;
* 增加一个如下内容的Spring Bean XML:
<beans>
<bean id="CallHelloWorld" class="com.taobao.hsf.app.spring.util.HSFSpringConsumerBean">
interfaceName必须配置[String],为需要调用的服务的接口
<property name="interfaceName">
<value>com.taobao.hsf.test.HelloWorld</value>
</property>
version为可选配置[String],含义为需要调用的服务的版本,默认为1.0.0
<property name="version">
<value>1.1.0</value>
</property>
group为可选配置[String],含义为需要调用的服务所在的组,默认为HSF
<property name="group">
<value>HSF</value>
</property>
methodSpecials为可选配置,含义为为方法单独配置超时时间,这样接口中的方法可以采用不同的超时时间
<property name="methodSpecials">
<list>
<bean class="com.taobao.hsf.model.metadata.MethodSpecial">
<property name="methodName" value="sum" />
<property name="clientTimeout" value="10000" />
</bean>
</list>
</property>
target为可选配置[String],含义为需调用的服务的地址和端口
主要用于单元测试环境和hsf.runmode=0的开发环境中,在运行环境下,此属性将无效,而是采用配置中心推送回来的目标服务地址信息
<property name="target">
<value>10.1.6.57:12200?_TIMEOUT=1000</value>
</property>
asyncallMethods为可选配置[List],含义为调用此服务时需要采用异步调用的方法名列表以及异步调用的方式 默认为空集合,即所有方法都采用同步调用
<property name="asyncallMethods">
<list>
格式为: name:方法名;type:异步调用类型;
type默认为oneway,支持的种类有:oneway、future、callback、reliable和reliablecallback
oneway的含义为单向的异步调用,即发起请求后不管执行结果,如果调用的目标服务器不可用,则此次调用会失败,但仅会在日志中记录
future的含义为通过Future的方式去获取请求执行的结果,例如先调用下远程的接口,接着继续做别的事情,然后再通过Future来获取结果
callback的含义为当远程服务执行完毕后,会将结果回调此处所配置的callbackhandler
reliable的含义为单向的可靠持久异步调用,和oneway的不同在于,即使调用的目标服务器暂时不可用,在其可用后仍然会保证调用成功 reliablecallback的含义为当异步可靠的执行远程服务后,会将结果可靠的回调此处所配置的callbackhandler
<value>name:save</value>
</list>
</property>
设置回调的处理器,此处理器不用实现HSF的任何接口,方法遵循以下约定即可
public void ${name}_callback(Object invokeContext, Object appResponse, Throwable t),其中${name}即为发起调用的远程服务的方法名
<property name="callbackHandler" ref="PlugServiceCallbackHandler" />
设置传递上下文的方式为接口方式,即在发起调用时先调用接口上的setInvokeContext方法传入上下文对象
<property name="interfaceMethodToAttachContext" value="setInvokeContext" />
设置传递上下文的方式为ThreadLocal对象方式,即在发起调用时通过一个ThreadLocal对象来设置上下文对象,接口方式和ThreadLocal对象方式选其一即可
<property name="invokeContextThreadLocal" ref="invokeContextThreadLocal" />
</bean>
</beans>
将此XML加入到Spring加载的ApplicatonContext文件中去;
按项目正常方式打包部署,启动JBoss,当存在接口为com.taobao.hsf.test.HelloWorld,版本为1.1.0的服务时,当调用CallHelloWorld时,就会自动的调用远程的服务
分享到:
相关推荐
在"EDAS-HSF-BOOT"项目中,我们可以看到"pandora-hsf-boot-demo"这个文件,这通常是一个示例项目,用于展示如何使用HSF-BOOT来创建和消费HSF服务。Pandora是阿里巴巴开源的分布式系统治理平台,它集成了HSF,可以...
6. **服务治理**:HSF监控服务状态,根据策略进行负载均衡和服务发现。 总的来说,"taobao-hsf.sar"文件是HSF服务的载体,它的部署意味着HSF服务可以在Tomcat环境中运行,提供高效、稳定的分布式服务。对于开发者来...
SAR文件可以理解为HSF服务的容器,包含了服务提供者的所有必要配置和服务实现,使得HSF能够快速地加载和运行服务。 HSF的核心特性包括: 1. **高性能**:HSF采用了优化的序列化协议和网络通信库,确保了服务调用的...
HSF通过接口定义、服务提供者和服务消费者的角色划分,使得服务之间的调用变得简单且透明。 EDAS,即Enterprise Distributed Application Service,是阿里巴巴云提供的PaaS平台,它提供了全面的服务治理功能,如...
3. **服务调用链跟踪**:通过HSF,可以实现完整的服务调用链路追踪,这对于问题定位和性能优化非常关键。 4. **熔断与降级**:HSF 支持服务的熔断和降级策略,当服务出现异常或压力过大时,可以自动切换到备用方案...
在HSF项目例子`hsf-master-master`中,你可以看到一个完整的HSF项目结构,包括服务提供者和服务消费者的示例代码。通过学习这个项目,你可以更好地理解HSF的工作原理和开发流程。同时,也可以借鉴其配置和编码实践,...
5. **服务调用**:HSF服务消费者通过服务ID查找并调用相应的服务,支持同步、异步、回调等多种调用模式。 6. **服务治理**:HSF提供了丰富的服务治理功能,如负载均衡、熔断、降级、超时控制等,以保障服务的稳定性...
- **统一的发布/调用方式**: 提供一致的API和服务调用模式。 - **支持多种调用方式**: 同步、异步、单向等。 - **高度可扩展性**: 支持插件化架构,可以根据需求定制服务。 - **应用场景**: 主要应用于微服务架构...
标题中的“taobao-HSF”指的是淘宝的High Speed Service(HSF)框架,它是一个高性能、高可用的服务治理框架,主要用于阿里巴巴集团内部的分布式服务调用。HSF提供了包括服务发现、服务调用、负载均衡、熔断保护等一...
实际操作中,开发者需要理解HSF的工作原理,掌握服务发布和消费的步骤,同时遵循良好的编码习惯,以确保服务的稳定性和可扩展性。在实际项目中,文档如“hsf接口发布、实现、使用流程.docx”将提供更详细的步骤和...
服务列表展示了应用发布的HSF服务和消费的HSF服务,用户可以进行服务分组配置,实现服务间的隔离。链路分析则能追踪每一次请求的完整路径,分析调用耗时和错误,助力优化性能。 容量规划功能通过自动压测评估应用的...
抑制HSF-1增强PS-341诱导胶质瘤细胞凋亡,毕云科,刘耀华,背景与目的:蛋白酶体抑制剂能影响肿瘤生长并诱导细胞凋亡。PS-341作为第一个经研究证实并被美国FDA批准用于临床的蛋白酶体抑制剂,
1. **高性能**:HSF采用了高效的序列化协议和网络通信框架,如Hession和Dubbo的Netty,确保了服务调用的低延迟和高吞吐量。 2. **服务治理**:HSF提供服务注册、发现、路由、负载均衡、熔断、降级等全面的服务治理...
这个框架主要用于实现企业级的服务化架构,提供高效、稳定、灵活的服务调用解决方案。HSF是淘宝核心的服务治理平台,它在分布式系统中扮演着关键角色,确保了业务服务之间的高效通信。 1. **服务化架构**: HSF...
1. **高性能**:HSF采用了高效的序列化机制,如Hessian和Protobuf,以及优化的网络通信库,确保服务调用的低延迟。 2. **轻量级**:HSF不需要额外的中间件支持,可以直接在Java应用服务器上运行,降低了系统的复杂度...
SF全称为High-Speed Service Framework,旨在为淘宝应用提供一个分布式的服务框架,HSF从分布式应用层面以及统一的发布/调用方式层面为大家提供支持,从而可以很容易的开发分布式的应用以及提供戒使用公用功能模块,...