开发者社区> 问答> 正文

消费者订阅服务是什么?


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

消费者配置


与生产者一样消费者的配置文件分为 Maven 依赖配置与 Spring 的配置,且 Maven 的依赖与生产者依赖一样,详情请参考文档 生产者实现服务 的 [backcolor=transparent]服务配置 小节。
除了必要的 Spring 所定义的配置之外,还需要在 Spring 的配置文件中增加消费者的定义,HSF 框架将根据该配置文件去服务中心订阅所需的服务,配置文件 /resource/hsf-consumer-beans.xml 内容与释义如下:

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


消费者使用服务


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


消费者配置属性清单


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


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


pom 中添加 edas-sdk 依赖

  1. [backcolor=transparent]<dependency>
  2. [backcolor=transparent]    [backcolor=transparent]<groupId>[backcolor=transparent]com.alibaba.edas[backcolor=transparent]</groupId>
  3. [backcolor=transparent]    [backcolor=transparent]<artifactId>[backcolor=transparent]edas-sdk[backcolor=transparent]</artifactId>
  4. [backcolor=transparent]    [backcolor=transparent]<version>[backcolor=transparent]1.6.1[backcolor=transparent]</version>
  5. [backcolor=transparent]</dependency>


开发环境消费服务


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

展开
收起
猫饭先生 2017-10-26 10:40:22 2943 0
1 条回答
写回答
取消 提交回答
  • Re消费者订阅服务是什么?
    怎么多乱的文章都能搜到啊.....
    2018-08-01 16:19:40
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
消息队列 Kafka 版差异化特性 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载