标签:
针对 EDAS v2.3.0
©Alibaba EDAS 项目组
2015/8/19
1 前言
本文档旨在描述阿里云 EDAS 产品中应用服务化模块的基本概念,以及如何使用。
2 产品背景
HSF(High Speed Framework)是一个高可用、高性能、分布式的服务框架。HSF 可以被看作是人体的血管,
帮助应用轻松实现服务化解耦,是阿里内部各个系统通信的基础软件。
3 专业术语
? Agent
安装于用于 ECS,负责 EDAS 控制台与用户 ECS 之间的通信,以此来实现对应用的管理。
? HSF
EDAS 产品中分布式服务化子模块的名字,是一个高性能的服务化框架,全称 High Speed FrameWork。
4 HSF 安装
先了解下 HSF 应用的运行环境。如图:
首先,应用运行在潘多拉(Pandora)容器中,容器又通过 Ali-Tomcat 启动。
重要说明: 本地开发,才需要 4.1,4.2,4.3 的步骤.如果已经开发好,则只需要将应用发布到 EDAS 平台上,EDAS 平台
会自动初始化容器环境.
4.1 Tomcat 安装
下载并解压 Tomcat 即可(不可以下载其它 tomcat 包),我们做了定制
下载地址: http://edas-public.oss-cn-hangzhou.aliyuncs.com/install_package/tomcat/taobao-tomcat-dev.gz
4.2 Pandora 安装
下载并解压 Pandora 到 Ali-Tomcat 的 deploy 目录即可。
下载地址: http://edas-public.oss-cn-hangzhou.aliyuncs.com/install_package/pandora/unauth/taobao-hsf.tgz
4.3 环境配置
1. 绑定 jmenv.tbsite.net 域名到对应的地址服务器(没有域名解析的情况下)
在默认情况下,我们在公网有一个测试环境,您可以在本机绑定地址:
182.92.100.65 jmenv.tbsite.net
如果在您的本地安装有地址服务器环境,请绑定本地的地址
2. 可以安装 EdasStudio 开发插件,这样可以在 eclipse 中直接调试程序无需额外的打包
到此,HSF 的运行环境就安装完毕。
5 提供 HSF 服务
5.1 创建 Web 项目
以 eclipse 为例创建一个 maven web 项目。 File -> New -> Project -> Maven Project -> maven-archetype-webapp ->
输入 groupId、artifactId 连续 Next。项目目录结构如图:
5.2 添加 Maven 依赖
在项目 pom.xml 中添加如下依赖:
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>3.1.1.RELEASE</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.0.1</version> <scope>provided</scope> </dependency>
5.3 编写需要发布的服务
创建需要发布的服务接口,com.taobao.edas.test.SampleService
SampleService 服务提供了一个 echo 的方法调用。编写实现类:com.taobao.edas.test.impl.SampleServiceImpl
public interface SampleService { String echo(String str); } public class SampleServiceImpl implements SampleService { @Override public String echo(String str) { return str; } }
5.4 配置 Spring
在 web.xml 中配置 spring 的监听器:
<context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:config/applicationContext.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>
在 resources 目录下面添加 spring 配置文件:config/applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 3.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd"> <beans> <import resource="classpath:config/providers-spring.xml"/> </beans>
这里配置文件中包含了发布者的配置文件:config/providers-spring.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 3.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd"> <beans> <bean id="target" class="com.taobao.edas.test.impl.SampleServiceImpl"/> <beanid="sampleServiceProvider" class="com.taobao.hsf.app.spring.util.HSFSpringProviderBean" init-method="init"> <property name="serviceInterface" value="com.taobao.edas.test.SampleService"/> <property name="serviceVersion" value="1.0.0"/> <property name="serviceGroup" value="HSF"/> <property name="target" ref="target"/> </bean> </beans>
到此发布者就编写好了,运行 Maven 打包,生成项目 war 包。部署到 ali-tomcat 的 deploy 目录下。运行
ali-tomcat/bin/startup.bat,就可以在 hsf 服务治理上查询到发布的服务了。
6 消费 HSF 服务
6.1 配置 Spring
在配置文件 config/applicationContext.xml 添加消费者配置:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 3.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd"> <beans> <import resource="classpath:config/providers-spring.xml"/> <import resource="classpath:config/consumers-spring.xml"/> </beans>
consumers-spring.xml 配置:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 3.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd"> <beans> <bean id="sampleService" class= "com.taobao.hsf.app.spring.util.HSFSpringConsumerBean" init-method="init"> <property name="interfaceName" value="com.taobao.edas.test.SampleService"/> <property name="version" value="1.0.0"/> <property name="group" value="HSF"/> </bean> </beans>
6.2 编写测试代码
已经完成了消费者的定义,下面创建 servlet 来调用测试代码进行测试:com.taobao.edas.test. HsfServlet
public class HsfServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext( req.getServletContext()); SampleService sampleService = (SampleService) ctx.getBean("sampleService"); resp.getWriter().println(Long.toString(System.currentTimeMillis())); } }
在 web.xml 中添加
<servlet> <servlet-name>hsf</servlet-name> <servlet-class>com.taobao.edas.test.HsfServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>hsf</servlet-name> <url-pattern>/hsf.htm</url-pattern> </servlet-mapping>
6.3 打包测试
Maven 打包,部署,启动 ali-tomcat,打开浏览器访问:localhost:8080/hsf.htm 。
注意:这里虽然消费成功,但是默认没有走远程调用。就是说,如果相同的 jvm 中提供了服务,默认是不会
走网络远程调用了。就是说,即使其他机器提供了相同的服务也永远不会调用。
编辑 ali-tomcat/bin/catalina.bat 添加如下参数:
set JAVA_OPTS=%JAVA_OPTS% -Dhsf.client.localcall=false
这个参数禁用掉了本机优先调用策略。
如果这里是使用 Ali-tomcat 插件,直接用插件运行,无需打包。并且,-Dhsf.client.localcall=false
把这个参数在 eclipse 中加到 JVM 参数中。
标签:
原文地址:http://www.cnblogs.com/longshiyVip/p/4823305.html