使用工具idea
Ali-Tomcat 和 Pandora 为 EDAS 中的服务运行时所依赖的容器,主要集成了服务的发布、订阅、调用链追踪等一系列的核心功能,无论是开发环境还是运行时,均必须将应用程序发布在该容器中。
注意:请使用 JDK 1.7及以上版本。
-
下载 Ali-Tomcat,保存后解压至相应的目录(如:d:\work\tomcat\)。
-
下载 Pandora 容器,保存后将内容解压至上述保存的 Ali-Tomcat 的 deploy 目录(d:\work\tomcat\deploy)下。
-
查看 Pandora 容器的目录结构
d:\work\tomcat > tree -L 2 deploy/ deploy/ └── taobao-hsf.sar ├── META-INF ├── lib ├── log.properties ├── plugins ├── sharedlib └── version.properties
配置 hosts
对于需要使用轻量配置中心的开发机器,请在本地 DNS(hosts 文件)中,将 jmenv.tbsite.net 域名指向启动了 EDAS 配置中心的机器 IP。
hosts 文件的路径如下:Windows 操作系统:C:\Windows\System32\drivers\etc\hostsUnix 操作系统:/etc/hosts192.168.1.100 jmenv.tbsite.net
-
启动EDAS注册服务中心---》找到下载好的路径---》找到edas-lite-configcenter/bin---》运行startup.bat
运行效果如下图:
此时EDAS 注册服务中心运行成功
配置开发环境
配置 IntelliJ IDEA 环境
注意:目前仅支持 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 完成配置。
使用 EDAS SDK 开发应用
-
carshop
文件夹,里面包含itemcenter-api
,itemcenter
和detail
三个 Maven 工程文件夹。itemcenter-api
:提供接口定义itemcenter
:生产者服务detail
:消费者服务
注意:请使用 JDK 1.7 及以上版本。
定义服务接口
HSF 服务基于接口实现,当接口定义好之后,生产者将使用该接口实现具体的服务,消费者也是基于此接口去订阅服务。
在 Demo 的itemcenter-api
工程中,定义了一个服务接口
itemcenter-api---->提供服务接口
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.alibaba.edas.carshop</groupId>
<artifactId>itemcenter-api</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>itemcenter-api</name>
<url>http://maven.apache.org</url>
<organization>
<name>Alibaba Grroup EDAS Team</name>
<url>http://www.aliyun.com/product/edas</url>
</organization>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
</project>
所提供的接口
package com.alibaba.edas.carshop.itemcenter;
/**
* Alibaba Group EDAS. http://www.aliyun.com/product/edas
*/
public interface ItemService {
public Item getItemById( long id );
public Item getItemByName( String name );
}
服务提供者将实现类给到注册中心itemcenter
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.alibaba.edas.carshop</groupId>
<artifactId>itemcenter</artifactId>
<packaging>war</packaging>
<version>1.0.0-SNAPSHOT</version>
<name>market provider Maven Webapp</name>
<url>http://maven.apache.org</url>
<organization>
<name>Alibaba Grroup EDAS Team</name>
<url>http://www.aliyun.com/product/edas</url>
</organization>
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.alibaba.edas.carshop</groupId>
<artifactId>itemcenter-api</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
<version>2.5.6</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.alibaba.edas</groupId>
<artifactId>edas-sdk</artifactId>
<version>1.5.4</version>
</dependency>
</dependencies>
<build>
<finalName>itemcenter</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
实现接口的类
package com.alibaba.edas.carshop.itemcenter;
/**
* Alibaba Group EDAS. http://www.aliyun.com/product/edas
*/
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;
}
}
对应服务提供者配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:hsf="http://www.taobao.com/hsf"
xmlns="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.taobao.com/hsf
http://www.taobao.com/hsf/hsf.xsd" default-autowire="byName">
<bean id="itemService" class="com.alibaba.edas.carshop.itemcenter.ItemServiceImpl" />
<!-- 提供一个服务示例 -->
<hsf:provider id="itemServiceProvider" interface="com.alibaba.edas.carshop.itemcenter.ItemService"
ref="itemService" version="1.0.0">
</hsf:provider>
</beans>
IDEA设置注意:1.使用HSF提供的淘宝tomcat服务器;2.发布服务需要指定JVM配置一些参数值
启动tomcat服务后,可查看到EDAS配置中心网页端提供者提供的接口,证明已经将服务接口发布到EDAS服务注册中心中
服务消费/者订阅者从注册中心获取接口对应数据
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.alibaba.edas.carshop</groupId>
<packaging>war</packaging>
<version>1.0.0-SNAPSHOT</version>
<name>market consumer Maven Webapp</name>
<url>http://maven.apache.org</url>
<organization>
<name>Alibaba Grroup EDAS Team</name>
<url>http://www.aliyun.com/product/edas</url>
</organization>
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.alibaba.edas.carshop</groupId>
<artifactId>itemcenter-api</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
<version>2.5.6</version>
</dependency>
<dependency>
<groupId>com.alibaba.edas</groupId>
<artifactId>edas-sdk</artifactId>
<version>1.5.4</version>
</dependency>
</dependencies>
<build>
<finalName>detail</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
</plugins>
</build>
<artifactId>detail</artifactId>
</project>
测试代码
package com.alibaba.edas.carshop.detail;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import org.springframework.context.ApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
import com.alibaba.edas.carshop.itemcenter.ItemService;
/**
* Alibaba Group EDAS. http://www.aliyun.com/product/edas
*/
public class StartListener implements ServletContextListener{
@Override
public void contextInitialized( ServletContextEvent sce ) {
ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext( sce.getServletContext() );
final ItemService itemService = ( ItemService ) ctx.getBean( "item" );
Thread thread = new Thread( new Runnable() {
@Override
public void run() {
while ( true ) {
try {
Thread.sleep( 500l );
System.out.println( itemService.getItemById( 1111 ) );
System.out.println( itemService.getItemByName( "myname is le" ) );
} catch ( Throwable e ) {
e.printStackTrace();
}
}
}
} );
thread.start();
}
@Override
public void contextDestroyed( ServletContextEvent sce ) {
// TODO Auto-generated method stub
}
}
xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:hsf="http://www.taobao.com/hsf"
xmlns="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.taobao.com/hsf
http://www.taobao.com/hsf/hsf.xsd" default-autowire="byName">
<!-- 消费一个服务示例 -->
<hsf:consumer id="item" interface="com.alibaba.edas.carshop.itemcenter.ItemService"
version="1.0.0">
</hsf:consumer>
</beans>
IDEA工具配置 1.tomcat为淘宝tomcat;2,指定发布EDAS注册服务中心JVM运行环境的一些参数
运行tomcat--->可查看到获取到接口提供方法返回的数据。证明HSF分布式服务框架实现发布订阅者模式成功。