• 关于

    hsf服务

    的搜索结果

回答

错误代码简介 消费端通过 CSB 调用服务时,整个链路上可以分成三个阶段: 服务消费端应用以消费端协议访问 CSB。 CSB 处理转发服务调用请求。 CSB 以提供端协议访问服务提供端应用。 这三个阶段都可能出错,服务消费端收到错误信息时要能区别是在哪个阶段发生了什么错误,需要考虑如何通过消费端协议定义的错误信息结构来体现。消费端协议定义的错误信息结构多种多样,也可能有各种限制,但是通常都至少会提供错误码和错误描述,而且错误码应该都有保留或者未占用的、代表“其它错误”的编码(下称:逃逸代码 Escape Code)。基于这个前提,可以定义如下约定: 阶段1发生的错误不用做任何处理。 阶段2及之后发生的错误,约定使用消费端协议的某个 Escape Code,具体CSB错误码和描述以固定格式体现在消费端错误描述内,如[CSB Error Code] CSB Error Message。 阶段3发生的错误,同上处理,但是 CSB Error Code 也提供 Escape Code 表示这是一个阶段 3 错误,且 CSB Error Message 的格式定义为[提供端协议错误码] 提供端协议错误信息。 说明 CSB 需要了解提供端协议的错误码中哪些表示正常访问,以免将成功的访问当做错误处理。 CSB 错误码列表 其中 800 为 CSB Escape Code 。 错误代码 错误描述信息 说明 200 SUCCESS 请求处理成功 500 platform error 平台处理错误 501 access permission deny 没有权限访问 502 signature verification failed 验签失败 503 service not registed 服务没有注册 504 api name not found 该服务没有找到 505 access key not found Access Key 没有在参数里找到 506 signature not found 签名没有在参数里面找到 507 required parameter is missing 参数丢失 508 need to access security channel 需要能访问安全通道 509 timestamp not found 时间戳在参数里面没有找到 510 time expired 访问过期 511 invoke timeout 调用 HSF 服务超时 512 write channel error 转发 HSF 协议时,连接通道出错 513 connection has broken 连接已经断开 514 hsf address not found 调用时没有找到 HSF 服务地址 515 hsf process error 调用 HSF 出错 516 hoh process error 级联调用 HSF 出错 517 json2hsf process error HTTP 调用 HSF 失败 518 service metadata is null 发布的 HSF 服务信息为空 519 access permission deny by black list 访问被黑名单拒绝 520 can not found service metadata 调用是没有从缓存中找到 HSF 服务的元信息 521 access permission deny, ip is not in white list 访问者的 IP 没有加入白名单 522 this invoke protocol not open 该服务没有开放成此协议 523 access permission deny due to strict accesskey and ip white list 此凭证设置了白名单,需要访问者 IP 加入到白名单里 524 exceed access limition, try later 触发限流 800 service server error 服务调用出错 801 connect to service server error 连接不到服务提供者 802 serivce has offline from server 此服务已经下线 803 serivce has been stopped 服务已经在 CSB 上关闭了 99 hsf escap code HSF 逃逸错误代码 900 Unknown code 未知错误代码 1001 bad soap request SOAP 消息不正确 1002 bad response 返回结果不正确 1003 bad hsf subscribe info 错误的 HSF 订阅信息 1004 hsf invoke exception HSF 调用异常 1005 bad input soap parsing 输入 SOAP 消息解析失败 1006 bad output soap parsing 输出的 SOAP 消息解析失败 1007 bad invoke restful provider HTTP 服务 Provider 异常 1008 json2ws process error, bad input restufl/json request HTTP 调用 WS 失败,HTTP 请求不正确 1009 json2ws process error 调用 WS 服务失败 10001 process response result data filter failed 结果过滤处理结果失败 HSF 错误代码 错误代码 错误描述信息 说明 20 OK HSF 调用成功 30 client timeout 调用端超时 31 server timeout 服务端超时 40 bad request 请求不合法 50 bad response 返回结果不合法 60 service not found 服务没有找到 70 service error 服务错误 79 connection has broken 连接已经断开 80 server error 服务提供端错误 81 Thread pool is busy 线程池繁忙 82 Communication error 通信异常 84 request is limited 请求被限流 88 server will close soon 服务很快就要关闭 90 client error 消费端错误 91 Unknown error 未知错误 消费端协议 Escape Code 列表 消费端协议 Escape Code HTTP类 500 HSF 99 示例 消费端应用以HSF协议通过CSB访问一个后端HSF服务,三个阶段的错误示例如下: 第一阶段错误 CSB 的 HSF 协议处理器发现消费端发出的 HSF 请求格式不正确,以 HSF 错误 40 bad request 直接回复消费端。 第二阶段错误 CSB 在处理消费端发出的 HSF 请求时,发现所访问的 API 并不存在,以 HSF 错误 99 [504]所访问的服务API(taobao.unknown)在实例(instance0733)上不存在 回复消费端。其中 99 为消费端协议 HSF 的 Escape Code。 第三阶段错误 CSB 处理消费端发出的 HSF 请求,在访问后端服务提供者时,HSF 服务框架报错 60 service not found,CSB 以HSF 错误 99 [800][60] service not found 回复消费端。其中 99 为消费端协议的 Escape Code,800 为 CSB 的 Escape Code。 第三阶段错误 CSB 处理消费端发出的 HSF 请求,在访问后端服务提供者时,HSF 服务提供应用出错,因为 HSF 框架不支持返回具体应用逻辑错误信息,仅仅报错为 80 server error,CSB 以 HSF错误 99 [800][80] server error 回复消费端。这里具体的应用错误只能在应用服务提供端看到,如果后端是其它比较开放的协议框架(用 X 代替),具体的应用错误信息可能可以报给 CSB,这样 CSB 才能返回更具体的错误信息 99 [800][X-Code] X-Message。

保持可爱mmm 2020-03-28 17:48:50 0 浏览量 回答数 0

回答

报错信息 WARN taobao.hsf - HSF 服务:com.taobao.hsf.jar.test.HelloWorldService:1.0.zhouli 重复初始化! 解决方案 HSF 在一个进程中,由服务名和版本号唯一区分一个服务。不支持同一个进程发布或订阅同个服务名、同个版本号,但不同组别的服务,请检查配置文件。例如配置文件中同时存在: com.taobao.hsf.jar.test.HelloWorldService 1.0 groupA com.taobao.hsf.jar.test.HelloWorldService 1.0 groupB

保持可爱mmm 2020-03-28 22:24:27 0 浏览量 回答数 0

问题

[HSF-Consumer] 未找到需要调用的服务的目标地址

桃根仙 2019-12-01 19:26:07 3250 浏览量 回答数 1

阿里云高校特惠,助力学生创业梦!0元体验,快速入门云计算!

学生动手场景应用,快速了解并掌握云服务器的各种新奇玩法!

回答

您可以使用 Pandora Boot 开发 HSF 应用,实现服务注册发现、异步调用,并完成单元测试。相比使用 ali-tomcat 部署 HSF 的 WAR 包,Pandora Boot部署的是 JAR 包。直接将 HSF 应用打包成 FatJar,这更加符合微服务的风格,不需要依赖外置的 ali-tomcat 也使得应用的部署更加灵活。Pandora Boot 可以认为是 Spring Boot 的增强。 前提条件 在开发应用前,您已经完成以下工作: 配置 SAE 的私服地址和轻量级配置及注册中心 启动轻量级配置及注册中心 服务注册与发现 介绍如何使用 Pandora Boot 开发应用(包括服务提供者和服务消费者)并实现服务注册与发现。 注意 严禁在应用启动时调用 HSF 远程服务,否则会导致启动失败。 Demo 源码下载:https://github.com/aliyun/alibabacloud-microservice-demo/tree/master/microservice-doc-demo/hsf-pandora-boot 使用 Git 克隆整个项目,并在 microservice-doc-demo/hsf-pandora-boot 文件夹内可以找到本文使用的示例工程。 创建服务提供者。 创建命名为 hsf-pandora-boot-provider的 Maven 工程。 在 pom.xml 中引入需要的依赖。 <java.version>1.8</java.version> <spring-boot.version>2.1.6.RELEASE</spring-boot.version> <pandora-boot.version>2019-06-stable</pandora-boot.version> com.alibaba.boot pandora-hsf-spring-boot-starter org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-dependencies ${spring-boot.version} pom import com.taobao.pandora pandora-boot-starter-bom ${pandora-boot.version} pom import org.apache.maven.plugins maven-compiler-plugin 3.7.0 1.8 1.8 com.taobao.pandora pandora-boot-maven-plugin 2.1.11.8 package repackage 虽然 HSF 服务框架并不依赖于 Web 环境,但是在应用的生命周期过程中需要使用到 Web 相关的特性,所以需要添加 spring-boot-starter-web 的依赖。 pandora-hsf-spring-boot-starter 实现了 HSF 配置的自动装配。pandora-boot-maven-plugin 是 Pandora Boot 提供的 maven 打包插件,可以将 Pandora Boot HSF 工程编译为可执行的 FatJar,并在 EDAS Container 中部署运行。 dependencyManagement 中包含了 spring-boot-dependencies 和 pandora-boot-starter-bom 两个依赖,分别负责 Spring Boot 和 Pandora Boot 相关依赖的版本管理,设置之后,您的工程无需将 parent 设置为 spring-boot-starter-parent。 定义服务接口,创建一个接口类 com.alibaba.edas.HelloService。 HSF 服务框架基于接口进行服务通信,当接口定义好之后,生产者将通过该接口实现具体的服务并发布,消费者也是基于此接口去订阅和消费服务。 public interface HelloService { String echo(String string); } 接口 com.alibaba.edas.HelloService 提供了 echo 方法。 添加服务提供者的具体实现类 EchoServiceImpl ,并通过注解方式发布服务。 @HSFProvider(serviceInterface = HelloService.class, serviceVersion = "1.0.0") public class HelloServiceImpl implements HelloService { @Override public String echo(String string) { return string; } } 在 HSF 应用中,接口名和服务版本才能唯一确定一个服务,所以在注解 HSFProvider 中的需要添加接口名 com.alibaba.edas.HelloService 和服务版本1.0.0。 说明 注解中的配置拥有高优先级。 如果在注解中没有配置,服务发布时会优先在 resources/application.properties 文件中查找这些属性的全局配置。 如果注解和 resources/application.properties 文件中都没有配置,则会使用注解中的默认值。 在 resources 目录下的 application.properties 文件中配置应用名和监听端口号。 spring.application.name=hsf-pandora-boot-provider server.port=8081 spring.hsf.version=1.0.0 spring.hsf.timeout=3000 说明 建议将服务版本(spring.hsf.version)和服务超时(spring.hsf.timeout)都统一配置在 application.properties 中。 添加服务启动的 main 函数入口。 @SpringBootApplication public class HSFProviderApplication { public static void main(String[] args) { // 启动 Pandora Boot 用于加载 Pandora 容器 PandoraBootstrap.run(args); SpringApplication.run(HSFProviderApplication.class, args); // 标记服务启动完成,并设置线程 wait。防止业务代码运行完毕退出后,导致容器退出。 PandoraBootstrap.markStartupAndWait(); } } 表 1. 服务提供者属性列表 属性 是否必配 描述 类型 默认值 serviceInterface 是 服务对外提供的接口 Class java.lang.Object serviceVersion 否 服务的版本号 String 1.0.0.DAILY serviceGroup 否 服务的组名 String HSF clientTimeout 否 该配置对接口中的所有方法生效,但是如果客户端通过 methodSpecials 属性对某方法配置了超时时间,则该方法的超时时间以客户端配置为准。其他方法不受影响,还是以服务端配置为准(单位 ms) int -1 corePoolSize 否 单独针对这个服务设置最小活跃线程数,从公用线程池中划分出来 int 0 maxPoolSize 否 单独针对这个服务设置最大活跃线程数,从公用线程池中划分出来 int 0 delayedPublish 否 是否延迟发布 boolean false includeFilters 否 用户可选的自定义过滤器 String[] 空 enableTXC 否 是否开启分布式事务 GTS boolean false serializeType 否 服务接口序列化类型,hessian 或者 java String hessian supportAsynCall 否 是否支持异步调用 String false 表 2. 服务创建及发布限制 名称 示例 限制大小 是否可调整 {服务名}:{版本号} com.alibaba.edas.testcase.api.TestCase:1.0.0 最大192字节 否 组名 aliware 最大32字节 否 一个Pandora应用实例发布的服务数 N/A 最大800个 是,可在应用基本信息页面单击应用设置右侧的设置,并在下拉列表中选择 JVM,然后在弹出的应用设置对话框中选择自定义 > 自定义参数,在输入框中添加 -DCC.pubCountMax=1200属性参数(该参数值可根据应用实际发布的服务数调整) 创建服务消费者。 本示例中,将创建一个服务消费者,通过 HSFConsumer 所提供的 API 接口去调用服务提供者。 创建一个 Maven 工程,命名为 hsf-pandora-boot-consumer。 在 pom.xml 中引入需要的依赖内容。 说明 消费者和提供者的 Maven 依赖是相同。 <java.version>1.8</java.version> <spring-boot.version>2.1.6.RELEASE</spring-boot.version> <pandora-boot.version>2019-06-stable</pandora-boot.version> com.alibaba.boot pandora-hsf-spring-boot-starter org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-dependencies ${spring-boot.version} pom import com.taobao.pandora pandora-boot-starter-bom ${pandora-boot.version} pom import org.apache.maven.plugins maven-compiler-plugin 3.7.0 1.8 1.8 com.taobao.pandora pandora-boot-maven-plugin 2.1.11.8 package repackage 将服务提供者所发布的 API 服务接口(包括包名)拷贝到本地,如 com.alibaba.edas.HelloService。 public interface HelloService { String echo(String string); } 通过注解的方式将服务消费者的实例注入到 Spring 的 Context 中。 @Configuration public class HsfConfig { @HSFConsumer(clientTimeout = 3000, serviceVersion = "1.0.0") private EchoService echoService; } 说明 在 HsfConfig 类里配置一次 @HSFConsumer,然后在多处通过 @Autowired 注入使用。通常一个 HSF Consumer 需要在多个地方使用,但并不需要在每次使用的地方都用 @HSFConsumer 来标记。只需要写一个统一的 HsfConfig 类,然后在其它需要使用的地方,直接通过 @Autowired 注入即可。 为了便于测试,使用 SimpleController 来暴露一个 /hsf-echo/* 的 HTTP 接口,/hsf-echo/* 接口内部实现调用了 HSF 服务提供者。 @RestController public class SimpleController { @Autowired private HelloService helloService; @RequestMapping(value = "/hsf-echo/{str}", method = RequestMethod.GET) public String echo(@PathVariable String str) { return helloService.echo(str); } } 在 resources 目录下的 application.properties 文件中配置应用名与监听端口号。 spring.application.name=hsf-pandora-boot-consumer server.port=8080 spring.hsf.version=1.0.0 spring.hsf.timeout=1000 说明 建议将服务版本和服务超时都统一配置在 application.properties 中。 添加服务启动的 main 函数入口。 @SpringBootApplication public class HSFConsumerApplication { public static void main(String[] args) { PandoraBootstrap.run(args); SpringApplication.run(HSFConsumerApplication.class, args); PandoraBootstrap.markStartupAndWait(); } } 表 3. 服务消费者属性列表 属性 是否必配 描述 类型 默认值 serviceGroup 否 服务的组名 String HSF serviceVersion 否 服务的版本号 String 1.0.0.DAILY clientTimeout 否 客户端统一设置接口中所有方法的超时时间(单位 ms) int -1 generic 否 是否支持泛化调用 boolean false addressWaitTime 否 同步等待服务注册中心( ConfigServer )推送服务提供者地址的时间(单位 ms) int 3000 proxyStyle 否 代理方式(JDK 或 Javassist) String jdk futureMethods 否 设置调用此服务时需要采用异步调用的方法名列表以及异步调用的方式,默认为空,即所有方法都采用同步调用 String[] 空 consistent 否 负载均衡是否使用一致性哈希 String 空 methodSpecials 否 配置方法级的超时时间、重试次数、方法名称 com.alibaba.boot.hsf.annotation.HSFConsumer.ConsumerMethodSpecial[] 空 表 4. 服务提供者和消费者全局配置参数列表 属性 是否必配 描述 类型 默认值 spring.hsf.version 否 服务的全局版本号,还可以使用 spring.hsf.versions.<完整的服务接口名>=<单独为该服务接口设置的版本号,String类型>,例如spring.hsf.versions.com.aliware.edas.EchoService="1.0.0"为具体某个服务设置版本号。 String 1.0.0.DAILY spring.hsf.group 否 服务的全局组名,还可以使用spring.hsf.groups.<完整的服务接口名>=<单独为该服务接口设置的组名,String类型>为具体某个服务设置组名。 String HSF spring.hsf.timeout 否 服务的全局超时时间,还可以使用spring.hsf.timeouts.<完整的服务接口名>=<超时时间,String类型>为具体某个服务设置超时时间。 Integer 无 spring.hsf.max-wait-address-time 否 同步等待服务注册中心( ConfigServer )推送服务提供者地址的全局时间(单位 ms ),还可以使用spring.hsf.max-wait-address-times.<完整的服务接口名>=<等待时间,String类型>为具体某个服务设置的等待服务注册中心(ConfigServer)推送服务提供者地址的时间。 Integer 3000 spring.hsf.delay-publish 否 服务延迟发布的全局开关,”true” or “false”,还可以使用spring.hsf.delay-publishes.<完整的服务接口名>=<是否延迟发布,String类型>为具体某个服务设置是否延迟。 String 无 spring.hsf.core-pool-size 否 服务的全局最小活跃线程数,还可以使用spring.hsf.core-pool-sizes.<完整的服务接口名>=<最小活跃线程数,String类型>单独为某服务设置最小活跃线程数。 int 无 spring.hsf.max-pool-size 否 服务的全局最大活跃线程数,还可以使用spring.hsf.max-pool-sizes.<完整的服务接口名>=<最大活跃线程数,String类型>单独为某服务设置最大活跃线程数。 int 无 spring.hsf.serialize-type 否 服务的全局序列化类型,Hessian 或者 Java,还可以使用spring.hsf.serialize-types.<完整的服务接口名>=<序列化类型>单独为某服务设置序列化类型。 String 无 说明 全局配置参数可在 Pandora Boot 应用的 application.properties 文件中设置。 本地开发调试。 配置轻量级配置及注册中心。 本地开发调试时,需要使用轻量级配置及注册中心,轻量级配置及注册中心包含了服务注册发现服务端的轻量版,详情请参见启动轻量级配置及注册中心。 启动应用。 在 IDE 中启动 通过 VM options 配置启动参数 -Djmenv.tbsite.net={$IP},通过 main 方法直接启动。其中 {$IP} 为轻量配置中心的 IP 地址。列如本机启动轻量配置中心,则 {$IP} 为 127.0.0.1。 您也可以不配置 JVM 的参数,而是直接通过修改 hosts 文件将 jmenv.tbsite.net 绑定为轻量配置中心的 IP。详情请参见启动轻量级配置及注册中心。 通过 FatJar 启动 增加 taobao-hsf.sar 依赖,这样会下载到我们需要的依赖:/.m2/com/taobao/pandora/taobao-hsf.sar/2019-06-stable/taobao-hsf.sar-2019-06-stable.jar,在后面的启动参数中依赖它。 com.taobao.pandora taobao-hsf.sar 2019-06-stable 使用 Maven 将 Pandora Boot 工程打包成 FatJar, 需要在 pom.xml 中添加如下插件。为避免与其他打包插件发生冲突,请勿在 build 的 plugin 中添加其他 FatJar 插件。 com.taobao.pandora pandora-boot-maven-plugin 2.1.11.8 package repackage 添加完插件后,在工程的主目录下,执行 maven 命令 mvn clean package 进行打包,即可在 Target 目录下找到打包好的 FatJar 文件。 通过 Java 命令启动应用。 java -Djmenv.tbsite.net=127.0.0.1 -Dpandora.location=${M2_HOME}/.m2/repository/com/taobao/pandora/taobao-hsf.sar/2019-06-stable/taobao-hsf.sar-2019-06-stable.jar -jar hsf-pandora-boot-provider-1.0.jar 说明 -Dpandora.location 指定的路径必须是全路径,使用命令行启动时,必须显示指定 taobao-hsf.sar 的位置。 访问 consumer 所在机器的地址,可以触发 consumer 远程调用 provider。 curl localhost:8080/hsf-echo/helloworld helloworld 单元测试。 Pandora Boot 的单元测试可以通过 PandoraBootRunner 启动,并与 SpringJUnit4ClassRunner 无缝集成。 我们将演示一下如何在服务提供者中进行单元测试,供大家参考。 在 Maven 中添加 Pandora Boot 和 Spring Boot 测试必要的依赖。 com.taobao.pandora pandora-boot-test test org.springframework.boot spring-boot-starter-test test 编写测试类的代码。 @RunWith(PandoraBootRunner.class) @DelegateTo(SpringJUnit4ClassRunner.class) // 加载测试需要的类,一定要加入 Spring Boot 的启动类,其次需要加入本类。 @SpringBootTest(classes = {HSFProviderApplication.class, HelloServiceTest.class }) @Component public class HelloServiceTest { /** * 当使用 @HSFConsumer 时,一定要在 @SpringBootTest 类加载中,加载本类,通过本类来注入对象,否则当做泛化时,会出现类转换异常。 */ @HSFConsumer(generic = true) HelloService helloService; //普通的调用 @Test public void testInvoke() { TestCase.assertEquals("hello world", helloService.echo("hello world")); } //泛化调用 @Test public void testGenericInvoke() { GenericService service = (GenericService) helloService; Object result = service.$invoke("echo", new String[] {"java.lang.String"}, new Object[] {"hello world"}); TestCase.assertEquals("hello world", result); } //返回值 Mock @Test public void testMock() { HelloService mock = Mockito.mock(HelloService.class, AdditionalAnswers.delegatesTo(helloService)); Mockito.when(mock.echo("")).thenReturn("beta"); TestCase.assertEquals("beta", mock.echo("")); } }

1934890530796658 2020-03-27 18:22:24 0 浏览量 回答数 0

问题

云服务总线 CSB错误码有哪些?

猫饭先生 2019-12-01 21:23:56 1205 浏览量 回答数 0

回答

报错信息 [HSF-Provider] HSF thread pool is full. 解决方案 服务器端某个服务处理速度过慢,不能及时处理客户端的请求,导致服务端业务执行的线程池达到最大值。HSF 默认会 dump 文件:/home/admin/logs/hsf/HSF_JStack.log (默认路径),查看此文件的 HSFBizProcessor-xxx 线程堆栈信息,分析性能瓶颈。 HSF 默认的初始化线程数是 50,最大线程数是 720,可以通过配置 JVM 参数 -Dhsf.server.min.poolsize 和 -Dhsf.server.max.poolsize 进行修改。

保持可爱mmm 2020-03-28 22:27:56 0 浏览量 回答数 0

回答

HSF 支持用户使用 Groovy 脚本配置服务的路由规则。 路由规则的配置方式,请参见 Routing Rule Wiki,在完成路由规则的配置后,您可能会发现路由规则没生效,这些没生效一般就是指调用并没有被路由到预期的机器上,然而这些没生效有可能是其他因素引起的,例如路由规则没写对、路由规则里的 IP 没有提供服务等。 这里,就来介绍下如何排查路由规则没有生效,共包含以下几步: 1. 客户端是否为本地调用、泛化调用 如果客户端通过本地调用、泛化调用的方式消费服务的话,那么是不会使用路由规则逻辑的,自然也就出现了路由规则不生效这种表象。 本地调用:指的是一个进程即是一个服务的发布者,又是这个服务的消费者,这个时候 HSF 默认优先走本地调用,即进程内的 Java 调用,而非 RPC 调用。这种情况,是不走路由规则的逻辑的。 泛化调用:指的是不依赖服务的二方包,直接通过 GenericService 通过服务描述进行消费的场景,这个时候 HSF 由于没有服务的 Class,无法执行路由规则里调用业务类的逻辑,因此也不走路由规则的逻辑。 HSFOPS 上的服务测试功能走的是泛化调用,因此也不会生效路由规则。 2. 客户端是否收到路由规则 HSF 的路由规则存放在 Diamond 上,在客户端启动时,会从 Diamond 上拉取服务对应的路由规则。 在 hsf.log(一般的路径是 HSF 2.2:${user.home}/logs/hsf/hsf-config.log 或 HSF 2.1:${user.home}/logs/hsf/hsf.log)中搜索服务名,如果正确收到路由规则,会看到类似如下的日志: 01 2015-10-09 13:20:06.402 WARN [com.taobao.diamond.client.Worker.default:t.hsf] [] [] [] [Metadata Component] Received rule for service [com.alibaba.dt.op.authclient.api.ResourceAPI:1.0.0.daily]: Groovy_v200907@package hqm.test.groovy public class RoutingRule{ Map<String, List > routingRuleMap(){ return [ "G1":["100.69.161.201:*"] ] } String interfaceRoutingRule(){ return "G1"; } } 如果没有收到路由规则,请检查: 路由规则的命名是否与服务名对应,具体请参见 Routing Rule Wiki。 路由规则配置在 diamond 上的环境和客户端所在的环境是否一致。 3. 路由规则是否正确解析 在 hsf.log 中搜索服务名,如果 HSF 的路由规则解析正确,会看到类似如下的日志: 01 2015-10-09 13:20:06.761 INFO [com.taobao.diamond.client.Worker.default:t.hsf] [] [] [] Parse route rule successed, RouteRule:com.taobao.hsf.route.service.RouteRule@4441ec5a{ keyedRules={G1=[100.69.161.201:*]}, interfaceRule=G1, methodRule={}, argsRule={} } 如果 HSF 的路由规则解析失败,会看到相关的失败信息,请对照日志和 Routing Rule Wiki 检查您的路由规则。 4. 路由规则的内容是否正确 路由规则收到了、也解析对了,如果路由规则执行的效果还与预期不同,请依次检查以下内容: 路由的目标机器是否真的提供了该服务 请在对应环境的 HSF 服务治理平台上查询服务,看路由的目标 IP 是否都在 Providers 列表中。 在老版本的 HSF 中,如果路由规则指定的 IP 没有提供服务,会报地址找不到错误 在新版本的 HSF 中(2.1.0.7 开始),如果路由规则指定的 IP 没提供服务,会提示开启空保护,那么此时路由规则就不再生效,HSF 会从 ConfigServer 存放的 Provider 地址列表中为客户端选取一个可用 IP 进行调用。在使用方法路由时,如果碰到算出的地址为空,这种情况下,在 hsf.log 中搜索服务名,会看到类似如下的日志。其中空保护开启的标志为倒数第二行的 EmptyProtection triggered [true]: 01 2015-10-09 13:20:06.761 WARN [HSF-AddressAndRule-2-thread-1:t.hsf] [] [] [] [Address Component] isEmptyProtection: true 01 2015-10-09 13:20:06.761 WARN [HSF-AddressAndRule-1-thread-1:t.hsf] [] [] [] [Address Component] isEmptyProtection: true 01 2015-10-09 13:20:06.761 WARN [HSF-AddressAndRule-2-thread-1:t.hsf] [] [] [] [Address Component] newAllAvailableAddresses is emtpy for service : com.alibaba.dt.op.authclient.api.ResourceAPI:1.0.0.daily 01 2015-10-09 13:20:06.761 INFO [HSF-AddressAndRule-2-thread-1:t.hsf] [] [] [] [AddressBucket-com.alibaba.dt.op.authclient.api.ResourceAPI:1.0.0.daily] Refresh: all amount [0], available amount [0], local preferred switch [off].Unit=UNIT 01 2015-10-09 13:20:06.761 INFO [HSF-AddressAndRule-1-thread-1:t.hsf] [] [] [] [Address Component] route result com.alibaba.dt.op.authclient.api.ResourceAPI:1.0.0.daily, addresses remain[1], EmptyProtection triggered [true] 01 2015-10-09 13:20:06.762 INFO [HSF-AddressAndRule-1-thread-1:t.hsf] [] [] [] [AddressBucket-com.alibaba.dt.op.authclient.api.ResourceAPI:1.0.0.daily] Refresh: all amount [1], available amount [1], local preferred switch [off]. 路由规则是否正确 仔细检查您的接口路由、方法路由、参数路由,是否真的写对了。 地址计算优先级 如果开启了同机房规则,那么同机房的地址优先于路由规则的地址,路由规则的地址在同机房规则结果的地址集合里再计算。 路由规则分为接口级 > 方法级 > 参数级,若某一级的路由规则不存在,即其返回的 key 为 null,或在 routingRuleMap 中找不到相应值,则认为这一级对路由地址不做限制,地址取上一级的全部地址。 总体的计算过程如下: 接口级路由规则(正则式)最终地址列表会和同机房规则结果地址列表作交集 方法级路由规则(正则式)最终地址列表会和接口级地址列表作交集 参数级路由规则(正则式)最终地址列表会和方法级地址列表作交集 5. 路由规则是否真的被调用 如果按照以上内容排查后,都没有问题,请再确认路由规则指定的服务/方法是否真的被调用了? 如果相应的方法没有被调用,则在目标机器上肯定也搜不到调用日志。 可以通过 System.out.println() 在路由规则中打印内容来确认,同时注意返回的内容必须为一个闭包。例如: ovy_v200907@package hqm.test.groovy public class RoutingRule { Map<String, List > routingRuleMap() { return [ "BSeller_address_filter_Key":["10.177.75.54:*"], "ASeller_address_filter_Key":["10.97.94.33:*"] ] } Object argsRoutingRule(String methodName, String[] paramTypeStrs) { if (methodName.startsWith("checkUrlPermission")) { System.out.println("Match the checkUrlPermission method."); return { Object[] args -> if(args[1] % 2 == 1 ) { System.out.println("Route to BSeller_address_filter_Key"); return "BSeller_address_filter_Key."; } else { System.out.println("Route to ASeller_address_filter_Key"); return "ASeller_address_filter_Key."; } } } } }

保持可爱mmm 2020-03-28 22:28:11 0 浏览量 回答数 0

回答

报错信息 解析订阅的 Diamond 配置时,出现了异常。 排查步骤 该错误码表明 HSF 订阅的某些 diamond 配置,在解析时出现了异常。例如,路由规则格式不正确等。 diamond 配置的解析一般不会影响应用正常启动和服务调用。 具体的信息请参考 ${user.home}/logs/hsf/hsf.log 和 ${user.home}/logs/hsf/hsf-config.log 中对应的异常信息,判断是什么规则出错的,对这个规则做修正即可。

保持可爱mmm 2020-03-28 22:35:36 0 浏览量 回答数 0

问题

【精品问答】企业级分布式应用服务 EDAS相关了解

montos 2020-04-08 10:53:03 2 浏览量 回答数 1

问题

多注册中心兼容怎么进行?

猫饭先生 2019-12-01 21:04:52 869 浏览量 回答数 0

回答

报错信息 There is no TOP transformer for Service:[${serviceUniqueName}]. 解决方案 TOP 调用在服务端进行转换时,没有找到对应的 transformer。故在服务端初始化时,请通过 com.taobao.hsf.ServiceInvokeTransform.Helper#register 注册一个 transformer。 TOP 调用方式 TOP 调用方式 TOP 方式是为了避免网关应用依赖后端服务的 API 包。 客户端 客户端使用 com.taobao.hsf.app.spring.util.SuperHSFSpringConsumerBeanTop,该类无需服务端的接口包。 通过 com.taobao.hsf.app.spring.util.SuperHSFSpringConsumerBeanTop#invoke 发起调用。 /** * TOP调用该方法来访问远程HSF服务。 * * 这里需要注意的是parameterTypes参数,该参数表示要调用的方法的参数类型。 必须是完整的JAVA类名,而且如果参数是原子类型,这里的类型就是原子类型的名称。 * * * @return 对端业务响应或业务异常 * * @throws HSFException * 如果本侧或对端HSF层出现错误,则抛出HSFException * @throws Throwable * 如果服务端业务出现异常,则抛出Exception */ public Object invoke(String methodName, String[] parameterTypes, Object[] args) throws HSFException, Throwable { return consumerBeanTop.invoke(methodName, parameterTypes, args); } 这里的 args 不是真正的服务端业务类型。 服务端 服务端初始化时,需要通过 com.taobao.hsf.ServiceInvokeTransform.Helper#register 注册一个 transformer。 /** * 用于把服务的调用参数转换成服务可以接受的形式。 * * @param methodName * 要调用的服务方法名 * @param args * 转换前的调用参数 * @param parameterTypes * 要调用的服务方法的真实参数类型 */ abstract public Object[] transformRequest(String methodName, Object[] args, String[] parameterTypes) throws Exception; /** * 转换请求参数类型 * * @param methodName * @param args * @param parameterTypes * @return * @throws Exception */ abstract public String[] transformRequestTypes(String methodName, Object[] args, String[] parameterTypes) throws Exception; 该 transformer 服务在服务端将客户端传递的参数转化为真实的业务类型,HSF 使用转化后的参数进行业务调用,然后使用 transformer 将业务结果进行转化后返回给 top 客户端。

保持可爱mmm 2020-03-28 22:30:56 0 浏览量 回答数 0

问题

hsf跟dubbo应该怎么选择?

zjut_l 2019-12-01 19:27:57 1739 浏览量 回答数 2

问题

服务列表显示正常,但是调用失败怎么办?

猫饭先生 2019-12-01 21:06:53 634 浏览量 回答数 0

回答

打开 Pandora Boot 应用的application.properties文件,修改该全局默认同步时间参数spring.hsf.max-wait-address-time参数(单位:毫秒),例如: spring.hsf.max-wait-address-time = 500 服务消费者端还可以针对服务接口通过参数addressWaitTime单独设置地址同步时间。 当服务进行订阅时,会在该参数指定的时间内阻塞线程,等待地址推送,避免调用该服务时因为地址为空而出现地址找不到的情况。在消费者端应用启动时就需要订阅服务的接口才需要设置该参数,推荐设置为 3000 ~ 5000 毫秒,否则应用启动时可能遇到 HSF-0001-HSFServiceAddressNotFoundException 的异常(设置该参数的一个副作用就是应用启动会延长)。 在应用程序中对某个服务消费者接口单独设置等待地址推送时间addressWaitTime,单位:毫秒。 或者在应用配置文件application.properties中单独对某个服务接口设置spring.hsf.max-wait-address-times.<完整的服务接口名>=<等待地址推送时间,等待地址推送时间的单位为毫秒。 如果设置了 spring.hsf.max-wait-address-time 参数并重启了应用,应用启动还是有点慢,可以对正在启动的应用做线程堆栈(jstack <应用JVM进程号> >> threaddump.txt)并结合$USER_HOME/log/configclient/config-client.log、$USER_HOME/log/hsf/下面的日志进行分析。

保持可爱mmm 2020-03-28 22:07:35 0 浏览量 回答数 0

回答

可通过 HSF 标签:methodSpecials 和 clientTimeout 进行配置。 methodSpecials: 为方法单独配置超时时间 (单位 ms) clientTimeout::为接口中所有方法设置统一的超时时间 (单位 ms) 超时时间配置的优先级由高到低。 消费者(客户端) methodSpecials > 消费者(客户端) clientTimeout > 提供者(服务端) methodSpecials > 提供者(服务端) clientTimeout Consumer 标签配置示例: <hsf:consumer id="service" interface="com.taobao.edas.service.SimpleService" version="1.1.0" group="test1" clientTimeout="3000" target="10.1.6.57:12200?_TIMEOUT=1000" maxWaitTimeForCsAddress="5000"> hsf:methodSpecials <hsf:methodSpecial name="sum" timeout="2000" ></hsf:methodSpecial> </hsf:methodSpecials> </hsf:consumer>

保持可爱mmm 2020-03-28 22:00:59 0 浏览量 回答数 0

问题

检查和 HSF 的兼容性

猫饭先生 2019-12-01 21:04:54 1015 浏览量 回答数 0

回答

下载云上鉴权版本的 Pandora 压缩包 taobao-hsf.tgz。 下载到本地后,执行 tar -xvf taobao-hsf.tgz 得到 taobao-hsf.sar 文件夹。 假设文件夹目录为:/Users/jiangyu.zjy/demoSpasKey/pandora/taobao-hsf.sar 在线上 EDAS 环境中运行的 ECS 上执行 cat /home/admin/.spas_key/default获取鉴权参数,并写入本地开发人员 PC 的文件中。 注意 不同的命名空间配置不同,请妥善保管鉴权配置参数,避免安全风险。 目录示例为(/Users/username/demoSpasKey/default)。 在运行着 EDAS 实例的 ECS(需与被调试的应用在同一个命名空间内)上执行 ps -ef|grep java |grep tomcat |grep project.name 获取其它配置参数。 project.name 应用 ID 00de7116-d8eb-4d57-ba6a-caf6fccb7484 ecc.id 应用实例 ID df0724b3-1057-44ef-b14f-f291d562a457 JM.CONTAINER.ID 应用 Tomcat 容器 ID, 同应用实例 ID df0724b3-1057-44ef-b14f-f291d562a457 address.server.domain 地址服务器域名 addr-hz-internal.edas.aliyun.com address.server.port 地址服务器端口 8080 configserver.client.port 注册中心开放的端口 8000 配置 Consumer 应用启动参数。 pandora.location 本地 taobao-hsf.sar 文件夹的绝对路径 /Users/jiangyu.zjy/demoSpasKey/pandora/taobao-hsf.sar spas.identity 本地鉴权信息文件的绝对路径 /Users/jiangyu.zjy/demoSpasKey/default project.name 应用 ID 00de7116-d8eb-4d57-ba6a-caf6fccb7484 tenant.id 租户 ID 5f18a6c8-da89-456e-a3e5-0eabc411d1ed address.server.domain 地址服务器域名 addr-hz-internal.edas.aliyun.com address.server.port 地址服务器端口 8080 configserver.client.port 注册中心开放的端口 8000 hsf.server.ip 开发人员 PC IP 192.168.255.6 启动本地 Consumer 应用,访问线上的 HSF 服务。 配置 Provider 应用启动参数,配置内容同 Consumer 应用。 线上服务调用本地 HSF。

保持可爱mmm 2020-03-28 22:55:12 0 浏览量 回答数 0

回答

/home/admin/taobao-tomcat-production-xxxx/logs/catalina.out 最重要的日志,可以看到应用和 Tomcat 应用服务器的异常,这是开发最应该关注的日志。 /home/admin/taobao-tomcat-production-xxxx/logs/localhost.log.xxx 如果通过 catalina.out 看到的错误很模糊或者没有错误,可以结合 localhost 来一起看,保证应用正常启动,再看下面的日志继续排查问题。 /home/admin/configclient/logs/config.client.log 可以通过此日记查看服务发布订阅是否成功,“Register-ok”、“Publish-ok” 等关键字。 /home/admin/logs/hsf/hsf.log HSF 服务的日志,有 HSF 服务调用过程的一些详细信息。如果 HSF 调用中出现异常,可以看看这个日志。 作为应用的容器,简单的排查问题的思路为: 查看 /home/admin/taobao-tomcat-production-xxxx/logs/catalina.out。 查看 /home/admin/taobao-tomcat-production-xxxx/logs/localhost.log.xxx。 找到 Tomcat 相关的第一个错误,解决第一个错误后重启观察,看是否还有其它错误。

保持可爱mmm 2020-03-28 21:46:29 0 浏览量 回答数 0

问题

EDAS 支持 Java 之外的其它语言吗?

猫饭先生 2019-12-01 21:06:11 660 浏览量 回答数 0

问题

如何对 HSF 服务进行单元测试?

保持可爱mmm 2020-03-28 21:58:52 2 浏览量 回答数 1

问题

edas HSF服务怎么被C程序调用

wayne.xu 2019-12-01 21:53:38 1305 浏览量 回答数 0

问题

HSF轻量注册服务独立搭建,多人协同开发主键重复

fei.viken 2019-12-01 19:32:46 1481 浏览量 回答数 2

问题

使用hsf后台报java.io.IOException: Connection reset by peer

ssssd 2019-12-01 20:02:39 1391 浏览量 回答数 2

回答

Ali-Tomcat 是 SAE 中的服务运行时可依赖的一个容器,它主要集成了服务的发布、订阅、调用链追踪等一系列的核心功能。无论是开发环境还是运行时,您均可将应用程序发布在该容器中。 Pandora 是一个轻量级的隔离容器,也就是 taobao-hsf.sar。它用来隔离应用和中间件的依赖,也用来隔离中间件之间的依赖。SAE 的 Pandora 中集成了服务发现、配置推送和调用链跟踪等各种中间件功能产品插件。您可以利用该插件对 EDAS 应用进行服务监控、治理、跟踪、分析等全方位运维管理。 本文介绍如何安装 Ali-Tomcat 和 Pandora,以及如何配置 Eclipse 和 IntelliJ IDEA 的开发环境。 安装 Ali-Tomcat 和 Pandora Ali-Tomcat 和 Pandora 为 SAE 中的服务运行时所依赖的容器,集成了服务的发布、订阅、调用链追踪等一系列心功能,应用程序须发布在该容器中运行。 注意 请使用 JDK 1.7及以上版本。 下载 Ali-Tomcat,保存并解压至相应的目录(如:d:\work\tomcat\)。 下载 Pandora 容器,保存并解压至 Ali-Tomcat 的 deploy 目录(d:\work\tomcat\deploy)下。 查看 Pandora 容器的目录结构。 Linux 系统中,在相应路径下执行 tree -L 2 deploy/ 命令查看目录结构。 d:\work\tomcat > tree -L 2 deploy/ deploy/ └── taobao-hsf.sar ├── META-INF ├── lib ├── log.properties ├── plugins ├── sharedlib └── version.properties Windows 中,直接进入相应路径进行查看。Pandora容器目录结构 如果您在安装和使用 Ali-Tomcat 和 Pandora 过程中遇到问题,请参见 Ali-Tomcat 问题和Pandora 问题 配置 Eclipse 开发环境 配置 Eclipse 需要下载 Tomcat4E 插件,并存放在安装 Ali-TomcatPandora 容器的保存路径中,完成配置后可以直接在 Eclipse 中发布、调试本地代码。 下载 Tomcat4E 插件 压缩包内容如下图所示。Tomcat4E 插件 打开 Eclipse,在菜单栏中选择Help > Install New Software 。 在 Install 对话框中 Work with 区域右侧单击 Add,且在弹出的 Add Repository 对话框中单击 Local,并在弹出的对话框中选中已下载并解压的 Tomcat4E 插件的目录(d:\work\tomcat4e\),单击 OK。 返回 Install 对话框,单击 Select All,并单击 Next。 后续步骤,请按界面提示操作。安装完成后,请重启 Eclipse,使 Tomcant4E 插件生效。 重启 Eclipse 后,在 Eclipse 菜单中选择 Run As > Run Configurations 。 选择左侧导航选项中的 AliTomcat Webapp,单击上方的 New launch configuration 图标。 在弹出的界面中,选择 AliTomcat页签,并在 taobao-hsf.sar Location 区域单击 Browse,选择本地的 Pandora 路径,如:d:\work\tomcat\deploy\taobao-hsf.sar。 单击 Apply 或 Run,完成设置。 一个工程只需配置一次,下次可直接启动。 查看工程运行的打印信息,如果出现下图 Pandora Container 的相关信息,即说明 Eclipse 开发环境配置成功。 edas-DG-pandora-success 配置 IntelliJ IDEA 开发环境 注意 目前仅支持 IDEA 商业版,社区版暂不支持。 运行 IntelliJ IDEA。 在菜单栏中选择 Run > Edit Configuration。 在 Run/Debug Configuration 页面左侧的导航栏中选择 Defaults > Tomcat Server > Local 。 配置 AliTomcat。 在右侧页面单击 Server 页签,并在 Application Server 区域单击 Configure。 在 Application Server 页面右上角单击 +,并在 Tomcat Server 对话框中设置 Tomcat Home 和 Tomcat base directory 路径,且单击 OK。 将 Tomcat Home 的路径设置为本地解压后的 Ali-Tomcat 路径,Tomcat base directory 可以自动使用该路径,无需再设置。 在 Application Server 区域的下拉菜单中,选择刚刚配置好的 Ali-Tomcat。 在 VM Options 区域的文本框中,设置 JVM 启动参数指向 Pandora 的路径。 列如:-Dpandora.location=d:\work\tomcat\deploy\taobao-hsf.sar 将d:\work\tomcat\deploy\taobao-hsf.sar 替换为在本地安装 Pandora 的实际路径。 单击 Apply 或 OK 完成配置。 介绍如何使用 SDK 快速开发 HSF 应用,完成服务注册与发现。 下载 Demo 工程 您可以按照本文的步骤一步步搭建工程,也可以直接下载本文对应的示例工程,或者使用 Git 下载: git clone https://github.com/aliyun/alibabacloud-microservice-demo.git。 该项目包含了众多示例工程,本文对应的示例工程位于 alibabacloud-microservice-demo/microservice-doc-demo/hsf-ali-tomcat,包含 itemcenter-api,itemcenter 和 detail 三个 Maven 工程文件夹。 itemcenter-api:提供接口定义 itemcenter:服务提供者 detail:消费者服务 说明 请使用 JDK 1.7 及以上版本。 定义服务接口 HSF 服务基于接口实现,当接口定义好之后,生产者将使用该接口实现具体的服务,消费者也基于此接口去订阅服务。 在 Demo 的 itemcenter-api 工程中,定义了一个服务接口 com.alibaba.edas.carshop.itemcenter.ItemService。 public interface ItemService { public Item getItemById(long id); public Item getItemByName(String name); } 该服务接口将提供两个方法:getItemById 与 getItemByName。 开发服务提供者 服务提供者将实现服务接口以提供具体服务。同时,如果使用了 Spring 框架,还需要在 xml 文件中配置服务属性。 说明 Demo 工程中的 itemcenter 文件夹为服务提供者的示例代码。 实现服务接口。 请参考 ItemServiceImpl.java 文件中的示例代码构建服务接口。 public class ItemServiceImpl implements ItemService { @Override public Item getItemById( long id ) { Item car = new Item(); car.setItemId( 1l ); car.setItemName( "Mercedes Benz" ); return car; } @Override public Item getItemByName( String name ) { Item car = new Item(); car.setItemId( 1l ); car.setItemName( "Mercedes Benz" ); return car; } } 服务提供者配置。 实现服务接口中实现了 com.alibaba.edas.carshop.itemcenter.ItemService,并在两个方法中返回了 Item 对象。代码开发完成之后,除了在 web.xml 中进行必要的常规配置,您还需要增加相应的 Maven 依赖,同时在 Spring 配置文件使用 标签注册并发布该服务。 在 pom.xml 中添加 Maven 依赖。 javax.servlet servlet-api 2.5 provided com.alibaba.edas.carshop itemcenter-api 1.0.0-SNAPSHOT org.springframework spring-web 2.5.6(及其以上版本) com.alibaba.edas edas-sdk 1.8.1 在 hsf-provider-beans.xml 文件中增加 Spring 关于 HSF 服务的配置。 interface=“com.alibaba.edas.carshop.itemcenter.ItemService" ref=“itemService" version=“1.0.0" 上面的示例为基本配置,您也可以根据您的实际需求,参考下面的生产者服务属性列表,增加其它配置。 属性 描述 interface 必须配置,类型为 [String],为服务对外提供的接口。 version 可选配置,类型为 [String],含义为服务的版本,默认为 1.0.0。 clientTimeout 该配置对接口中的所有方法生效,但是如果客户端通过 methodSpecials 属性对某方法配置了超时时间,则该方法的超时时间以客户端配置为准。其他方法不受影响,还是以服务端配置为准。 serializeType 可选配置,类型为 [String(hessian|java)],含义为序列化类型,默认为 hessian。 corePoolSize 单独针对这个服务设置核心线程池,从公用线程池中划分出来。 maxPoolSize 单独针对这个服务设置线程池,从公用线程池中划分出来。 enableTXC 开启分布式事务 GTS。 ref 必须配置,类型为 [ref],为需要发布为 HSF 服务的 Spring Bean ID。 methodSpecials 可选配置,用于为方法单独配置超时时间(单位 ms),这样接口中的方法可以采用不同的超时时间。该配置优先级高于上面的 clientTimeout 的超时配置,低于客户端的 methodSpecials 配置。 服务创建及发布存在以下限制: 名称 示例 限制大小 是否可调整 {服务名}:{版本号} com.alibaba.edas.testcase.api.TestCase:1.0.0 最大192字节 否 组名 HSF 最大32字节 否 单个 Pandora 应用实例发布的服务数 N/A 最大 800 个 可在应用基本信息页面单击应用设置部分右侧的设置,在下拉列表中选择JVM,在弹出的应用设置对话框中进入自定义 > 自定义参数,-DCC.pubCountMax=1200属性参数(该参数值可根据应用实际发布的服务数调整)。 服务提供者属性配置示例: <hsf:provider id="simpleService" interface="com.taobao.edas.service.SimpleService" ref="impl" version="1.0.1" clientTimeout="3000" enableTXC="true" serializeType="hessian"> hsf:methodSpecials <hsf:methodSpecial name="sum" timeout="2000" /> </hsf:methodSpecials> </hsf:provider> 开发服务消费者 消费者订阅服务从代码编写的角度分为两个部分。 Spring 的配置文件使用标签 hsf:consumer/ 定义好一个 Bean。 在使用的时候从 Spring 的 context 中将 Bean 取出来。 说明 Demo 工程中的 detail 文件夹为消费者服务的示例代码。 与生产者相同,消费者的服务属性配置分为 Maven 依赖配置与 Spring 的配置。 配置服务属性。 在 pom.xml 文件中添加 Maven 依赖。 javax.servlet servlet-api 2.5 provided com.alibaba.edas.carshop itemcenter-api 1.0.0-SNAPSHOT org.springframework spring-web 2.5.6(及其以上版本) com.alibaba.edas edas-sdk 1.8.1 在 hsf-consumer-beans.xml 文件中添加 Spring 关于 HSF 服务的配置。 增加消费者的定义,HSF 框架将根据该配置文件去服务中心订阅所需的服务。 id="item" interface="com.alibaba.edas.carshop.itemcenter.ItemService" version="1.0.0"> 服务消费者配置。 请参考 StartListener.java 文件中的示例进行。 public class StartListener implements ServletContextListener{ @Override public void contextInitialized( ServletContextEvent sce ) { ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext( sce.getServletContext() ); // 根据 Spring 配置中的 Bean ID “item” 获取订阅到的服务 final ItemService itemService = ( ItemService ) ctx.getBean( "item" ); …… // 调用服务 ItemService 的 getItemById 方法 System.out.println( itemService.getItemById( 1111 ) ); // 调用服务 ItemService 的 getItemByName 方法 System.out.println( itemService.getItemByName( "myname is le" ) ); …… } } 上面的示例中为基本配置,您也可以根据您的实际需求,参考下面的服务属性列表,增加其它配置。 属性 描述 interface 必须配置,类型为 [String],为需要调用的服务的接口。 version 可选配置,类型为 [String],为需要调用的服务的版本,默认为1.0.0。 methodSpecials 可选配置,为方法单独配置超时时间(单位 ms)。这样接口中的方法可以采用不同的超时时间,该配置优先级高于服务端的超时配置。 target 主要用于单元测试环境和开发环境中,手动地指定服务提供端的地址。如果不想通过此方式,而是通过配置中心推送的目标服务地址信息来指定服务端地址,可以在消费者端指定 -Dhsf.run.mode=0。 connectionNum 可选配置,为支持设置连接到 server 连接数,默认为1。在小数据传输,要求低延迟的情况下设置多一些,会提升 TPS。 clientTimeout 客户端统一设置接口中所有方法的超时时间(单位 ms)。超时时间设置优先级由高到低是:客户端 methodSpecials,客户端接口级别,服务端 methodSpecials,服务端接口级别 。 asyncallMethods 可选配置,类型为 [List],设置调用此服务时需要采用异步调用的方法名列表以及异步调用的方式。默认为空集合,即所有方法都采用同步调用。 maxWaitTimeForCsAddress 配置该参数,目的是当服务进行订阅时,会在该参数指定时间内,阻塞线程等待地址推送,避免调用该服务时因为地址为空而出现地址找不到的情况。若超过该参数指定时间,地址还是没有推送,线程将不再等待,继续初始化后续内容。注意,在应用初始化时,需要调用某个服务时才使用该参数。如果不需要调用其它服务,请勿使用该参数,会延长启动时间。 消费者服务属性配置示例 <hsf:consumer id="service" interface="com.taobao.edas.service.SimpleService" version="1.1.0" clientTimeout="3000" target="10.1.6.57:12200?_TIMEOUT=1000" maxWaitTimeForCsAddress="5000"> hsf:methodSpecials <hsf:methodSpecial name="sum" timeout="2000" ></hsf:methodSpecial> </hsf:methodSpecials> </hsf:consumer> 本地运行服务 完成代码、接口开发和服务配置后,在 Eclipse 或 IDEA 中,可直接以 Ali-Tomcat 运行该服务(具体请参见安装及开发环境配置)。 在开发环境配置时,有一些额外 JVM 启动参数来改变 HSF 的行为,具体如下: 属性 描述 -Dhsf.server.port 指定 HSF 的启动服务绑定端口,默认值为 12200。 -Dhsf.serializer 指定 HSF 的序列化方式,默认值为 hessian。 -Dhsf.server.max.poolsize 指定 HSF 的服务端最大线程池大小,默认值为 720。 -Dhsf.server.min.poolsize 指定 HSF 的服务端最小线程池大小。默认值为 50。 -DHSF_SERVER_PUB_HOST 指定对外暴露的 IP,如果不配置,使用 -Dhsf.server.ip 的值。 -DHSF_SERVER_PUB_PORT 指定对外暴露的端口,该端口必须在本机被监听,并对外开放了访问授权,默认使用 -Dhsf.server.port 的配置,如果 -Dhsf.server.port 没有配置,默认使用12200。 本地查询 HSF 服务 在开发调试的过程中,如果您的服务是通过轻量级注册配置中心进行服务注册与发现,就可以通过 EDAS 控制台查询某个应用提供或调用的服务。 假设您在一台 IP 为 192.168.1.100 的机器上启动了 EDAS 配置中心。 进入 http://192.168.1.100:8080/ 在左侧菜单栏单击服务列表,输入服务名、服务组名或者 IP 地址进行搜索,查看对应的服务提供者以及服务调用者。 说明 配置中心启动之后默认选择第一块网卡地址做为服务发现的地址,如果开发者所在的机器有多块网卡的情况,可设置启动脚本中的 SERVER_IP 变量进行显式的地址绑定。 常见查询案例 提供者列表页 在搜索框中输入 IP 地址,单击搜索,即可查询该 IP 地址的物理机所提供的服务。 在搜索框中输入服务名或服务分组,即可查询提供该服务的 IP 地址。 调用者列表页 在搜索框中输入 IP 地址,单击搜索,即可查询该 IP 地址的物理机所调用的服务。 在搜索框中输入服务名或服务分组,即可查询调用该服务的 IP 地址。 部署到 SAE 本地使用轻量级配置及注册中心的应用可以直接部署到 SAE 中,无需做任何修改,注册中心会被自动替换为 SAE 上的注册中心。 正常打包出可供 EDAS-Container 运行的 WAR 包,需要添加如下的 Maven 打包插件 在 pom.xml 文件中添加以下打包插件的配置。 itemcenter org.apache.maven.plugins maven-compiler-plugin 3.1 执行 mvn clean package 将本地的程序打成 WAR 包。 应用运行时环境需要选择 EDAS-Container。 具体部署操作请参见应用部署概述。

1934890530796658 2020-03-27 12:56:58 0 浏览量 回答数 0

问题

服务器异常操作是什么问题com.taobao.hsf.exception

1713911071170861 2019-12-01 19:11:13 65 浏览量 回答数 1

问题

HSF 应用注册或订阅服务数多导致启动比较慢,怎么办?

保持可爱mmm 2020-03-28 22:05:58 1 浏览量 回答数 1

问题

EDAS 初级版能使用 HSF 相关功能吗?

猫饭先生 2019-12-01 21:06:12 664 浏览量 回答数 0

问题

单个 HSF 应用发布服务数超过 800 个限制的报错,如何解决?

保持可爱mmm 2020-03-28 22:02:40 5 浏览量 回答数 1

问题

新版轻量级配置及注册中心,启动hsf服务报错

1265765970471750 2020-01-08 11:22:53 10 浏览量 回答数 1

问题

关于edas控制台消费端请求,报HSF-0002错误,求解!!!

taowenrui 2019-12-01 20:12:36 1925 浏览量 回答数 1
阿里云大学 云服务器ECS com域名 网站域名whois查询 开发者平台 小程序定制 小程序开发 国内短信套餐包 开发者技术与产品 云数据库 图像识别 开发者问答 阿里云建站 阿里云备案 云市场 万网 阿里云帮助文档 免费套餐 开发者工具 企业信息查询 小程序开发制作 视频内容分析 企业网站制作 视频集锦 代理记账服务 2020阿里巴巴研发效能峰会 企业建站模板 云效成长地图 高端建站