1.准备:
Jdk1.6及其以上版本
下载zookeeper 具体安装过程详见zookeeper官网:http://zookeeper.apache.org/
下载tomcat 具体安装过程详见zookeeper官网:http://tomcat.apache.org/
下载dubbox代码 github地址:http://dangdangdotcom.github.io/dubbox
2.介绍:
2.1安装zookeeper
下载Zookeeper并且解压,然后配置一下环境变量
D:\zookeeper\zookeeper-3.4.14
%ZOOKEEPER_HOME%\bin;%ZOOKEEPER_HOME%\conf;
启动:zookeeper目录下找到bin目录然后命令行运行:zkservice.cmd就可以了
2.2使用Tomcat运行 Dubbo-admin查看provider和consumer
Dubbo-admin的一个工具而已,使用Tomcat将其展现在网页上,如下图所示:
既然是依赖Tomcat展示,那就要先装Tomcat吧!
2.2.1 安装Tomcat
下载Tomcat然后解压,
Tomcat目录下的conf文件夹下找到server.xml,把8080随便改成8088什么的(防止端口冲突)
Bin目录下点击tomcat8w.exe,如果报错就在当前目录下使用命令行:.\service.bat install解决Tomcat.wexe无法启动的问题
当你出现这个页面,点击start按钮,没报错说明Tomcat安装完成
2.2.2下面开始安装Dubbo-admin:
下载完成Dubbox并解压后的Dubbo-master目录下,使用powershell将下面的命令行输入:mvn install -Dmaven.test.skip=true或者mvn clean package '-Dmaven.test.skip=true'(一个不行就试另外一个,肯定可以的)
输入完命令之后等待结束之后,如图所示,可以看到多出了一个target文件夹:
Target文件夹下将dubbo-admin-2.8.4.war文件拷贝到Tomcat/webapps/ROOT目录下(将原来的ROOT目录中的所有文件删除),然后解压dubbo-admin-2.8.4.war
之后启动Tomcat,然后进入浏览器输入:localhost:8088,就会出现下面的界面(密码和用户都是root)
说明Tomcat能够启动dubbo-admin了
3.前面这些都只是准备工作,下面开始创建Dubbo工程:
首先我们创建一个父maven工程文件:
接着在下面创建controller,interface,service三个子工程文件
3.1我们使用controller作为例子创建一个子工程:
这个子工程是一个web工程,
后面的interface和service同理,只是不用勾选2处和3处,其他的都是一样的
这是全部创建完成之后的样子
因为controller是web工程,所以和另外两个不太一样,创建完成后,现在需要创建实现的类了
Dubbo很好的融合了spring,使用spring的配置方式就可以实现了
1.我们先写MyInterFace,等工程全部写完就知道为什么要先写MyInterFace了(在Service中对MyInterFace中的抽象方法进行实现)
代码:
package com.start.interf;
public interface IMyInterFace {
public String getName(String name);
}
2.现在我们在Service(也就是provider)工程下写代码
- MyInterFace工程中的抽象方法实现类(在maven工程中只需要当前service工程下的pom.xml中添加一个文件就行,就是图上4的文件,一会就回讲到)
实现IMyInterFace中的抽象方法:
package com.start.service; import com.start.interf.IMyInterFace; public class IMyInterFaceImpl implements IMyInterFace { public String getName(String name) { return "name: " + name; } }
2.TestServiceTest是作为service工程的启动文件,这样Dubbo-admin就能检测出它的存在
package com.start.service; import java.io.IOException; import org.springframework.context.support.ClassPathXmlApplicationContext; public class TestServiceTest { public static void main(String[] args) throws IOException { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"application.xml"}); context.start(); System.out.println("提供者服务已注册成功"); for(;;){ System.in.read();//让此程序一直跑,表示一直提供服务 } } }
3.Application.Xml是正常使用dubbo必须的配置文件
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd "> <!-- 提供方应用信息,用于计算依赖关系 --> <dubbo:application name="provider" /> <!-- 使用zookeeper注册中心暴露服务地址 --> <dubbo:registry address="zookeeper://127.0.0.1:2181" /> <!-- 用dubbo协议在20880端口暴露服务 --> <dubbo:protocol name="dubbo" port="29014" /> <!-- 声明需要暴露的服务接口 --> <dubbo:service interface="com.start.interf.IMyInterFace" ref="testService" /> <!-- 具体的实现bean --> <bean id="testService" class="com.start.service.IMyInterFaceImpl" /> </beans>
4.Pom文件是工程所依赖的所有jar包
<?xml version="1.0" encoding="UTF-8"?> <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"> <parent> <artifactId>parent</artifactId> <groupId>com.parent</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>Service</artifactId> <properties> <spring.version>3.2.8.RELEASE</spring.version> </properties> <dependencies>
<!—这个dependency就是让service能调用到MyInterface中方法的关键 --> <dependency> <groupId>com.parent</groupId> <artifactId>MyInterface</artifactId> <version>1.0-SNAPSHOT</version> <scope>compile</scope> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>2.5.3</version> <exclusions> <exclusion> <groupId>org.springframework</groupId> <artifactId>spring</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>com.github.sgroschupf</groupId> <artifactId>zkclient</artifactId> <version>0.1</version> </dependency> <!-- spring相关 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jms</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.apache.activemq</groupId> <artifactId>activemq-all</artifactId> <version>5.16.0-SNAPSHOT</version> <scope>test</scope> </dependency> <dependency> <groupId>org.apache.activemq</groupId> <artifactId>activemq-all</artifactId> <version>5.16.0-SNAPSHOT</version> </dependency> </dependencies> </project>
只要依次将这些代码复制进自己创建的对应的工程目录文件下,service就算完成了
3.开始创建consumer(也就是这里的controller)
文件的目录如图:
3处代表的是application.xml文件所在的文件地址(可以通过选中controller工程下的application.xml文件,然后右键copypath获取)
下面是代码:
1.controller调用service工程
package com.start.controller; import java.io.IOException; import com.start.interf.IMyInterFace; import org.springframework.context.support.ClassPathXmlApplicationContext; public class ConsumerServiceTest { public static void main(String[] args) { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( "file:D:/Dubbo_master/parentDemo/parent/Controller/src/main/webapp/WEB-INF/application.xml"); context.start(); IMyInterFace testService = (IMyInterFace) context.getBean("testService"); System.out.println(testService.getName("wangke")); try { System.in.read(); } catch (IOException e) { e.printStackTrace(); } } }
2.controller(也就是consumer)正常使用Dubbo框架所需要的配置文件
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd "> <!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 --> <dubbo:application name="consumer" /> <!-- 使用multicast广播注册中心暴露发现服务地址 --> <dubbo:registry protocol="zookeeper" address="zookeeper://127.0.0.1:2181" /> <!-- 生成远程服务代理,可以和本地bean一样使用demoService --> <dubbo:reference id="testService" interface="com.start.interf.IMyInterFace" /> </beans>
最后:
先启动zookeeper,再启动Tomcat(忘了怎么启动再往上翻看一下)
Service工程在工程下的main函数下启动,controller工程在工程下的main函数下启动,然后就能看到,控制台上provider和consumer的输出,在网页dubbo-admin的相关信息: