阅读760 返回首页    go 微信


生产者实现服务__服务开发_开发者指南_企业级分布式应用服务 EDAS-阿里云

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

代码实现服务接口

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

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

服务配置

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

  1. 在 pom.xml 中添加如下 Maven 依赖的内容:

    1. <dependencies>
    2. <dependency>
    3. <groupId>javax.servlet</groupId>
    4. <artifactId>servlet-api</artifactId>
    5. <version>2.5</version>
    6. <scope>provided</scope>
    7. </dependency>
    8. <dependency>
    9. <groupId>com.alibaba.edas.carshop</groupId>
    10. <artifactId>itemcenter-api</artifactId>
    11. <version>1.0.0-SNAPSHOT</version>
    12. </dependency>
    13. <dependency>
    14. <groupId>org.springframework</groupId>
    15. <artifactId>spring-web</artifactId>
    16. <version>2.5.6(及其以上版本)</version>
    17. </dependency>
    18. <dependency>
    19. <groupId>com.alibaba.edas</groupId>
    20. <artifactId>edas-sdk</artifactId>
    21. <version>1.5.0</version>
    22. </dependency>
    23. </dependencies>
  2. 增加 Spring 关于 HSF 服务的配置,Demo 工程 HSF 配置文件 /resources/hsf-provider-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. <bean id="itemService" class="com.alibaba.edas.carshop.itemcenter.ItemServiceImpl" />
    11. <!-- 用 hsf:provider 标签表明提供一个服务生产者 -->
    12. <hsf:provider id=“itemServiceProvider"
    13. <!-- 用 interface 属性说明该服务为此类的一个实现 -->
    14. interface=“com.alibaba.edas.carshop.itemcenter.ItemService"
    15. <!-- 此服务具体实现的 spring 对象 -->
    16. ref=“itemService"
    17. <!-- 发布该服务的版本号,可任意指定,默认为 1.0.0 -->
    18. version=“1.0.0"
    19. <!-- 服务分组,在生产环境中必须全局唯一,且在 EDAS 控制台上的 服务市场 => 服务分组中必须存在,否则会使服务发布不成功 -->
    20. group=“testHSFGroup-09-04“>
    21. </hsf:provider>
    22. </beans>

生产者配置属性清单

关于 HSF 生产者的属性配置,除了上述内容提到的之外,还有如下的内容可供选择:

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

标签配置示例:

  1. <bean id="impl" class="com.taobao.edas.service.impl.SimpleServiceImpl" />
  2. <hsf:provider id="simpleService" interface="com.taobao.edas.service.SimpleService"
  3. ref="impl" version="1.0.1" group="test1" clientTimeout="3000" enableTXC="true"
  4. serializeType="hessian">
  5. <hsf:methodSpecials>
  6. <hsf:methodSpecial name="sum" timeout="2000" />
  7. </hsf:methodSpecials>
  8. </hsf:provider>

开发环境发布服务

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

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

在服务的提供者中,有一些额外的启动参数来改变 HSF 的行为,具体如下:

属性 描述
-Dhsf.server.port 指定 HSF 的启动服务绑定端口,默认为 12200
-Dhsf.serializer 指定 HSF 的序列化方式,默认值为 hessian
-Dhsf.server.max.poolsize 指定 HSF 的服务端最大线程池大小,默认值为 600
-Dhsf.server.min.poolsize 指定 HSF 的服务端最小线程池大小。默认值为 50

最后更新:2016-11-23 16:04:18

  上一篇:go 定义服务接口__服务开发_开发者指南_企业级分布式应用服务 EDAS-阿里云
  下一篇:go 消费者订阅服务__服务开发_开发者指南_企业级分布式应用服务 EDAS-阿里云