开发者社区> 问答> 正文

怎么体现生产者实现服务


生产者将实现服务接口以提供具体实现,除了代码实现的工作之外,由于 HSF 是基于 Spring 框架来实现的,所以还需要再定义服务发布的 XML 文件。

代码实现服务接口


在 Demo 工程的 itemcenter 中可看到具体的示例:

  1. [backcolor=transparent]package[backcolor=transparent] com[backcolor=transparent].[backcolor=transparent]alibaba[backcolor=transparent].[backcolor=transparent]edas[backcolor=transparent].[backcolor=transparent]carshop[backcolor=transparent].[backcolor=transparent]itemcenter[backcolor=transparent];
  2. [backcolor=transparent]public[backcolor=transparent] [backcolor=transparent]class[backcolor=transparent] [backcolor=transparent]ItemServiceImpl[backcolor=transparent] [backcolor=transparent]implements[backcolor=transparent] [backcolor=transparent]ItemService[backcolor=transparent] [backcolor=transparent]{
  3. [backcolor=transparent]    [backcolor=transparent]@Override
  4. [backcolor=transparent]    [backcolor=transparent]public[backcolor=transparent] [backcolor=transparent]Item[backcolor=transparent] getItemById[backcolor=transparent]([backcolor=transparent] [backcolor=transparent]long[backcolor=transparent] id [backcolor=transparent])[backcolor=transparent] [backcolor=transparent]{
  5. [backcolor=transparent]        [backcolor=transparent]Item[backcolor=transparent] car [backcolor=transparent]=[backcolor=transparent] [backcolor=transparent]new[backcolor=transparent] [backcolor=transparent]Item[backcolor=transparent]();
  6. [backcolor=transparent]        car[backcolor=transparent].[backcolor=transparent]setItemId[backcolor=transparent]([backcolor=transparent] [backcolor=transparent]1l[backcolor=transparent] [backcolor=transparent]);
  7. [backcolor=transparent]        car[backcolor=transparent].[backcolor=transparent]setItemName[backcolor=transparent]([backcolor=transparent] [backcolor=transparent]"Mercedes Benz"[backcolor=transparent] [backcolor=transparent]);
  8. [backcolor=transparent]        [backcolor=transparent]return[backcolor=transparent] car[backcolor=transparent];
  9. [backcolor=transparent]    [backcolor=transparent]}
  10. [backcolor=transparent]    [backcolor=transparent]@Override
  11. [backcolor=transparent]    [backcolor=transparent]public[backcolor=transparent] [backcolor=transparent]Item[backcolor=transparent] getItemByName[backcolor=transparent]([backcolor=transparent] [backcolor=transparent]String[backcolor=transparent] name [backcolor=transparent])[backcolor=transparent] [backcolor=transparent]{
  12. [backcolor=transparent]        [backcolor=transparent]Item[backcolor=transparent] car [backcolor=transparent]=[backcolor=transparent] [backcolor=transparent]new[backcolor=transparent] [backcolor=transparent]Item[backcolor=transparent]();
  13. [backcolor=transparent]        car[backcolor=transparent].[backcolor=transparent]setItemId[backcolor=transparent]([backcolor=transparent] [backcolor=transparent]1l[backcolor=transparent] [backcolor=transparent]);
  14. [backcolor=transparent]        car[backcolor=transparent].[backcolor=transparent]setItemName[backcolor=transparent]([backcolor=transparent] [backcolor=transparent]"Mercedes Benz"[backcolor=transparent] [backcolor=transparent]);
  15. [backcolor=transparent]        [backcolor=transparent]return[backcolor=transparent] car[backcolor=transparent];
  16. [backcolor=transparent]    [backcolor=transparent]}
  17. [backcolor=transparent]}


服务配置


上述例子主要实现了 com.alibaba.edas.carshop.itemcenter.ItemService,并在两个方法中返回了一个 Item 对象,代码开发好之后,除了必要的 web.xml 中的 Spring 常规配置,我们还需要增加相应的 Maven 依赖,同时在 Spring 配置文件使用<hsf /> 标签注册并发布该服务。具体内容如下:

  1. 在 pom.xml 中添加如下 Maven 依赖的内容:[backcolor=transparent]<dependencies>
  2. [backcolor=transparent]     [backcolor=transparent]<dependency>
  3. [backcolor=transparent]         [backcolor=transparent]<groupId>[backcolor=transparent]javax.servlet[backcolor=transparent]</groupId>
  4. [backcolor=transparent]         [backcolor=transparent]<artifactId>[backcolor=transparent]servlet-api[backcolor=transparent]</artifactId>
  5. [backcolor=transparent]         [backcolor=transparent]<version>[backcolor=transparent]2.5[backcolor=transparent]</version>
  6. [backcolor=transparent]         [backcolor=transparent]<scope>[backcolor=transparent]provided[backcolor=transparent]</scope>
  7. [backcolor=transparent]     [backcolor=transparent]</dependency>
  8. [backcolor=transparent]     [backcolor=transparent]<dependency>
  9. [backcolor=transparent]         [backcolor=transparent]<groupId>[backcolor=transparent]com.alibaba.edas.carshop[backcolor=transparent]</groupId>
  10. [backcolor=transparent]         [backcolor=transparent]<artifactId>[backcolor=transparent]itemcenter-api[backcolor=transparent]</artifactId>
  11. [backcolor=transparent]         [backcolor=transparent]<version>[backcolor=transparent]1.0.0-SNAPSHOT[backcolor=transparent]</version>
  12. [backcolor=transparent]     [backcolor=transparent]</dependency>
  13. [backcolor=transparent]     [backcolor=transparent]<dependency>
  14. [backcolor=transparent]         [backcolor=transparent]<groupId>[backcolor=transparent]org.springframework[backcolor=transparent]</groupId>
  15. [backcolor=transparent]         [backcolor=transparent]<artifactId>[backcolor=transparent]spring-web[backcolor=transparent]</artifactId>
  16. [backcolor=transparent]         [backcolor=transparent]<version>[backcolor=transparent]2.5.6(及其以上版本)[backcolor=transparent]</version>
  17. [backcolor=transparent]     [backcolor=transparent]</dependency>
  18. [backcolor=transparent]     [backcolor=transparent]<dependency>
  19. [backcolor=transparent]         [backcolor=transparent]<groupId>[backcolor=transparent]com.alibaba.edas[backcolor=transparent]</groupId>
  20. [backcolor=transparent]        [backcolor=transparent]<artifactId>[backcolor=transparent]edas-sdk[backcolor=transparent]</artifactId>
  21. [backcolor=transparent]         [backcolor=transparent]<version>[backcolor=transparent]1.5.0[backcolor=transparent]</version>
  22. [backcolor=transparent]     [backcolor=transparent]</dependency>
  23. [backcolor=transparent]</dependencies>

增加 Spring 关于 HSF 服务的配置,Demo 工程 HSF 配置文件 /resources/hsf-provider-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]     [backcolor=transparent]<bean[backcolor=transparent] [backcolor=transparent]id[backcolor=transparent]=[backcolor=transparent]"itemService"[backcolor=transparent] [backcolor=transparent]class[backcolor=transparent]=[backcolor=transparent]"com.alibaba.edas.carshop.itemcenter.ItemServiceImpl"[backcolor=transparent] [backcolor=transparent]/>
  11. [backcolor=transparent]     [backcolor=transparent]<!-- 用 hsf:provider 标签表明提供一个服务生产者 -->
  12. [backcolor=transparent]     <hsf:provider id=“itemServiceProvider"
  13. [backcolor=transparent]         [backcolor=transparent]<!-- 用 interface 属性说明该服务为此类的一个实现 -->
  14. [backcolor=transparent]         interface=“com.alibaba.edas.carshop.itemcenter.ItemService"
  15. [backcolor=transparent]         [backcolor=transparent]<!-- 此服务具体实现的 spring 对象 -->
  16. [backcolor=transparent]         ref=“itemService"
  17. [backcolor=transparent]         [backcolor=transparent]<!-- 发布该服务的版本号,可任意指定,默认为 1.0.0 -->
  18. [backcolor=transparent]         version=“1.0.0"
  19. [backcolor=transparent]         [backcolor=transparent]<!-- 服务分组 -->
  20. [backcolor=transparent]         group=“testHSFGroup-09-04“>
  21. [backcolor=transparent]     [backcolor=transparent]</hsf:provider>
  22. [backcolor=transparent]</beans>


生产者配置属性清单


关于 HSF 生产者的属性配置,除了上述内容提到的之外,还有如下的内容可供选择:
属性描述
interfaceinterface 必须配置 [String],为服务对外提供的接口。
versionversion 为可选配置 [String],含义为服务的版本,默认为 1.0.0。
groupserviceGroup 为可选配置 [String],含义为服务所属的组别,以便按组别来管理服务的配置,默认为 HSF。
clientTimeout该配置对接口中的所有方法生效,但是如果客户端通过 MethodSpecial 属性对某方法配置了超时时间,则该方法的超时时间以客户端配置为准,其他方法不受影响,还是以服务端配置为准。
serializeTypeserializeType 为可选配置 [String(hessian|java)],含义为序列化类型,默认为 hessian。
corePoolSize单独针对这个服务设置核心线程池,是从公用线程池这个大蛋糕里切一块下来。
maxPoolSize单独针对这个服务设置线程池,是从公用线程池这个大蛋糕里切一块下来。
enableTXC开启分布式事务 GTS。
refref 必须配置 [ref],为需要发布为 HSF 服务的 Spring Bean ID。
methodSpecialsmethodSpecials 为可选配置,用于为方法单独配置超时(单位 ms),这样接口中的方法可以采用不同的超时时间,该配置优先级高于上面的 clientTimeout 的超时配置,低于客户端的 methodSpecials 配置。

标签配置示例:
  1. [backcolor=transparent]<bean[backcolor=transparent] [backcolor=transparent]id[backcolor=transparent]=[backcolor=transparent]"impl"[backcolor=transparent] [backcolor=transparent]class[backcolor=transparent]=[backcolor=transparent]"com.taobao.edas.service.impl.SimpleServiceImpl"[backcolor=transparent] [backcolor=transparent]/>
  2. [backcolor=transparent]    [backcolor=transparent]<hsf:provider[backcolor=transparent] [backcolor=transparent]id[backcolor=transparent]=[backcolor=transparent]"simpleService"[backcolor=transparent] [backcolor=transparent]interface[backcolor=transparent]=[backcolor=transparent]"com.taobao.edas.service.SimpleService"
  3. [backcolor=transparent]        [backcolor=transparent]ref[backcolor=transparent]=[backcolor=transparent]"impl"[backcolor=transparent] [backcolor=transparent]version[backcolor=transparent]=[backcolor=transparent]"1.0.1"[backcolor=transparent] [backcolor=transparent]group[backcolor=transparent]=[backcolor=transparent]"test1"[backcolor=transparent] [backcolor=transparent]clientTimeout[backcolor=transparent]=[backcolor=transparent]"3000"[backcolor=transparent] [backcolor=transparent]enableTXC[backcolor=transparent]=[backcolor=transparent]"true"
  4. [backcolor=transparent]        [backcolor=transparent]serializeType[backcolor=transparent]=[backcolor=transparent]"hessian"[backcolor=transparent]>
  5. [backcolor=transparent]        [backcolor=transparent]<hsf:methodSpecials>
  6. [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]/>
  7. [backcolor=transparent]        [backcolor=transparent]</hsf:methodSpecials>
  8. [backcolor=transparent]    [backcolor=transparent]</hsf:provider>


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 运行时启动配置,运行成功后,可在轻量配置中心查询到所发布的服务,具体请参考 服务查询文档

服务提供者额外的 JVM 启动参数


在服务的提供者中,有一些额外的启动参数来改变 HSF 的行为,具体如下:
属性描述
-Dhsf.server.port指定 HSF 的启动服务绑定端口,默认为 12200。
-Dhsf.serializer指定 HSF 的序列化方式,默认值为 hessian。
-Dhsf.server.max.poolsize指定 HSF 的服务端最大线程池大小,默认值为 600。
-Dhsf.server.min.poolsize指定 HSF 的服务端最小线程池大小。默认值为 50。

展开
收起
猫饭先生 2017-10-26 10:39:53 1674 0
0 条回答
写回答
取消 提交回答
问答排行榜
最热
最新

相关电子书

更多
消息队列kafka介绍 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载