分布式框架Dubbo配置和實例


准備工作:

1、ZooKeeper:需要去Apache Zookeeper官網下載Zookeeper.tar.gz包,Dubbo是依賴於Zookeeper的

2、Maven:需要去Apache Maven官網下載Maven-xxx.bin.zip包,主要是為了打包war掛在Tomcat下

3、Tomcat:當做運行的服務器

4、Dubbo:http://dubbo.io/ 需要下載dubbo.zip到本地

5、Ecplise,IDE供寫代碼使用(不要忘記安裝和配置JDK)

廢話不說,直接開始

一、創建項目提供者

打開Ecplise----File-----New------Project,選擇Maven Project,然后Next

這里只是為了演示,Group Id和Artifact Id名稱你可以隨意起

然后等待項目創建完成

創建完成之后修改項目下的pom.xml文件

 1 <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">
 2   <modelVersion>4.0.0</modelVersion>
 3   <groupId>com.luo</groupId>
 4   <artifactId>provider</artifactId>
 5   <version>0.0.1-SNAPSHOT</version>
 6   <properties>
 7       <spring.version>3.2.8.RELEASE</spring.version>
 8   </properties>
 9   
10   <dependencies>
11       <dependency>
12           <groupId>com.alibaba</groupId>
13           <artifactId>dubbo</artifactId>
14           <version>2.5.3</version>
15           <exclusions>
16               <exclusion>
17                   <groupId>org.springframework</groupId>
18                   <artifactId>spring</artifactId>
19               </exclusion>
20           </exclusions>
21       </dependency>
22       <dependency>  
23           <groupId>com.github.sgroschupf</groupId>  
24           <artifactId>zkclient</artifactId>  
25           <version>0.1</version>  
26       </dependency>
27       <!-- spring相關 -->  
28       <dependency>  
29           <groupId>org.springframework</groupId>  
30           <artifactId>spring-core</artifactId>  
31           <version>${spring.version}</version>  
32       </dependency>  
33       <dependency>  
34           <groupId>org.springframework</groupId>  
35           <artifactId>spring-beans</artifactId>  
36           <version>${spring.version}</version>  
37       </dependency>  
38       <dependency>  
39           <groupId>org.springframework</groupId>  
40           <artifactId>spring-context</artifactId>  
41           <version>${spring.version}</version>  
42       </dependency>  
43       <dependency>  
44           <groupId>org.springframework</groupId>  
45           <artifactId>spring-jdbc</artifactId>  
46           <version>${spring.version}</version>  
47       </dependency>  
48       <dependency>  
49           <groupId>org.springframework</groupId>  
50           <artifactId>spring-web</artifactId>  
51           <version>${spring.version}</version>  
52       </dependency>  
53       <dependency>  
54           <groupId>org.springframework</groupId>  
55           <artifactId>spring-webmvc</artifactId>  
56           <version>${spring.version}</version>  
57       </dependency>  
58       <dependency>  
59           <groupId>org.springframework</groupId>  
60           <artifactId>spring-aop</artifactId>  
61           <version>${spring.version}</version>  
62       </dependency>  
63       <dependency>  
64           <groupId>org.springframework</groupId>  
65           <artifactId>spring-tx</artifactId>  
66           <version>${spring.version}</version>  
67       </dependency>  
68       <dependency>  
69           <groupId>org.springframework</groupId>  
70           <artifactId>spring-orm</artifactId>  
71           <version>${spring.version}</version>  
72       </dependency>  
73       <dependency>  
74           <groupId>org.springframework</groupId>  
75           <artifactId>spring-context-support</artifactId>  
76           <version>${spring.version}</version>  
77       </dependency>  
78       <dependency>  
79           <groupId>org.springframework</groupId>  
80           <artifactId>spring-test</artifactId>  
81           <version>${spring.version}</version>  
82       </dependency>  
83       <dependency>  
84           <groupId>org.springframework</groupId>  
85           <artifactId>spring-jms</artifactId>  
86           <version>${spring.version}</version>  
87       </dependency>  
88   </dependencies>
89 </project>

然后在項目中添加文件

ITestService.java和TestService.java

1 package com.song.Iservice;
2 
3 public interface ITestService {
4     public String getName();
5 }
 1 package com.song.service;
 2 import com.song.Iservice.*;
 3 public class TestService implements ITestService  {
 4 
 5     public String getName() {
 6         // TODO Auto-generated method stub
 7         return "song";
 8     }
 9 
10 }
 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 4     xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"  
 5     xsi:schemaLocation="http://www.springframework.org/schema/beans  
 6         http://www.springframework.org/schema/beans/spring-beans.xsd  
 7         http://code.alibabatech.com/schema/dubbo  
 8         http://code.alibabatech.com/schema/dubbo/dubbo.xsd ">
 9     <!--具體實現的bean-->
10     <bean id="testService" class="com.luo.service.impl.TestServiceImpl" />
11     <!--提供方應用信息,用於計算依賴關系-->
12     <dubbo:application name="provider" />
13     <!--使用Zookeeper注冊中心暴露服務地址-->
14     <dubbo:registry address="zookeeper://127.0.0.1:2181" />
15     <!--用dubbo協議在29014端口暴露服務-->
16     <dubbo:protocol name="dubbo" port="29014" />
17     <!--聲明需要暴露的服務接口-->
18     <dubbo:service interface="com.luo.service.TestService" ref="testService" />
19 </beans>

上面是application.xml

下面是Test.java

 1 package com.song.test;
 2 
 3 import java.io.IOException;
 4 import org.springframework.context.support.ClassPathXmlApplicationContext;
 5 
 6 public class Test {
 7     public static void main(String[] args) {
 8         ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"application.xml"});
 9         context.start();
10         System.out.println("Provider register Success");
11         try {
12             System.in.read();//讓此程序一直跑,表示一直提供服務
13         }
14         catch(IOException e) {
15             e.printStackTrace();
16         }
17     }
18 }

上面提供者的程序已經寫完了

接下來是配置了

1、Zookeeper配置:打開Zookeeper所在文件的bin目錄運行zkServer.cmd(別忘了配置conf里面的cfg文件並且重命名為zoo.cfg)

2、打開dubbo所在文件dubbo-admin目錄,在此目錄中打開cmd 然后輸入

mvn package -Dmaven.skip.test=true

如果成功會生成一個target文件夾,里面有個war文件,把這個文件拷貝到Tomcat下的WebApps目錄下

3、運行Tomcat會生成一個和war同名稱的文件夾,打開這個文件夾,下面的WEB-INF子文件夾里面有個dubbo.properties的文件

可以看到下面的內容,這就是網頁登錄的賬號和密碼

1 dubbo.registry.address=zookeeper://127.0.0.1:2181
2 dubbo.admin.root.password=root
3 dubbo.admin.guest.password=guest

在Tomcat中輸入訪問的文件夾名稱就會彈出登錄對話框,輸入完用戶和密碼后就會進入到Dubbo-admin的主界面

 

 

 3、啟動Ecplise的Test.java---Run as Java Application,可以看到logcat輸出“Provider register Success”

 輸入:com.song.service可以得到如下界面

下面我們來寫Consumer的代碼

 和前面一樣建一個Maven項目,命名為consumer

1、修改pom.xml

 1 <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">
 2   <modelVersion>4.0.0</modelVersion>
 3   <groupId>com.song</groupId>
 4   <artifactId>consumer</artifactId>
 5   <version>0.0.1-SNAPSHOT</version>
 6   <properties>  
 7       <spring.version>3.2.8.RELEASE</spring.version>  
 8   </properties>  
 9 
10   <dependencies>  
11       <!-- 添加provider的jar包 -->  
12       <dependency>  
13           <groupId>com.song</groupId>  
14           <artifactId>provider</artifactId>  
15           <version>0.0.1-SNAPSHOT</version>  
16       </dependency>  
17       <!-- 添加dubbo依賴 -->  
18       <dependency>  
19           <groupId>com.alibaba</groupId>  
20           <artifactId>dubbo</artifactId>  
21           <version>2.5.3</version>  
22           <exclusions>  
23               <exclusion>  
24                   <groupId>org.springframework</groupId>  
25                   <artifactId>spring</artifactId>  
26               </exclusion>  
27           </exclusions>  
28       </dependency>  
29       <!-- 添加zk客戶端依賴 -->  
30       <dependency>  
31           <groupId>com.github.sgroschupf</groupId>  
32           <artifactId>zkclient</artifactId>  
33           <version>0.1</version>  
34       </dependency>  
35       <!-- spring相關 -->  
36       <dependency>  
37           <groupId>org.springframework</groupId>  
38           <artifactId>spring-core</artifactId>  
39           <version>${spring.version}</version>  
40       </dependency>  
41       <dependency>  
42           <groupId>org.springframework</groupId>  
43           <artifactId>spring-beans</artifactId>  
44           <version>${spring.version}</version>  
45       </dependency>  
46       <dependency>  
47           <groupId>org.springframework</groupId>  
48           <artifactId>spring-context</artifactId>  
49           <version>${spring.version}</version>  
50       </dependency>  
51       <dependency>  
52           <groupId>org.springframework</groupId>  
53           <artifactId>spring-jdbc</artifactId>  
54           <version>${spring.version}</version>  
55       </dependency>  
56       <dependency>  
57           <groupId>org.springframework</groupId>  
58           <artifactId>spring-web</artifactId>  
59           <version>${spring.version}</version>  
60       </dependency>  
61       <dependency>  
62           <groupId>org.springframework</groupId>  
63           <artifactId>spring-webmvc</artifactId>  
64           <version>${spring.version}</version>  
65       </dependency>  
66       <dependency>  
67           <groupId>org.springframework</groupId>  
68           <artifactId>spring-aop</artifactId>  
69           <version>${spring.version}</version>  
70       </dependency>  
71       <dependency>  
72           <groupId>org.springframework</groupId>  
73           <artifactId>spring-tx</artifactId>  
74           <version>${spring.version}</version>  
75       </dependency>  
76       <dependency>  
77           <groupId>org.springframework</groupId>  
78           <artifactId>spring-orm</artifactId>  
79           <version>${spring.version}</version>  
80       </dependency>  
81       <dependency>  
82           <groupId>org.springframework</groupId>  
83           <artifactId>spring-context-support</artifactId>  
84           <version>${spring.version}</version>  
85       </dependency>  
86       <dependency>  
87           <groupId>org.springframework</groupId>  
88           <artifactId>spring-test</artifactId>  
89           <version>${spring.version}</version>  
90       </dependency>  
91       <dependency>  
92           <groupId>org.springframework</groupId>  
93           <artifactId>spring-jms</artifactId>  
94           <version>${spring.version}</version>  
95       </dependency>  
96   </dependencies>  
97 </project>

其實就是添加了前一個項目的依賴

1 <!-- 添加provider的jar包 -->  
2       <dependency>  
3           <groupId>com.song</groupId>  
4           <artifactId>provider</artifactId>  
5           <version>0.0.1-SNAPSHOT</version>  
6       </dependency>  

application.xml

 1 <?xml version="1.0" encoding="UTF-8"?>  
 2 <beans xmlns="http://www.springframework.org/schema/beans"  
 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"  
 4     xsi:schemaLocation="http://www.springframework.org/schema/beans  
 5         http://www.springframework.org/schema/beans/spring-beans.xsd  
 6         http://code.alibabatech.com/schema/dubbo  
 7         http://code.alibabatech.com/schema/dubbo/dubbo.xsd ">        
 8     <!-- 消費方應用名,用於計算依賴關系,不是匹配條件,不要與提供方一樣 -->  
 9     <dubbo:application name="consumer" />     
10       <!-- 使用multicast廣播注冊中心暴露發現服務地址 -->  
11     <dubbo:registry  protocol="zookeeper" address="zookeeper://127.0.0.1:2181" />       
12       <!-- 生成遠程服務代理,可以和本地bean一樣使用demoService -->  
13     <dubbo:reference id="testService" interface="com.luo.service.TestService" />  
14 </beans> 

consumerTest.java

 1 package consumer;
 2 
 3 import java.io.IOException;
 4 
 5 import org.springframework.context.support.ClassPathXmlApplicationContext;
 6 
 7 import com.luo.service.TestService;
 8 
 9 public class consumerTest {
10     public static void main(String[] args) {
11         ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
12                 new String[] { "application.xml" });
13         context.start();
14         TestService testService = (TestService) context.getBean("testService");
15         System.out.println(testService.getName());
16         try {
17             System.in.read();
18         } catch (IOException e) {       
19             e.printStackTrace();
20         }  
21 
22     }
23 }

然后啟動項目,會在消費者那里看到有一個IP

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM