阅读677 返回首页    go 微信


消费者订阅服务__服务开发_开发者指南_企业级分布式应用服务 EDAS-阿里云

消费者的订阅从代码编写的角度分为两个部分:首先 Spring 的配置文件使用标签<hsf:consumer/>定义好一个 Bean;然后在使用的时候从 Spring 的 context 中将 Bean 取出来即可。Demo 工程的 detail 为消费者的示例,示例代码说明如下。

消费者配置

与生产者一样消费者的配置文件分为 Maven 依赖配置与 Spring 的配置,且 Maven 的依赖与生产者依赖一样,详情请参考文档生产者实现服务服务配置小节。

除了必要的 Spring 所定义的配置之外,还需要在 Spring 的配置文件中增加消费者的定义,HSF 框架将根据该配置文件去服务中心订阅所需的服务,配置文件 /resource/hsf-consumer-beans.xml 内容与释义如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
  3. xmlns:hsf="https://www.taobao.com/hsf"
  4. xmlns="https://www.springframework.org/schema/beans"
  5. xsi:schemaLocation="https://www.springframework.org/schema/beans
  6. https://www.springframework.org/schema/beans/spring-beans-2.5.xsd
  7. https://www.taobao.com/hsf
  8. https://www.taobao.com/hsf/hsf.xsd" default-autowire="byName">
  9. <!-- 消费一个服务示例 -->
  10. <hsf:consumer
  11. <!-- Bean ID,在代码中可根据此ID进行注入并使用 -->
  12. id=“item"
  13. <!-- 服务名,与服务提供者的相应配置对应,HSF 将根据 interface + version + group 查询并订阅所需服务 -->
  14. interface="com.alibaba.edas.carshop.itemcenter.ItemService"
  15. <!-- 版本号,与服务提供者的相应配置对应,HSF 将根据 interface + version + group 查询并订阅所需服务 -->
  16. version="1.0.0"
  17. <!-- 分组名,与服务提供者的相应配置对应,HSF 将根据 interface + version + group 查询并订阅所需服务 -->
  18. group="testHSFGroup">
  19. </hsf:consumer>
  20. </beans>

消费者使用服务

Demo 中的示例代码如下:

  1. public class StartListener implements ServletContextListener{
  2. @Override
  3. public void contextInitialized( ServletContextEvent sce ) {
  4. ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext( sce.getServletContext() );
  5. // 根据 Spring 配置中的Bean ID “item” 获取订阅到的服务
  6. final ItemService itemService = ( ItemService ) ctx.getBean( "item" );
  7. ……
  8. // 调用服务 ItemService 的 getItemById 方法
  9. System.out.println( itemService.getItemById( 1111 ) );
  10. // 调用服务 ItemService 的 getItemByName 方法
  11. System.out.println( itemService.getItemByName( "myname is le" ) );
  12. ……
  13. }
  14. }

消费者配置属性清单

除了示例代码中体现的属性(interface,group,version)之外,还有下表的属性配置以供选择:

属性 描述
interface interface 必须配置 [String],为需要调用的服务的接口
version version 为可选配置 [String],含义为需要调用的服务的版本,默认为1.0.0
group group 为可选配置 [String],含义为需要调用的服务所在的组,以便按组别来管理服务的配置,默认为 HSF,建议配置
methodSpecials methodSpecials 为可选配置,含义为为方法单独配置超时(单位 ms),这样接口中的方法可以采用不同的超时时间,该配置优先级高于服务端的超时配置
target 主要用于单元测试环境和 hsf.runmode=0 的开发环境中,在运行环境下,此属性将无效,而是采用配置中心推送回来的目标服务地址信息
connectionNum connectionNum 为可选配置,含义为支持设置连接到 server 连接数,默认为1,在小数据传输,要求低延迟的情况下设置多一些,会提升 TPS
clientTimeout 客户端统一设置接口中所有方法的超时时间(单位 ms),超时设置优先级由高到低是:客户端 MethodSpecial,客户端接口级别,服务端 MethodSpecial,服务端接口级别
asyncallMethods asyncallMethods 为可选配置 [List],含义为调用此服务时需要采用异步调用的方法名列表以及异步调用的方式。默认为空集合,即所有方法都采用同步调用
maxWaitTimeForCsAddress 配置该参数,目的是当服务进行订阅时,会在该参数指定时间内,阻塞线程等待地址推送,避免调用该服务时因为地址为空而出现地址找不到的情况。若超过该参数指定时间,地址还是没有推送,线程将不再等待,继续初始化后续内容。

标签配置示例:

  1. <hsf:consumer id="service" interface="com.taobao.edas.service.SimpleService"
  2. version="1.1.0" group="test1" clientTimeout="3000"
  3. target="10.1.6.57:12200?_TIMEOUT=1000" maxWaitTimeForCsAddress="5000">
  4. <hsf:methodSpecials>
  5. <hsf:methodSpecial name="sum" timeout="2000" ></hsf:methodSpecial>
  6. </hsf:methodSpecials>
  7. </hsf:consumer>

开发环境消费服务

完成代码和配置的开发任务之后,在 Eclipse 和 IDEA 中,可直接以 Ali-Tomcat 运行该服务(具体请参照文档 IDE 运行时启动配置。运行成功后,请参考开发环境搭建文档,在搭建好的 ConfigCenter 中查询到所需要消费的服务。

最后更新:2016-11-29 17:54:38

  上一篇:go 生产者实现服务__服务开发_开发者指南_企业级分布式应用服务 EDAS-阿里云
  下一篇:go HSF 特性使用__服务开发_开发者指南_企业级分布式应用服务 EDAS-阿里云