如何将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服务
最新推荐文章于 2023-02-21 19:27:31 发布