天天看點

dubbo springboot入門demo(三) springboot多子產品項目內建dubbo詳細過程附源碼

springboot多子產品項目內建dubbo,項目結構展示

  • 父工程 springbootparent
  • 子子產品 springbootapi , springbootserver , springbootclient
dubbo springboot入門demo(三) springboot多子產品項目內建dubbo詳細過程附源碼
dubbo springboot入門demo(三) springboot多子產品項目內建dubbo詳細過程附源碼

一 springboot多子產品建立

  • 建立父工程 File -> new -> Project
    dubbo springboot入門demo(三) springboot多子產品項目內建dubbo詳細過程附源碼
    dubbo springboot入門demo(三) springboot多子產品項目內建dubbo詳細過程附源碼
    點選 next
    dubbo springboot入門demo(三) springboot多子產品項目內建dubbo詳細過程附源碼
    後面接着next ->next->finish
    dubbo springboot入門demo(三) springboot多子產品項目內建dubbo詳細過程附源碼
    保留上圖箭頭所指檔案(.idea , .gitignore , pom.xml , iml檔案 ),其他檔案删除
    dubbo springboot入門demo(三) springboot多子產品項目內建dubbo詳細過程附源碼

    将父工程 的 pom.xml 檔案中的打包方式為 pom , spring版本自己看着選(低版本穩定) , 屬性添加UTF-8編碼,删除所有依賴dependency , 删除 build 。 如下:

    (注:如果pom.xml沒有自動更新,那 右鍵左邊project欄裡面pom.xml檔案->Maven->Reimport,下面要是也出現這種情況同樣手動更新)

    dubbo springboot入門demo(三) springboot多子產品項目內建dubbo詳細過程附源碼
  • 建立子子產品 springbootapi (右鍵父工程 -> New -> Module)
    dubbo springboot入門demo(三) springboot多子產品項目內建dubbo詳細過程附源碼
    dubbo springboot入門demo(三) springboot多子產品項目內建dubbo詳細過程附源碼
    點選 next
    dubbo springboot入門demo(三) springboot多子產品項目內建dubbo詳細過程附源碼
    next -> next -> finish
    dubbo springboot入門demo(三) springboot多子產品項目內建dubbo詳細過程附源碼
    保留上圖箭頭指向檔案( springbootapi 子子產品的 src , pom.xml 和 iml 檔案 ),删除後 springbootapi其他檔案,如下
    dubbo springboot入門demo(三) springboot多子產品項目內建dubbo詳細過程附源碼
    在父工程pom.xml中添加子子產品
<modules>
        <module>springbootapi</module>
    </modules>
           
dubbo springboot入門demo(三) springboot多子產品項目內建dubbo詳細過程附源碼

在子子產品 springbootapi pom.xml中修改 聲明父工程為 springbootparent

<parent>
        <groupId>com.example</groupId>
        <artifactId>springbootparent</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <relativePath>../pom.xml</relativePath> <!-- lookup parent from repository -->
    </parent>
           
dubbo springboot入門demo(三) springboot多子產品項目內建dubbo詳細過程附源碼

删除 子項目中 springbootapi pom.xml 中 build内容 , 如果沒聲明打包類型,添加打包類型jar

dubbo springboot入門demo(三) springboot多子產品項目內建dubbo詳細過程附源碼
  • 建立子子產品 springbootserver , springbootclient

    其他的子子產品建立過程和之前建立的子子產品springbootapi 一樣(除了springbootapi 需要删除build ,其他子子產品不要删除),不再啰嗦了,照着上面操作。

    注:别忘了springbootserver , springbootclient子產品添加到父工程pom.xml的modules,然後在springbootserver 和springbootclient的pom.xml中聲明父工程

子子產品 springbootserver , springbootclient 建立完後,添加子子產品之間的依賴

springbootapi 作為dubbo公共接口服務,springbootserver和springbootclient 需要依賴springbootapi

在springbootserver的pom.xml中添加springbootapi 的依賴

<dependency>
            <groupId>com.example</groupId>
            <artifactId>springbootapi</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
           
dubbo springboot入門demo(三) springboot多子產品項目內建dubbo詳細過程附源碼

在springbootclient的pom.xml中添加springbootapi 的依賴

<dependency>
            <groupId>com.example</groupId>
            <artifactId>springbootapi</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
           
dubbo springboot入門demo(三) springboot多子產品項目內建dubbo詳細過程附源碼

到此一個簡單的多子產品項目建立完。父工程springbootparent,子子產品有springbootapi,springbootserver,springbootclient , 其中子子產品springbootserver和springbootclient 都依賴 springbootapi

下面開始內建dubbo

二 springboot多子產品內建dubbo

注:在內建dubbo 之前,請先确認本地安裝且啟動了zookeeper(注冊中心)和dubbo-admin(dubbo管理平台,在這裡用于觀察下面內建dubbo內建是否成功),若沒有啟動,先啟動。若沒安裝過請移步我之前的博文安裝啟動。https://blog.csdn.net/a704397849/article/details/91904085

  • springbootapi 作為dubbo公共接口服務

    目錄結構,如下:

    dubbo springboot入門demo(三) springboot多子產品項目內建dubbo詳細過程附源碼
    公共服務接口UserService
package com.example.springbootapi.dubbo.service;

/**
 * @author
 */
public interface UserService {
    public String print(String s);
}
           
  • springbootserver 作為dubbo提供者提供服務

    目錄結構,如下:

    dubbo springboot入門demo(三) springboot多子產品項目內建dubbo詳細過程附源碼

pom.xml 新增依賴 (dubbo,zookeeper,zkclient,log4j依賴)

(注:如果pom.xml沒有自動更新,那 右鍵左邊project欄裡面pom.xml檔案->Maven->Reimport,下面要是也出現這種情況同樣手動更新)

<dependency>
            <groupId>com.alibaba.spring.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.0.0</version>
        </dependency>
        <dependency>
            <groupId>com.github.sgroschupf</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.1</version>
        </dependency>
        <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>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.16</version>
            <scope>compile</scope>
        </dependency>
           

完成pom.xml

<?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>
    <parent>
        <groupId>com.example</groupId>
        <artifactId>springbootparent</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <relativePath>../pom.xml</relativePath> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>springbootserver</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springbootserver</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>com.example</groupId>
            <artifactId>springbootapi</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba.spring.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.0.0</version>
        </dependency>
        <dependency>
            <groupId>com.github.sgroschupf</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.1</version>
        </dependency>
        <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>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.16</version>
            <scope>compile</scope>
        </dependency>
        <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>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

           

springboot配置檔案application.properties (注:dubbo依賴是dubbo-spring-boot-starter時,提供者配置spring.dubbo.server=true 必須有)

server.port=9991
#應用名
spring.dubbo.application.name=provider
#dubbo依賴版本為dubbo-spring-boot-starter時,dubbo提供者必須有這個server=true
spring.dubbo.server=true
#注冊中心位址
spring.dubbo.registry.address=zookeeper://127.0.0.1:2181
#協定端口
spring.dubbo.protocol.name=dubbo
spring.dubbo.protocol.port=20880
#掃描包,接口服務實作的包,根據個人接口服務類所在位置自己做修改
spring.dubbo.scan=com.example.springbootserver.service
           

新增服務接口實作類UserServiceImpl (注意@Service注解是dubbo的,不是spring的)

package com.example.springbootserver.service;

import com.alibaba.dubbo.config.annotation.Service;
import com.example.springbootapi.dubbo.service.UserService;
import org.springframework.stereotype.Component;

@Service(interfaceClass = UserService.class)
@Component
public class UserServiceImpl implements UserService {
    @Override
    public String print(String s) {
        return "say:" + s;
    }
}

           

啟動類SpringbootserverApplication

package com.example.springbootserver;

import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@EnableDubboConfiguration
@SpringBootApplication
public class SpringbootserverApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootserverApplication.class, args);
    }

}

           

到此dubbo提供者完成,運作後到dubbo-admin管理平台看是否成功提供dubbo服務

dubbo springboot入門demo(三) springboot多子產品項目內建dubbo詳細過程附源碼
dubbo springboot入門demo(三) springboot多子產品項目內建dubbo詳細過程附源碼

從控制台啟動資訊看是成功的,現在去dubbo管理平台dubbo-admin看服務提供者資訊

dubbo springboot入門demo(三) springboot多子產品項目內建dubbo詳細過程附源碼
dubbo springboot入門demo(三) springboot多子產品項目內建dubbo詳細過程附源碼
dubbo springboot入門demo(三) springboot多子產品項目內建dubbo詳細過程附源碼

從上述資訊可以得知,dubbo 提供者子子產品springbootserver 配置啟動成功!

  • springbootclient 作為dubbo消費者調用遠端服務

    目錄結構,如下:

    dubbo springboot入門demo(三) springboot多子產品項目內建dubbo詳細過程附源碼

    pom.xml 新增依賴 (dubbo,zookeeper,zkclient,log4j,web依賴)

    (注:如果pom.xml沒有自動更新,那 右鍵左邊project欄裡面pom.xml檔案->Maven->Reimport,下面要是也出現這種情況同樣手動更新)

<!-- dubbo依賴 -->
        <dependency>
            <groupId>com.alibaba.spring.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.0.0</version>
        </dependency>
        <dependency>
            <groupId>com.github.sgroschupf</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.1</version>
        </dependency>
        <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>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.16</version>
            <scope>compile</scope>
        </dependency>
        <!--web-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
           

完整pom.xml

<?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>
    <parent>
        <groupId>com.example</groupId>
        <artifactId>springbootparent</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <relativePath>../pom.xml</relativePath> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>springbootclient</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springbootclient</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>com.example</groupId>
            <artifactId>springbootapi</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
        <!-- dubbo依賴 -->
        <dependency>
            <groupId>com.alibaba.spring.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.0.0</version>
        </dependency>
        <dependency>
            <groupId>com.github.sgroschupf</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.1</version>
        </dependency>
        <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>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.16</version>
            <scope>compile</scope>
        </dependency>
        <!--web-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <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>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

           

springboot配置application.properties

server.port=9992
#dubbo消費者配置放在dubbo-consumer.xml中
           

新增duboo消費者配置xml檔案dubbo-consumer.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="client"/>
    <dubbo:registry address="zookeeper://127.0.0.1:2181" timeout="60000"/>
    <!--關閉服務消費方所有服務的啟動檢查。dubbo預設會在啟動時檢查依賴的服務是否可用,不可用時會抛出異常,阻止Spring初始化完成。url="dubbo//172.16.1.112:20880"-->
    <dubbo:consumer check="false" />

    <!--reference 采用xml配置實作,在代碼中擷取遠端服務需要加注解@Autowired-->
    <dubbo:reference id="UserService" check="false"  inter/>

    <!-- 需要使用到提供者服務的包路徑,多個包時用逗号隔開。注: 網上好多這裡寫錯了 -->
    <dubbo:annotation package="com.example.springbootclient.controller"/>
</beans>
           

新增網頁請求調用遠dubbo程服務的類UserController

package com.example.springbootclient.controller;

import com.example.springbootapi.dubbo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * @author
 */
@Controller
public class UserController {
    //reference 在xml配置,這裡需要用注解Autowired
    @Autowired
    public UserService userService;

    @RequestMapping("/test")
    @ResponseBody
    public String test(){
        String s = userService.print("hhhhhhhhhhh");
        return s;
    }
}
           

啟動類

package com.example.springbootclient;

import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.ImportResource;

/**
 * 消費者: 先掃描dubbo 然後 掃描spring
 * @author
 */
@EnableDubboConfiguration
@ImportResource(locations = {"classpath:dubbo-consumer.xml"})
@ComponentScan(basePackages = "com.example.springbootclient.controller")
@SpringBootApplication
public class SpringbootclientApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootclientApplication.class, args);
    }

}

           

到此dubbo 消費者完成,運作後到dubbo-admin管理平台看是否成功注冊dubbo消費者

dubbo springboot入門demo(三) springboot多子產品項目內建dubbo詳細過程附源碼
dubbo springboot入門demo(三) springboot多子產品項目內建dubbo詳細過程附源碼

從控制台啟動資訊看是成功的,現在去dubbo管理平台dubbo-admin看服務消費者資訊

dubbo springboot入門demo(三) springboot多子產品項目內建dubbo詳細過程附源碼
dubbo springboot入門demo(三) springboot多子產品項目內建dubbo詳細過程附源碼
dubbo springboot入門demo(三) springboot多子產品項目內建dubbo詳細過程附源碼

從上述資訊可以得知,dubbo 消費者子子產品springbootclient 配置啟動成功!

浏覽器輸入 http://127.0.0.1:9992/test

dubbo springboot入門demo(三) springboot多子產品項目內建dubbo詳細過程附源碼

到此整個springboot dubbo 多子產品項目建立并且驗證完成

源碼

連結:https://pan.baidu.com/s/1SmgcG_lWfw-NZJduu4ipVw

提取碼:9cw1

注:拿到源碼運作之前請先确認本地安裝運作了zookeeper和dubbo-admin,若沒有啟動,先啟動。若沒安裝過請移步我之前的博文安裝啟動。https://blog.csdn.net/a704397849/article/details/91904085

最後

下一篇介紹 有子子產品既是消費者又是提供者的springboot dubbo多子產品項目demo

繼續閱讀