一 . 准备工作
1) Zookeeper:zookeeper-3.4.6.tar.gz
2) 相关jar包:dubbo-2.5.3.jar
javassist-3.15.0-GA.jar
log4j-1.2.16.jar
netty-3.5.7.Final.jar
slf4j-api-1.6.4.jar
slf4j-log4j12-1.6.4.jar
zkclient-0.1.jar
zookeeper-3.3.3.jar
3) dubbo Admin:dubbo-admin-2.5.4.war
二 . 安装配置
1) zookeeper安装
我有四台服务器,ip放别为:192.168.0.1,192.168.0.2,192.168.0.3,192.168.0.4 且配置ssh免密码登录
将zookeeper-3.4.6.tar.gz 复制到/home/hadoop目录下
Chmod 777 zookeeper-3.4.6.tar.gz
tar zxvf zookeeper-3.4.6.tar.gz
mv zookeeper-3.4.6 zookeeper
建立数据目录
mkdir /home/hadoop/zookeeper/data
修改配置文件
cd zookeeper/conf
cp zoo_sample.cfg zoo.cfg
编辑配置文件
vi zoo.cfg
# 修改数据目录dataDir为以下值
dataDir=/home/hadoop/zookeeper/data
# 添加以下段落
server.1=192.168.0.1:2886:3886
server.2=192.168.0.2:2887:3887
server.3=192.168.0.3:2888:3888
server.4=192.168.0.4:2889:3889
server.id=host:port:port标识不同的ZooKeeper服务器
需要在每个服务器的数据目录中(这边为/home/hadoop/zookeeper/data)创建myid文件,文件的内容为以上对应的server.id中的id
vi /data/zookeeper/myid
# 值为各个服务器对应的server.id中的id
id
e. 配置环境变量并启动ZooKeeper
vi /etc/profile
export ZOOKEEPER_HOME=/home/hadoop/zookeeper
PATH=$PATH:$ZOOKEEPER_HOME/bin
/在剩下的服务器中做相同的zookeeper操作,需要在每一台机器上都启动
zkServer.sh start
f. 验证
jps 查看多了QuorumpeerMain 进程
zkCli.sh -server 192.168.0.2:2181
[zk: 192.168.0.2:2181(CONNECTED) 0] help
[zk: 192.168.0.2:2181(CONNECTED) 0] create/user 123456
[zk: 192.168.0.2:2181(CONNECTED) 0] get/user
2) dubbo配置(配置文件报错是myeclipse验证问题,不影响使用。也可以自己配置Eclipse验证。)
一、本地服务
1、 定义服务接口: (该接口需单独打包,在服务提供方和消费方共享)
public interface CustomerService {
public String getSayHelloWorld();
}
2、
在服务提供方实现接口:(对服务消费方隐藏实现)
public class CustomerServiceImpl implements CustomerService{
@Override
public String getSayHelloWorld() {
System.out.print("CustomerService Say:HelloWorld");
return "HelloWorld";
}
}
3、然后引入dubbo的几个包
dubbo-2.5.3.jar
javassist-3.15.0-GA.jar
log4j-1.2.16.jar
netty-3.5.7.Final.jar
slf4j-api-1.6.4.jar
slf4j-log4j12-1.6.4.jar
zkclient-0.1.jar
zookeeper-3.3.3.jar
4、 用Spring配置声明暴露服务:
新建applicationProvider.xml,配置内容如下:
<?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 "> <!-- 具体的实现bean --> <bean id="customerService" class="com.alibab.dubbo.CustomerServiceImpl" /> <!-- 提供方应用信息,用于计算依赖关系 --> <dubbo:application name="xixi_provider" /> <!-- 使用multicast广播注册中心暴露服务地址 <dubbo:registry address="multicast://localhost:1234" />--> <!-- 使用zookeeper注册中心暴露服务地址 --> <dubbo:registry address="zookeeper://192.168.0.1:2181?backup=192.168.0.2:2181,192.168.0.3:2181,192.168.0.4:2181" /> <!-- 用dubbo协议在20880端口暴露服务 --> <dubbo:protocol name="dubbo" port="20880" /> <!-- 声明需要暴露的服务接口 --> <dubbo:service interface="com.alibaba.dubbo.CustomerService" ref="customerService" /> </beans>
我这里暴露服务器的地址交由zookeeper来管理的,使用者首先先要安装zookeeper应用才能使用此功能,相关安装步骤请参看相关博文
5、 加载Spring配置,并调用远程服务:(也可以使用IoC注入)
public class DubooProvider { public static void main(String[] args) { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( new String[]{"spring/applicationProvider.xml"}); context.start(); try { System.in.read(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }并且启动,使其进入启动状态。
以上为服务器提供者的完整步骤,功能接口都已经写好,下面我们就开始怎么远程调用
1、新建个配置文件applicationConsumer.xml,内容如下:
<?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-of-helloworld-app" /> <!-- 使用multicast广播注册中心暴露发现服务地址 --> <dubbo:registry protocol="zookeeper" address="zookeeper://192.168.0.1:2181?backup=192.168.0.2:2181,192.168.0.3:2181,192.168.0.4:2181" /> <!-- 生成远程服务代理,可以和本地bean一样使用demoService --> <dubbo:reference id="customerService" interface="com.alibaba.dubbo.CustomerService" /> </beans>
2. 获取spring容器的bean
public class DubboConsumer {
CustomerService customerService;
public static void main(String[] args) {
try {
ApplicationContext ac = new FileSystemXmlApplicationContext("classpath:spring/applicationConsumer.xml");
CustomerService customerService = (CustomerService)ac.getBean("customerService");
System.out.println("123456 "+customerService.getSayHelloWorld());
System.in.read();
} catch (BeansException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
dubbo.admin.root.password=root
dubbo.admin.guest.password=guest
生产者管理页面:
消费者管理页面: