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)工程下写代码
实现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的相关信息: