使用xml配置文件实现HSF框架和EDAS注册服务器的发布-订阅模式

使用工具idea

Ali-Tomcat 和 Pandora 为 EDAS 中的服务运行时所依赖的容器,主要集成了服务的发布、订阅、调用链追踪等一系列的核心功能,无论是开发环境还是运行时,均必须将应用程序发布在该容器中。

注意:请使用 JDK 1.7及以上版本。

  1. 下载 Ali-Tomcat,保存后解压至相应的目录(如:d:\work\tomcat\)。

  2. 下载 Pandora 容器,保存后将内容解压至上述保存的 Ali-Tomcat 的 deploy 目录(d:\work\tomcat\deploy)下。

  3. 查看 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

  4. 启动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 开发应用

  1. carshop文件夹,里面包含 itemcenter-apiitemcenter 和 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分布式服务框架实现发布订阅者模式成功。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值