在這一篇主要講解怎麼配置運行一個dubbo程序(在此之前,大家首先去下載zookeeper註冊中心,並且安裝好,我這裏用的是公司的註冊中心IP)
首先是provider層的一些配置
Provider:
首先建立了一個maven項目,因爲Dubbo需用Spring去加載Dubbo的配置即可,Dubbo基於Spring的Schema擴展進行加載,所以
在pom裏面配置spring相關的配置
org.springframework.aop ——Spring的面向切面編程,提供AOP(面向切面編程)的實現
org.springframework.asm——spring2.5.6的時候需要asm jar包,spring3.0開始提供它自己獨立的asm jar包
org.springframework.core——Spring的核心工具包,其他包依賴此包
org.springframework.beans——所有應用都用到,包含訪問配置文件,創建和管理bean等,是Spring IOC的基礎實現。
org.springframework.context——提供在基礎IOC功能上的擴展服務,此外還提供許多企業級服務的支持,有郵件服務、任務調度、
JNDI定位,EJB集成、遠程訪問、緩存以及多種視圖層框架的支持。
org.springframework.expression——Spring表達式語言
還有dubbo的配置,用的dubbo版本是2.5.3版本
Zookeeper配置,用的是3.3.6版本
pom文件代碼
<?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"> <modelVersion>4.0.0</modelVersion> <groupId>com.provider</groupId> <artifactId>provider</artifactId> <version>1.0-SNAPSHOT</version> <name>dubboserver</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <spring.version>3.1.4.RELEASE</spring.version> <slf4j.version>1.6.6</slf4j.version> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <!-- Spring --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-asm</artifactId> <version>${spring.version}</version> </dependency> <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-expression</artifactId> <version>${spring.version}</version> </dependency> <!-- spring end --> <!-- log --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.16</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>${slf4j.version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>${slf4j.version}</version> </dependency> <!-- dubbo --> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>2.5.3</version> </dependency> <!-- zkclient --> <dependency> <groupId>com.github.sgroschupf</groupId> <artifactId>zkclient</artifactId> <version>0.1</version> </dependency> <!-- zookeeper --> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.3.6</version> </dependency> </dependencies> <build> <finalName>dubbo-demo</finalName> <plugins> <!-- 非多個資源配置 start--> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.1</version> <configuration> <source>1.5</source> <target>1.5</target> <encoding>UTF-8</encoding> <failOnError>false</failOnError> </configuration> </plugin> <!-- 非多個資源配置 end--> </plugins> </build> </project>
然後呢配置ApplicationContext.xml的配置文件信息
Provider:
主要配置四個方面的東西,
(1) 具體的實現bean
(2) 提供方的應用信息,提供依賴關係
(3) 使用zookeeper註冊中心暴露接口
(4) 用dubbo協議在某個端口暴露服務
(5) 聲明需要暴露的服務接口
<?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="testService" class="com.provider.dubbo.serviceImpl.TestServiceImpl" /> <!-- 提供方應用信息,用於計算依賴關係 --> <dubbo:application name="providerTest" /> <!-- 使用zookeeper註冊中心暴露服務地址 --> <dubbo:registry address="zookeeper://IP地址" /> <!-- 用dubbo協議在20880端口暴露服務 --> <dubbo:protocol name="dubbo" port="20885" /> <!-- 聲明需要暴露的服務接口 --> <dubbo:service interface="com.provider.dubbo.service.TestService" ref="testService" /> </beans>
然後就是提供者需要提供什麼接口了
首先我定義了一個ServiceTest接口
package com.provider.dubbo.service; /** * Created by WUYAO873 on 2017/8/14. */ public interface TestService { public String getName(); }
package com.provider.dubbo.serviceImpl; import com.provider.dubbo.service.TestService; import java.io.Serializable; /** * Created by WUYAO873 on 2017/8/14. */ public class TestServiceImpl implements TestService,Serializable { public String getName() { return "我是提供者"; } }
最後建立了一個測試類TestServiceTest
package com.provider.dubbo; import java.io.IOException; import org.springframework.context.support.ClassPathXmlApplicationContext; /** * Created by WUYAO873 on 2017/8/14. */ public class TestServiceTest { public static void main(String[] args) { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( new String[]{"applicationContext.xml"}); context.start(); System.out.println("提供服務者已經註冊"); try { System.in.read(); } catch (IOException e) { e.printStackTrace(); } } }
這個是整個provider結構圖
下面我們配置消費者
Consumer:
消費者層的配置pom配置和提供者的配置類似(可以拷貝),只是增加了一個依賴包,依賴於providor的groupId,artifactId和Version.
然後基本的版本配置就是這樣,接下來需要配置一些bean信息和zookeeper的信息,配置在applicationContxt.Xml裏面
Consumer的ApplicationContext.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" /> <!-- 使用multicast廣播註冊中心暴露發現服務地址 --> <dubbo:registry protocol="zookeeper" address="zookeeper://ID地址" /> <!-- 生成遠程服務代理,可以和本地bean一樣使用demoService --> <dubbo:reference id="testService" interface="com.provider.dubbo.service.TestService" /> </beans>
package com.provider.dubbo.service; import org.springframework.context.support.ClassPathXmlApplicationContext; import java.io.IOException; public class ConsumerServiceTest { public static void main(String[] args) { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( new String[] { "applicationContext.xml" }); context.start(); TestService testService = (TestService) context.getBean("testService"); System.out.println(testService.getName()); try { System.in.read(); } catch (IOException e) { e.printStackTrace(); } } }
這是整個Consumer的結構圖
這樣下來我們就配置好了,
接下來我們先要啓動zookeeper註冊中心,
然後啓動我們的提供者provider的測試類TestServiceTest
這樣呢,我們就已經把接口暴露在了註冊中心,我們在消費者就可以拿到
這個時候我們就可以早zookeeper的註冊中心查到自己註冊的提供者
(1)
(2)
也可以根據你在provider的配置文件裏面的提供者應用名查詢
運行消費者的ConsumerServiceTest類
運行成功,得到提供者的提供信息,
我這裏用的zookeeper註冊中心是用公司的IP地址,大家在需要的時候可以去官網下載安裝