Spring boot 2.1.9 + Dubbo 2.7.3 + Nacos 1.1.4 構建微服務系統
Spring boot 2.1.9 + Dubbo 2.7.3 + Nacos 1.1.4 構建微服務系統
-
Spring boot 2.1.9 + Dubbo 2.7.3 + Nacos 1.1.4 構建微服務系統 , mydemo
-
下載最新版本的 Nacos Server , 具體參見下面 註冊中心部分
#啟動 Nacos 服務 sh startup.sh -m standalone
-
parent pom
<modelVersion>4.0.0</modelVersion> <packaging>pom</packaging> <modules> <module>dubbo-api</module> <module>dubbo-provider</module> <module>dubbo-consumer</module> </modules> <groupId>com.example</groupId> <artifactId>dubbo-demo</artifactId> <version>1.0-SNAPSHOT</version> <properties> <spring-boot.version>2.1.9.RELEASE</spring-boot.version> <dubbo.version>2.7.3</dubbo.version> <nacos-config-spring-boot.version>0.2.1</nacos-config-spring-boot.version> <java.version>1.8</java.version> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties> <dependencyManagement> <dependencies> <!--SpringBoot--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>${spring-boot.version}</version> <type>pom</type> <scope>import</scope> </dependency> <!-- Apache Dubbo --> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-dependencies-bom</artifactId> <version>${dubbo.version}</version> <type>pom</type> <scope>import</scope> </dependency> <!-- Dubbo Spring Boot Starter --> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>${dubbo.version}</version> </dependency> <!-- 下面這個依賴可以不需要,預設是 dubbo 是 2.7.3 --> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo</artifactId> <version>${dubbo.version}</version> </dependency> <!-- Dubbo Registry Nacos --> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-registry-nacos</artifactId> <version>${dubbo.version}</version> </dependency> <dependency> <groupId>com.alibaba.boot</groupId> <artifactId>nacos-config-spring-boot-starter</artifactId> <version>${nacos-config-spring-boot.version}</version> </dependency> <!-- 如果沒有使用nacos配置中心,沒有新增 nacos-config-spring-boot-starter 依賴,則需要新增下面這個依賴 --> <dependency> <groupId>com.alibaba.nacos</groupId> <artifactId>nacos-client</artifactId> <version>1.1.4</version> </dependency> <!-- Interface --> <dependency> <groupId>com.example</groupId> <artifactId>dubbo-api</artifactId> <version>1.0-SNAPSHOT</version> </dependency> </dependencies> </dependencyManagement> <build> <!-- 必須要,否則通過 mvn clean install -Dmaven.test.skip=true 無法執行,提示錯誤:jar中沒有主清單屬性 --> <pluginManagement> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>${spring-boot.version}</version> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins> </pluginManagement> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.0</version> <configuration> <source>${maven.compiler.source}</source> <target>${maven.compiler.target}</target> </configuration> </plugin> </plugins> </build>
-
擴充套件:在 parent pom 檔案中為什麼需要定義
<build>
標籤?-
原因是:parent pom 檔案中沒有繼承 spring-boot-starter-parent pom 檔案,即沒有下面的配置
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.9.RELEASE</version> </parent>
-
如果沒有自定義上面的
<build>
標籤,則通過 mvn 打包的程式無法執行,提升錯誤:jar中沒有主清單屬性,根本原因是jar包中缺少main-class。檢視mvn倉庫關於spring-boot-starter-parent pom 檔案的內容,發現已經定於了<build>
標籤,把相應的定義copy 過來,就解決問題了。 -
為什麼不能繼承 spring-boot-starter-parent pom 檔案呢? 原因是:interface / util 專案不需要繼承,只有真正需要執行的程式(無論是web 還是 console 程式,即有main函式的專案),才需要繼承 spring-boot-starter-parent pom 檔案
-
-
dubbo common , provider 和 consumer 共享模組
<parent> <artifactId>dubbo-demo</artifactId> <groupId>com.example</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <groupId>com.jianzh5</groupId> <artifactId>dubbo-common</artifactId> <packaging>jar</packaging>
// 定義介面 public interface HelloService { String sayHello(); }
-
dubbo provider : 注意,不需要 spring-boot-starter-web 依賴,它不是 web api專案,不對外提供服務
<parent> <artifactId>dubbo-demo</artifactId> <groupId>com.example</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId> <artifactId>dubbo-provider</artifactId> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <!-- Dubbo --> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo</artifactId> </dependency> <!-- Dubbo Registry Nacos --> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-registry-nacos</artifactId> </dependency> <dependency> <groupId>com.alibaba.nacos</groupId> <artifactId>nacos-client</artifactId> </dependency> <dependency> <groupId>com.example</groupId> <artifactId>dubbo-api</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
#配置檔案 dubbo.scan.base-packages=com.example.demo.user.service dubbo.application.name = dubbo-provider dubbo.registry.address = nacos://192.168.136.129:8848 dubbo.protocol.port=20881 dubbo.protocol.name=dubbo
// 介面實現 @Service public class HelloServiceImpl implements HelloService { public String sayHello() { Return "welcome to WeChat public address: JAVA RI Zhi Lu". } }
-
@EnableDubbo 註解的作用 :通過
@EnableDubbo
可以在指定的包名下(通過scanBasePackages
),或者指定的類中(通過scanBasePackageClasses
)掃描 Dubbo 的服務提供者(以@Service
標註)以及 Dubbo 的服務消費者(以Reference
標註),它是@EnableDubboConfig
和@DubboComponentScan
兩者組合的便捷表達方式。@SpringBootApplication @EnableDubbo public class PrivoderApplication { public static void main(String[] args) { SpringApplication.run(PrivoderBootstrap.class, args); } }
-
dubbo consumer : 注意,需要 spring-boot-starter-web 依賴,因為它是web api 專案,讓外部訪問
<parent> <artifactId>dubbo-demo</artifactId> <groupId>com.example</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId> <artifactId>dubbo-consumer</artifactId> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- Dubbo --> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo</artifactId> </dependency> <!-- Dubbo Registry Nacos --> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-registry-nacos</artifactId> </dependency> <dependency> <groupId>com.alibaba.nacos</groupId> <artifactId>nacos-client</artifactId> </dependency> <dependency> <groupId>com.example</groupId> <artifactId>dubbo-api</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
#配置檔案 dubbo.scan.base-packages=com.example.demo.consumer spring.application.name=dubbo-consumer dubbo.registry.address = nacos://192.168.136.129:8848 server.port=9090
@RestController public class HelloController { @Reference private HelloService helloService; @GetMapping("/sayHello") public String sayHello(){ return helloService.sayHello(); } }
// 測試結果:如果沒有 @EnableDubbo 註解,也是可以 run 的,但是如果provider沒有此註解,就無法run,不知道為什麼? // 為了和官方文件一致,還是加上吧 @EnableDubbo @SpringBootApplication public class ConsumerApplication { public static void main(String[] args) { SpringApplication.run(ConsumerBootstrap.class, args); } }
-
相關文章
- Spring Boot Dubbo NacosSpring Boot
- 微服務框架-dubbo整合nacos框架微服務框架
- Springboot + Dubbo + Nacos微服務框架整合Spring Boot微服務框架
- 微服務架構:Dubbo VS Spring Cloud微服務架構SpringCloud
- 構建Spring Boot應用的微服務服務動態路由Spring Boot微服務路由
- Spring Boot 參考指南(構建系統)Spring Boot
- SpringBoot+Dubbo+Serata+Nacos微服務搭建Spring Boot微服務
- 使用Spring Boot和GraalVM在Knative上構建微服務 - piotrSpring BootLVM微服務
- 構建Spring Boot應用的微服務服務監控與告警Spring Boot微服務
- 使用Spring Cloud Kubernetes基於Kubernetes、Spring Boot和Docker構建微服務架構 - MoriohCloudSpring BootDocker微服務架構
- spring boot構建restful服務Spring BootREST
- 在國外是如何用Spring Boot、Spring Cloud、Docker實現微服務系統架構Spring BootCloudDocker微服務架構
- 微服務02 Kafka訊息佇列, Dubbo, Springcloud微服務框架, Nacos微服務Kafka佇列SpringGCCloud框架
- SpringCloud微服務:基於Nacos元件,整合Dubbo框架SpringGCCloud微服務元件框架
- spring cloud + spring boot + springmvc+mybatis微服務雲架構CloudSpring BootSpringMVCMyBatis微服務架構
- Spring Cloud Spring Boot mybatis分散式微服務雲架構CloudSpring BootMyBatis分散式微服務架構
- Spring Cloud構建微服務架構-spring cloud服務監控中心SpringCloud微服務架構
- 基於Spring Boot和Spring Cloud實現微服務架構Spring BootCloud微服務架構
- Spring Cloud分散式微服務雲架構構建SpringCloud分散式微服務架構
- Spring Cloud構建微服務架構-Hystrix服務降級SpringCloud微服務架構
- Spring Cloud構建微服務架構-服務閘道器SpringCloud微服務架構
- 使用Spring Boot 2.0快速構建服務元件Spring Boot元件
- spring cloud + spring boot + springmvc+mybatis分散式微服務雲架構CloudSpring BootSpringMVCMyBatis分散式微服務架構
- Spring Boot 2.1.3+Bootstrap 4.0 構建個人部落格系統Spring Boot
- 微服務選擇Spring Cloud還是Dubbo?微服務SpringCloud
- 如何零基礎搭建一套微服務框架(Spring Boot + Dubbo + Docker + Jenkins)微服務框架Spring BootDockerJenkins
- 通過Spring Boot,Spring Cloud Gateway構建基於Consul叢集的微服務案例演示 – Piotr的TechBlogSpring BootCloudGateway微服務
- 透過Spring Boot,Spring Cloud Gateway構建基於Consul叢集的微服務案例演示 – Piotr的TechBlogSpring BootCloudGateway微服務
- 微服務架構 | 2.2 Alibaba Nacos 的統一配置管理微服務架構
- Spring Alibaba Nacos替換dubbo zookeeperSpring
- 微服務架構:構建PHP微服務生態微服務架構PHP
- 在spring boot中整合微服務閘道器係統Spring Cloud ZuulSpring Boot微服務CloudZuul
- Spring Boot 整合 Apache DubboSpring BootApache
- Spring Boot Dubbo 入門Spring Boot
- 基於Springboot+Dubbo+Nacos 註解方式實現微服務呼叫Spring Boot微服務
- Spring Cloud構建微服務架構—服務閘道器過濾器SpringCloud微服務架構過濾器
- Spring Cloud構建微服務架構:分散式配置中心(加密解密)SpringCloud微服務架構分散式加密解密
- 使用Java和Spring WebFlux構建響應式微服務JavaSpringWebUX微服務