HSF分布式开发框架
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
HSF 初体验
目录
一句话形容HSF 0
HSF安装 0
Ali-Tomcat安装 0
Pandora安装 0
环境配置 0
提供HSF服务 0
创建Web项目 0
添加maven依赖 (1)
编写需要发布的服务 (2)
配置Spring (3)
消费HSF服务 (4)
添加spring配置 (4)
编写测试代码 (5)
打包测试 (5)
实践 (6)
一句话形容HSF
HSF就好比人体的血管,它是阿里内部各个系统通信的基础软件。
HSF安装
先了解下HSF应用的运行环境。
如图:
首先,应用运行在潘多拉(Pandora)容器中,容器又通过Ali-Tomcat启动。
Ali-Tomcat安装
下载并解压Ali-Tomcat即可。
Pandora安装
下载并解压Pandora到Ali-Tomcat的deploy目录即可。
到此,HSF的运行环境就安装完毕。
环境配置
//TODO configserver 绑定
提供HSF服务
创建Web项目
首先用idea(或者eclipse,这里以idea为例)创建一个maven web项目。
File -> New Project -> Maven -> Create from archetype -> maven-archetype-webapp -> 连续Next 项目目录结构如图:
添加maven依赖
在项目pom.xml中添加如下依赖:
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>3.1.1.RELEASE</version>
</dependency>
<dependency>
<groupId>com.taobao.hsf</groupId>
<artifactId>hsf.app.spring</artifactId>
<version>2.1.0.7</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
</dependencies>
=
编写需要发布的服务
创建需要发布的服务接口,com.taobao.edas.test.SampleService
public interface SampleService {
String echo(String str);
}
SampleService服务提供了一个echo的方法调用。
编写实现类,com.taobao.edas.test.impl.SampleServiceImpl
public class SampleServiceImpl implements SampleService { @Override public String echo(String str) {
return str;
}
}
配置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" "/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"
"/dtd/spring-beans-2.0.dtd">
<beans>
<bean id="target" class="com.taobao.edas.hsftest.impl.SampleServiceImpl"/>
<beanid="sampleServiceProvider"
class="com.taobao.hsf.app.spring.util.HSFSpringProviderBean" init-method="init"> <property name="serviceInterface"
value="com.taobao.edas.hsftest.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服务治理上查询到发布的服务了。
消费HSF服务
添加spring配置
在配置文件config/applicationContext.xml 添加消费者配置:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 3.0//EN" "/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" "/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>
编写测试代码
已经完成了消费者的定义,下面创建servlet来调用测试代码进行测试。
com.taobao.edas.test. HsfServlet.java
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>
打包测试
Maven打包,部署,启动ali-tomcat。
打开浏览器访问:localhost:8080/a/hsf.htm 。
注意:这里虽然消费成功,但是默认没有走远程调用。
就是说,如果相同的jvm中提供了服务,默认是不会走网络远程调用了。
就是说,即使其他机器提供了相同的服务也永远不会调用。
编辑ali-tomcat/bin/catalina.bat 添加如下参数:
set JAVA_OPTS=%JAVA_OPTS% -Dhsf.client.localcall=false
这个参数禁用掉了本机优先调用策略。
实践实现订单生产的流程。