springboot整合apache dubbo

由於dubbo在2018年2月15日成爲 Apache 基金會孵化項目,所以不再是阿里維護的一個項目了。然後似乎就出現了斷層,網絡上大部分的文章都是對於阿里階段的dubbo開發的教程,導致尋找了很久才能找到apache的dubbo開發教程,所以想在這裏整理一下最新的dubbo與springboot的簡單整合。

首先我們需要下載運行zookeeper:
http://mirror.bit.edu.cn/apac...
下載最新的版本,這裏需要知道的是項目中的zookeeper版本號最好和下載的版本一致。
我們只需要下載解壓之後將conf裏面的zoo_sample.cfg複製重命名爲zoo.cfg後運行bin下面的zkServer.cmd即可。

新版本dubbo admin的搭建我還沒有搞明白,所以用的是之前的老版本,研究明白會更新的。
老版dubbo admin搭建網上有很多,我就不再贅述了。

這裏我用的是IDEA進行開發構建的項目。

  • 首先我們需要新建一個空項目:

    clipboard.png

    填上項目名稱,然後點擊完成即可。

    clipboard.png

  • 由於是新建的空項目,所以我們需要新建模塊:

    clipboard.png

    我們這裏用的是springboot模塊,先新建一個生產者模塊:

    clipboard.png

    clipboard.png

    clipboard.png

    clipboard.png
    按照上述的順序再新建一個消費者模塊。

  • 由於dubbo官網推薦將接口層單獨作爲一個獨立模塊使用。然後生產者和消費者均依賴此模塊進行操作。
    所以我們需要新建一個maven模塊。

    clipboard.png

    clipboard.png
    三個模塊建完之後:
    clipboard.png

  • 我們首先進行公共模塊的開發,也就是common模塊的開發。
    新建一個實體類和一個service接口:
    clipboard.png

    public class User implements Serializable {
    
        private String name;
    
        private Integer age;
    
        public User() {
        }
    
        public User(String name, Integer age) {
            this.name = name;
            this.age = age;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public Integer getAge() {
            return age;
        }
    
        public void setAge(Integer age) {
            this.age = age;
        }
    }
    public interface GetUserService {
    
        List<User> getUserList(String name);
    
    }

    因爲希望將common模塊作爲模板,生產者和消費者模塊都要繼承它,所以在它的pom文件裏面整合所有需要的包即可

    <dependencies>
            <!-- apache的springboot dubbo依賴 -->
            <dependency>
                <groupId>org.apache.dubbo</groupId>
                <artifactId>dubbo-spring-boot-starter</artifactId>
                <version>2.7.3</version>
            </dependency>
    
            <!-- zookeeper -->
            <dependency>
                <groupId>org.apache.zookeeper</groupId>
                <artifactId>zookeeper</artifactId>
                <version>3.4.14</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.slf4j</groupId>
                        <artifactId>slf4j-log4j12</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>log4j</groupId>
                        <artifactId>log4j</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>io.netty</groupId>
                        <artifactId>netty</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
    
            <!-- Zookeeper客戶端 -->
            <dependency>
                <groupId>org.apache.curator</groupId>
                <artifactId>curator-recipes</artifactId>
                <version>4.2.0</version>
            </dependency>
        </dependencies>

    common模塊開發結束了。

  • 現在開發生產者模塊,只需要繼承common模塊,然後實現service接口即可。

    clipboard.png
    這裏的Service是apache.dubbo的包,需要注意。

    @Service
    public class GetUserServiceImpl implements GetUserService {
    
        @Override
        public List<User> getUserList(String name) {
            //此處沒有連接數據庫,所以就先生成幾條數據返回即可。
            System.out.println(name);
            List<User> list = new ArrayList<>();
            list.add(new User("小明",20));
            list.add(new User("小強",21));
            list.add(new User("小紅",22));
            return list;
        }
    }
  • 將application.properties改名爲application.yml,然後進行配置

    server:
      port: 8082 #端口號
    
    dubbo:
      application:
        name: provider #當前服務/應用的名字
    #  scan:
    #    base-packages: com.zhouxiaoxi.provider.service.impl #開啓包掃描,可替代 @EnableDubbo 註解
    
      monitor:
        protocol: registry #連接監控中心
    
      protocol:
        name: dubbo #通信協議
        port: 20880 #接口
    
      registry:
        address: 127.0.0.1:2181 #註冊中心的地址
        protocol: zookeeper #註冊中心的協議

    在這裏我們還是在啓動類上添加 @EnableDubbo 註解,因爲比較簡便:

    @EnableDubbo
    @SpringBootApplication
    public class ProviderApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(ProviderApplication.class, args);
        }
    
    }

    然後我們需要在pom文件裏面繼承common的模塊:

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
    
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    
        <!-- common模塊 -->
        <dependency>
            <groupId>com.zhouxiaoxi</groupId>
            <artifactId>common</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>

    現在可以啓動生產者,然後看dubbo admin界面就會發現一個提供者:

    clipboard.png

  • 接下來我們繼續開發消費者:
    這裏我們只是需要寫一個controller來調用一下這個接口就可以了:
    clipboard.png

    @RestController
    public class GetUserController {
    
        @Reference
        GetUserService getUserService;
    
        @RequestMapping("getUserList")
        public List<User> getUserList(@RequestParam("name") String name){
            return getUserService.getUserList(name);
        }
    
    }
  • 將application.properties改名爲application.yml,然後進行配置

    server:
      port: 8081 #端口號
    
    dubbo:
      application:
        name: consumer #當前服務/應用的名字
      #  scan:
      #    base-packages: com.zhouxiaoxi.provider.service.impl #開啓包掃描,可替代 @EnableDubbo 註解
    
      monitor:
        protocol: registry #連接監控中心
    
      protocol:
        name: dubbo #通信協議
        port: 20880 #接口
    
      registry:
        address: 127.0.0.1:2181 #註冊中心的地址
        protocol: zookeeper #註冊中心的協議

    在這裏我們還是在啓動類上添加 @EnableDubbo 註解,因爲比較簡便:

    @EnableDubbo
    @SpringBootApplication
    public class ConsumerApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(ConsumerApplication.class, args);
        }
    
    }

    然後我們需要在pom文件裏面繼承common的模塊並且添加web依賴:

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
    
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    
        <!-- web依賴 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.1.9.RELEASE</version>
        </dependency>
    
        <!-- common模塊 -->
        <dependency>
            <groupId>com.zhouxiaoxi</groupId>
            <artifactId>common</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>

    現在可以啓動消費者,然後看dubbo admin界面就會發現一個消費者:

    clipboard.png

    訪問http://localhost:8081/getUserList?name=zhouxiaoxi即可看到相應的返回值。

    clipboard.png

    至此我們的springboot與apache dubbo的整合就結束了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章