Dubbo服務的搭建


  dubbo框架主要作用是基於RPC的遠程調用服務管理,但是注冊中心是用的zookeeper,搭建dubbo,首先要安裝zookeeper,配置zookeeper。。。

實現功能如圖所示:(存在2個系統,A系統和B系統,A系統調用B系統的接口獲取數據,用於查詢用戶列表)

一、安裝zookeeper

1、解壓下載的安裝包

2、修改配置文件zoo.cfg(解壓出來不是這個名字,是zoo_sample.cfg,改了一下名字):該目錄必須存在。

3、啟動zookeeper服務:

 二、搭建B系統

1、創建工程(maven工程)

2、導入依賴

 1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 2     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 3     <modelVersion>4.0.0</modelVersion>
 4     <groupId>cn.itcast.dubbo</groupId>
 5     <artifactId>dubbo-b</artifactId>
 6     <version>1.0.0-SNAPSHOT</version>
 7     <packaging>war</packaging>
 8 
 9     <dependencies>
10         <!-- dubbo采用spring配置方式,所以需要導入spring容器依賴 -->
11         <dependency>
12             <groupId>org.springframework</groupId>
13             <artifactId>spring-webmvc</artifactId>
14             <version>4.1.3.RELEASE</version>
15         </dependency>
16         <dependency>
17             <groupId>org.slf4j</groupId>
18             <artifactId>slf4j-log4j12</artifactId>
19             <version>1.6.4</version>
20         </dependency>
21 
22         <dependency>
23             <groupId>org.apache.zookeeper</groupId>
24             <artifactId>zookeeper</artifactId>
25             <version>3.3.3</version>
26         </dependency>
27 
28         <dependency>
29             <groupId>com.github.sgroschupf</groupId>
30             <artifactId>zkclient</artifactId>
31             <version>0.1</version>
32         </dependency>
33 
34         <dependency>
35             <groupId>com.alibaba</groupId>
36             <artifactId>dubbo</artifactId>
37             <version>2.5.3</version>
38             <exclusions>
39                 <exclusion>
40                     <!-- 排除傳遞spring依賴 -->
41                     <artifactId>spring</artifactId>
42                     <groupId>org.springframework</groupId>
43                 </exclusion>
44             </exclusions>
45         </dependency>
46     </dependencies>
47     <build>
48         <plugins>
49             <plugin>
50                 <groupId>org.apache.tomcat.maven</groupId>
51                 <artifactId>tomcat7-maven-plugin</artifactId>
52                 <version>2.2</version>
53                 <configuration>
54                     <port>8181</port>
55                     <path>/</path>
56                 </configuration>
57             </plugin>
58         </plugins>
59     </build>
60 </project>

3、配置log4j文件

1 log4j.rootLogger=DEBUG,A1
2 log4j.logger.com.taotao = DEBUG
3 log4j.logger.org.mybatis = DEBUG
4 
5 log4j.appender.A1=org.apache.log4j.ConsoleAppender
6 log4j.appender.A1.layout=org.apache.log4j.PatternLayout
7 log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c]-[%p] %m%n

4、創建User對象

package cn.itcast.dubbo.pojo;

//使用dubbo要求傳輸的對象必須實現序列化接口
public class User implements java.io.Serializable {

    private static final long serialVersionUID = -2668999087589887337L;

    private Long id;

    private String username;

    private String password;

    private Integer age;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

}

5、創建UserService(接口)提供查詢服務

 1 package cn.itcast.dubbo.service;
 2 
 3 import java.util.List;
 4 
 5 import cn.itcast.dubbo.pojo.User;
 6 
 7 public interface UserService {
 8 
 9     /**
10      * 查詢所有的用戶數據
11      * 
12      * @return
13      */
14     public List<User> queryAll();
15 
16 }

6、創建UserServiceImpl實現類

 1 package cn.itcast.dubbo.service.impl;
 2 
 3 import java.util.ArrayList;
 4 import java.util.List;
 5 
 6 import cn.itcast.dubbo.pojo.User;
 7 import cn.itcast.dubbo.service.UserService;
 8 
 9 public class UserServiceImpl implements UserService{
10 
11     /**
12      * 實現查詢,這里做模擬實現,不做具體的數據庫查詢
13      */
14     public List<User> queryAll() {
15         List<User> list = new ArrayList<User>();
16         for (int i = 0; i < 10; i++) {
17             User user = new User();
18             user.setAge(10 + i);
19             user.setId(Long.valueOf(i + 1));
20             user.setPassword("123456");
21             user.setUsername("username_" + i);
22             list.add(user);
23         }
24         return list;
25     }
26 
27 }

7、編寫dubbo配置文件

具體配置:(dubbo-server.xml的配置,注意這個自己在eclipse中導入一下dubbo的xsd約束文件,不然會報錯的)

 1 <beans xmlns="http://www.springframework.org/schema/beans"
 2     xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
 3     xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
 4     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
 5     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
 6     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
 7     http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
 8     http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
 9 
10     <!-- 提供方應用信息,用於計算依賴關系 -->
11     <dubbo:application name="dubbo-b-server" />
12 
13     <!-- 這里使用的注冊中心是zookeeper -->
14     <dubbo:registry address = "zookeeper://127.0.0.1:2181" client="zkclient" />
15 
16     <!-- 用dubbo協議在20880端口暴露服務 -->
17     <dubbo:protocol name="dubbo" port="20880" />
18 
19     <!-- 將該接口暴露到dubbo中 -->
20     <dubbo:service interface="cn.itcast.dubbo.service.UserService " ref="userServiceImpl"/>
21 
22     <!-- 將具體的實現類加入到Spring容器中 -->
23     <bean id="userServiceImpl" class="cn.itcast.dubbo.service.impl.UserServiceImpl"/>
24 
25 </beans>

8、編寫web.xml 文件,主要是配置spring的容器,項目啟動的時候啟動spring的容器

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 3     xmlns="http://java.sun.com/xml/ns/javaee"
 4     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
 5     id="WebApp_ID" version="2.5">
 6     <display-name>dubbo-b</display-name>
 7     
 8     <context-param>
 9         <param-name>contextConfigLocation</param-name>
10         <param-value>classpath:dubbo/dubbo-*.xml</param-value>
11     </context-param>
12     
13     <!--Spring的ApplicationContext 載入 -->
14     <listener>
15         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
16     </listener>
17     
18 <welcome-file-list>
19     <welcome-file>index.jsp</welcome-file>
20 </welcome-file-list>
21 
22 </web-app>

9、啟動Tomcat(Maven Build的方式啟動Tomcat)

查看Tomcat日志:發現userservice的服務已經發布成功了。

1 2019-05-19 21:59:13,588 [localhost-startStop-1] [com.alibaba.dubbo.registry.zookeeper.ZookeeperRegistry]-[INFO]  [DUBBO] Load registry store file C:\Users\ssc\.dubbo\dubbo-registry-127.0.0.1.cache, data: {cn.itcast.dubbo.service.UserService=empty://169.254.103.222:20880/cn.itcast.dubbo.service.UserService?anyhost=true&application=dubbo-b-server&category=configurators&check=false&dubbo=2.5.3&interface=cn.itcast.dubbo.service.UserService&methods=queryAll&pid=3936&side=provider&timestamp=1558177989176}, dubbo version: 2.5.3, current host: 127.0.0.1
2 2019-05-19 21:59:13,606 [localhost-startStop-1] [org.I0Itec.zkclient.ZkConnection]-[DEBUG] Creating new ZookKeeper instance to connect to 127.0.0.1:2181.
3 2019-05-19 21:59:13,608 [ZkClient-EventThread-19-127.0.0.1:2181] [org.I0Itec.zkclient.ZkEventThread]-[INFO] Starting ZkClient event thread.

 可以看到,已經將UserService服務注冊到zookeeper注冊中心,協議采用的是dubbo

三、搭建A系統

1、創建工程

2、導入依賴

 1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 2     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 3     <modelVersion>4.0.0</modelVersion>
 4     <groupId>cn.itcast.dubbo</groupId>
 5     <artifactId>dubbo-a</artifactId>
 6     <version>0.0.1-SNAPSHOT</version>
 7 
 8     <dependencies>
 9         <!-- dubbo采用spring配置方式,所以需要導入spring容器依賴 -->
10         <dependency>
11             <groupId>org.springframework</groupId>
12             <artifactId>spring-webmvc</artifactId>
13             <version>4.1.3.RELEASE</version>
14         </dependency>
15         <dependency>
16             <groupId>org.slf4j</groupId>
17             <artifactId>slf4j-log4j12</artifactId>
18             <version>1.6.4</version>
19         </dependency>
20 
21         <dependency>
22             <groupId>com.alibaba</groupId>
23             <artifactId>dubbo</artifactId>
24             <version>2.5.3</version>
25             <exclusions>
26                 <exclusion>
27                     <!-- 排除傳遞spring依賴 -->
28                     <artifactId>spring</artifactId>
29                     <groupId>org.springframework</groupId>
30                 </exclusion>
31             </exclusions>
32         </dependency>
33 
34         <dependency>
35             <groupId>org.apache.zookeeper</groupId>
36             <artifactId>zookeeper</artifactId>
37             <version>3.3.3</version>
38         </dependency>
39 
40         <dependency>
41             <groupId>com.github.sgroschupf</groupId>
42             <artifactId>zkclient</artifactId>
43             <version>0.1</version>
44         </dependency>
45 
46         <!-- 單元測試 -->
47         <dependency>
48             <groupId>junit</groupId>
49             <artifactId>junit</artifactId>
50             <version>4.10</version>
51             <scope>test</scope>
52         </dependency>
53     </dependencies>
54 </project>

3、配置log4j文件

1 log4j.rootLogger=DEBUG,A1
2 log4j.logger.com.taotao = DEBUG
3 log4j.logger.org.mybatis = DEBUG
4 
5 log4j.appender.A1=org.apache.log4j.ConsoleAppender
6 log4j.appender.A1.layout=org.apache.log4j.PatternLayout
7 log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c]-[%p] %m%n

4、從b系統中拷貝User對象、UserService接口到a系統

 

5、編寫dubbo配置文件

配置文件如下:

 1 <beans xmlns="http://www.springframework.org/schema/beans"
 2     xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
 3     xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
 4     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
 5     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
 6     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
 7     http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
 8     http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
 9 
10     <!-- 提供方應用信息,用於計算依賴關系 -->
11     <dubbo:application name="dubbo-a-consumer"/>
12 
13     <!-- 這里使用的注冊中心是zookeeper -->
14     <dubbo:registry address="zookeeper://127.0.0.1:2181" client="zkclient"/>
15     
16     <!-- 從注冊中心中查找服務 -->
17     <dubbo:referenceid="userService" interface="cn.itcast.dubbo.service.UserService"/>
18 
19 </beans>

6、編寫UserService測試用例

 1 package cn.itcast.dubbo.service;
 2 
 3 import java.net.InetAddress;
 4 import java.util.List;
 5 
 6 import org.junit.Before;
 7 import org.junit.Test;
 8 import org.springframework.context.ApplicationContext;
 9 import org.springframework.context.support.ClassPathXmlApplicationContext;
10 
11 import cn.itcast.dubbo.pojo.User;
12 
13 import com.alibaba.dubbo.common.utils.NetUtils;
14 
15 public class UserServiceTest {
16 
17     private UserService userService;
18 
19     @Before
20     public void setUp() throws Exception {
21         ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:dubbo/*.xml");
22         this.userService = applicationContext.getBean(UserService.class);
23     }
24 
25     @Test
26     public void testQueryAll() {
27         List<User> users = this.userService.queryAll();
28         for (User user : users) {
29             System.out.println(user);
30         }
31     }
32      
33     public static void main(String[] args) {
34         InetAddress localAddress = NetUtils.getLocalAddress();
35         System.out.println(localAddress.getHostAddress());
36 
37     }
38 }

四、解決代碼重復的問題

1、創建dubbo-b-api

2、將dubbo-b中的pojo和service接口移動到dubbo-b-api中

3、在dubbo-b的pom.xml文件中添加dubbo-b-api的依賴

4、在dubbo-a的pom.xml文件中添加dubbo-b-api的依賴,並且將pojo與service接口刪除

 

5、分別刪除dubbo-a和dubbo-b中的重復代碼

注意:啟動時,不要忘記吧dubbo-b-api項目maven install安裝到中央倉庫


免責聲明!

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



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