如何将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时,就会自动的调用远程的服务
分享到:
相关推荐
服务列表展示了应用发布的HSF服务和消费的HSF服务,用户可以进行服务分组配置,实现服务间的隔离。链路分析则能追踪每一次请求的完整路径,分析调用耗时和错误,助力优化性能。 容量规划功能通过自动压测评估应用的...
* 同机房优先:用于对跨机房间的HSF调用流量进行规划控制,能够保证HSF服务消费者在请求HSF服务时,优先选择与服务消费者同机房的服务提供者。 * 动态归组:将机器发布的HSF服务自动归入特定的分组。这样,不同分组...
**HSF(High Speed Service Framework)** 是阿里巴巴开源的分布式服务框架,通常与JSF不直接关联,但在Java企业级应用中,两者可能会结合使用,HSF用于服务的发布和调用,而JSF则专注于前端展示。在"JSF_hsf_...
- 产品利用阿里云的资源管理和服务体系,集成阿里巴巴中间件产品,简化企业构建分布式应用服务的复杂度。 - EDAS的主要功能包括应用生命周期管理、立体化监控、运营管控和应用诊断。 **第二小节:EDAS产品组件** - ...
这些图片可能展示了服务注册、查询和服务调用的流程,以及MongoDB在其中的数据操作过程。 “入门级RPC框架源码学习.pptx”很可能是一个幻灯片演示,详细介绍了RPC框架的基本概念、工作流程和源码解析,适合初学者...
常见的RPC框架有gRPC、Thrift、Dubbo、HSF等,每种框架都有其特点和适用场景。例如,gRPC基于HTTP/2协议,支持Protobuf协议,性能高效;Thrift由Facebook开发,提供多语言支持;Dubbo是阿里巴巴开源的高性能RPC框架...
它基于Java,提供了服务的注册、发现、调用等功能,使得服务之间可以轻松通信,提高了系统的可扩展性和可靠性。 在学习云计算技术时,不仅需要理解上述基础知识,还需要掌握云服务模型,如IaaS(基础设施即服务)、...
Dubbo ['dʌbəu] 是一个分布式服务治理框架,提供高性能的RPC远程服务调用及服务治理。 Dubbo是阿里巴巴开源的产品(2012),2018年捐献给了apache,现在是apache下的一个顶级开源项目,国内大量企业都在使用Dubbo...