springboot多子產品項目內建dubbo,項目結構展示
- 父工程 springbootparent
- 子子產品 springbootapi , springbootserver , springbootclient
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHL9sGRORzYU9keRRUTzUkMMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL0UTN0UzMxgTM5IjNwkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
一 springboot多子產品建立
- 建立父工程 File -> new -> Project
dubbo springboot入門demo(三) springboot多子產品項目內建dubbo詳細過程附源碼 點選 nextdubbo springboot入門demo(三) springboot多子產品項目內建dubbo詳細過程附源碼 後面接着next ->next->finishdubbo springboot入門demo(三) springboot多子產品項目內建dubbo詳細過程附源碼 保留上圖箭頭所指檔案(.idea , .gitignore , pom.xml , iml檔案 ),其他檔案删除dubbo springboot入門demo(三) springboot多子產品項目內建dubbo詳細過程附源碼 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詳細過程附源碼 點選 nextdubbo springboot入門demo(三) springboot多子產品項目內建dubbo詳細過程附源碼 next -> next -> finishdubbo springboot入門demo(三) springboot多子產品項目內建dubbo詳細過程附源碼 保留上圖箭頭指向檔案( springbootapi 子子產品的 src , pom.xml 和 iml 檔案 ),删除後 springbootapi其他檔案,如下dubbo springboot入門demo(三) springboot多子產品項目內建dubbo詳細過程附源碼 在父工程pom.xml中添加子子產品dubbo springboot入門demo(三) springboot多子產品項目內建dubbo詳細過程附源碼
<modules>
<module>springbootapi</module>
</modules>
在子子產品 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>
删除 子項目中 springbootapi pom.xml 中 build内容 , 如果沒聲明打包類型,添加打包類型jar
-
建立子子產品 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>
在springbootclient的pom.xml中添加springbootapi 的依賴
<dependency>
<groupId>com.example</groupId>
<artifactId>springbootapi</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
到此一個簡單的多子產品項目建立完。父工程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公共接口服務
目錄結構,如下:
公共服務接口UserServicedubbo springboot入門demo(三) springboot多子產品項目內建dubbo詳細過程附源碼
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管理平台dubbo-admin看服務提供者資訊
從上述資訊可以得知,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管理平台dubbo-admin看服務消費者資訊
從上述資訊可以得知,dubbo 消費者子子產品springbootclient 配置啟動成功!
浏覽器輸入 http://127.0.0.1:9992/test
到此整個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