Dubbo

351 阅读2分钟

dubbo对zookeeper依赖版本的问题
dubbo的2.6以前的版本引入zkclient操作zookeeper
dubbo的2.6以后的版本引入curator操作zookeeper

1.zookeeper安装
解压zookeeper之后,修conf里面的zoo_example.cfg文件名为zoo.cfg
启动bin/zkServer.sh start

ZooKeeper JMX enabled by default
Using config: /data/zookeeper/zookeeper-3.4.14/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

检查zookeeper 启动状态

    [root@localhost zookeeper-3.4.14]# ./bin/zkServer.sh status
    ZooKeeper JMX enabled by default
    Using config: /data/zookeeper/zookeeper-3.4.14/bin/../conf/zoo.cfg
    Mode: standalone

dubbo版本为2.5.3时的maven配置的文件为:

  <properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>
		<!-- 源文件编码格式 -->
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<!-- jdk编译源码版本 -->
		<jdk.compile.source.version>1.7</jdk.compile.source.version>
		<!-- jdk编译目标版本 -->
		<jdk.compile.target.version>1.7</jdk.compile.target.version>
		<!-- springframework版本 -->
		<springframe.version>4.1.6.RELEASE</springframe.version>
		<!-- junit版本 -->
		<junit.version>4.12</junit.version>
		<!-- log4j版本 -->
		<log4j.version>1.2.17</log4j.version>
		<!-- dubbo版本 -->
		<dubbo.version>2.5.3</dubbo.version>
		<!-- zookeeper版本 -->
		<zookeeper.version>3.4.6</zookeeper.version>
		<!-- zkclient版本 -->
		<zkclient.version>0.1</zkclient.version>
	</properties>
	<dependencies>
		<!-- https://mvnrepository.com/artifact/com.alibaba/dubbo -->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>dubbo</artifactId>
			<version>2.5.3</version>
		</dependency>
		<dependency>
			<groupId>org.apache.zookeeper</groupId>
			<artifactId>zookeeper</artifactId>
			<version>${zookeeper.version}</version>
		</dependency>
		<!-- zkclient -->
		<dependency>
			<groupId>com.github.sgroschupf</groupId>
			<artifactId>zkclient</artifactId>
			<version>${zkclient.version}</version>
		</dependency>
		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>${log4j.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>${springframe.version}</version>
		</dependency>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>${junit.version}</version>
		</dependency>
	</dependencies>

provider.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="demo-provider"/>
    <!-- use multicast registry center to export service -->
    <dubbo:registry address="zookeeper://192.168.3.20:2181"/>
    <!-- use dubbo protocol to export service on port 20880 -->
    <dubbo:protocol name="dubbo" port="20880"/>
    <!-- service implementation, as same as regular local bean -->
    <bean id="demoService" class="com.jeff.provider.DemoServiceImpl"/>
    <!-- declare the service interface to be exported -->
    <dubbo:service interface="com.jeff.api.DemoService" ref="demoService"/>
</beans>

提供者测试启动类

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Provider {
    public static void main(String[] args) throws Exception {
        System.setProperty("java.net.preferIPv4Stack", "true");
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"classpath:provider.xml"});
        context.start();
        System.out.println("Provider started.");
        System.in.read(); // press any key to exit
    }
}

在zookeeper端可以看到注册上去的文件

[zk: localhost:2181(CONNECTED) 12] ls /dubbo
[com.jeff.api.DemoService]

dubbo消费者
comsumer.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="demo-provider"/>
    <!-- use multicast registry center to export service -->
    <dubbo:registry address="zookeeper://192.168.3.20:2181"/>
    <!-- use dubbo protocol to export service on port 20880 -->
    <dubbo:protocol name="dubbo" port="20880"/>
    <!-- service implementation, as same as regular local bean -->
    <!-- declare the service interface to be exported -->
    <dubbo:reference interface="com.jeff.api.DemoService" id="demoService"/>
</beans> 

消费者测试类

import com.jeff.api.DemoService;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Consumer {
    public static void main(String[] args) throws Exception {
        System.setProperty("java.net.preferIPv4Stack", "true");
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"classpath:consumer.xml"});
        DemoService demoService = (DemoService)context.getBean("demoService");
        String result = demoService.sayHello("jeff");
        System.out.println("result = " + result);
        context.start();
        System.out.println("consumer started.");
        System.in.read(); // press any key to exit
    }
}