springboot+dubbo+nacos入門專案
本文環境:
springboot:2.1.12
apache dubbo:2.7.1
nacos:1.0.0
專案程式碼:
https://github.com/ROAOR1/dubbo-nacos.git
dubbo簡介
節點說明
節點 | 角色說明 |
---|---|
Provider | 暴露服務的服務提供方 |
Consumer | 呼叫遠端服務的服務消費方 |
Registry | 服務註冊與發現的註冊中心 |
Monitor | 統計服務的呼叫次數和呼叫時間的監控中心 |
Container | 服務執行容器 |
呼叫關係說明
1、服務容器負責啟動,載入,執行服務提供者。
2、服務提供者在啟動時,向註冊中心註冊自己提供的服務。
3、服務消費者在啟動時,向註冊中心訂閱自己所需的服務。
4、註冊中心返回服務提供者地址列表給消費者,如果有變更,註冊中心將基於長連線推送變更資料給消費者。
5、服務消費者,從提供者地址列表中,基於軟負載均衡演算法,選一臺提供者進行呼叫,如果呼叫失敗,再選另一臺呼叫。
6、服務消費者和提供者,在記憶體中累計呼叫次數和呼叫時間,定時每分鐘傳送一次統計資料到監控中心。
nacos
Nacos是阿里巴巴最新開源的專案,核心定位是“一個更易於幫助構建雲原生應用的動態服務發現、配置和服務管理平臺”,nacos下載:https://github.com/alibaba/nacos/releases
我這裡使用的是1.0.0版本,下載完成之後解壓啟動即可
下面開始建立我們的專案,貼上我的目錄結構
public-api公共介面模組(介面),供服務消費者和服務提供者呼叫。
service-base服務提供者模組(介面實現類),引入了public-api模組
web服務消費者模組(controller),引入了public-api模組
消費者和提供者通過公共介面模組進行rpc遠端呼叫
父工程pom檔案
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.12.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.top</groupId>
<artifactId>dubbo-nacos</artifactId>
<version>1.0.0</version>
<name>dubbo-nacos</name>
<description>dubbo-nacos</description>
<packaging>pom</packaging>
<modules>
<module>public-api</module>
<module>service-base</module>
<module>web</module>
</modules>
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>utf-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<dubbo.version>2.7.1</dubbo.version>
<nacos.version>1.0.0</nacos.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>${dubbo.version}</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>${dubbo.version}</version>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
</exclusion>
<exclusion>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
</exclusion>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>${nacos.version}</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-registry-nacos</artifactId>
<version>${dubbo.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
建立公共介面模組
pom檔案
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.top</groupId>
<artifactId>dubbo-nacos</artifactId>
<version>1.0.0</version>
<relativePath/>
</parent>
<artifactId>public-api</artifactId>
<version>1.0.0</version>
<name>public-api</name>
<description>api公用介面</description>
<packaging>jar</packaging>
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>utf-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
公共介面模組裡面只有一個介面,沒有配置檔案,打jar包
public interface InfoService {
String getInfo();
}
建立服務提供者模組
pom檔案
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.top</groupId>
<artifactId>dubbo-nacos</artifactId>
<version>1.0.0</version>
<relativePath/>
</parent>
<artifactId>service-base</artifactId>
<version>1.0.0</version>
<name>service-base</name>
<description>base模組</description>
<packaging>war</packaging>
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>utf-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--引入公共介面模組-->
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>public-api</artifactId>
<version>${project.version}</version>
</dependency>
<!--duboo+nacos-->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-registry-nacos</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
application.yml配置檔案
server:
port: 8080
spring:
application:
name: service-base
dubbo:
registry:
address: nacos://127.0.0.1:8848 #註冊地址
application:
name: service-base #應用名
protocol:
name: dubbo #dubbo協議
port: 20880 #協議埠
scan:
base-packages: com.top.service.base.impl #掃包範圍
provider:
timeout: 30000 #超時時間
service:
version: 1.0.0 #自定義的版本
介面實現類,該類實現了上面我們在公共介面模組建立的介面
//dubbo提供的Service註解,用於宣告對外暴露服務
@Component
@Service(version = "${service.version}")
public class InfoServiceImpl implements InfoService {
@Override
public String getInfo() {
return "hello,這裡是service-base模組!";
}
}
建立服務消費者模組
pom檔案
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.top</groupId>
<artifactId>dubbo-nacos</artifactId>
<version>1.0.0</version>
<relativePath/>
</parent>
<artifactId>web</artifactId>
<version>1.0.0</version>
<name>web</name>
<description>web模組</description>
<packaging>war</packaging>
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>utf-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--引入公共介面模組-->
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>public-api</artifactId>
<version>${project.version}</version>
</dependency>
<!--duboo+nacos-->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-registry-nacos</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
application.yml配置檔案
server:
port: 8090
spring:
application:
name: web
dubbo:
registry:
address: nacos://127.0.0.1:8848 #註冊地址
application:
name: web #應用名
consumer:
timeout: 30000 #超時時間
service:
version: 1.0.0 #自定義的版本,和消費者模組保持一致
controller,呼叫公共介面模組建立的介面
@RestController
public class InfoController {
//dubbo提供的Reference註解,用於呼叫遠端服務
@Reference(version = "${service.version}",check = false)
private InfoService infoService;
@RequestMapping("/getInfo")
public String getInfo(){
return infoService.getInfo();
}
}
啟動nacos,啟動服務提供者和服務消費者,呼叫服務消費者的getInfo方法,服務提供者會返回結果
登上nacos控制檯可以看到服務消費者與服務提供者
http:127.0.0.1:8848/nacos/index.html,賬號和密碼都是nacos
相關文章
- Katana 專案入門
- JavaWeb專案入門JavaWeb
- Kotlin專案入門Kotlin
- Vue專案入門例項Vue
- maven 專案的建立入門Maven
- SpringBoot入門 - 建立專案Spring Boot
- 前端專案docker:前端docker入門前端Docker
- intellij配置EJB專案入門IntelliJ
- Python爬蟲入門專案Python爬蟲
- Django-APP及專案入門DjangoAPP
- 上手一個 Vue 的入門專案Vue
- GraphQL搭配MongoDB入門專案實戰MongoDB
- scrapy入門教程()部署爬蟲專案爬蟲
- go+vue入門專案練手GoVue
- Vue入門到關門之Vue專案工程化Vue
- Vue入門到關門之Vue3專案建立Vue
- SpringBoot + Mybatis + Redis 整合入門專案Spring BootMyBatisRedis
- Spring入門(一):建立Spring專案Spring
- Spring Boot入門-快速搭建web專案Spring BootWeb
- SpringCloud入門及建立分散式專案SpringGCCloud分散式
- SAP Commerce Cloud 專案 Spartacus 入門Cloud
- 從一個小專案快速入門ScssCSS
- Scrapy入門-第一個爬蟲專案爬蟲
- Java爬蟲入門(一)——專案介紹Java爬蟲
- OpenGL入門(1)——建立一個OpenGL專案
- React-native專案入門與思考React
- 華為開源專案ServiceComb快速入門
- webpack:從入門到真實專案配置Web
- WebService 簡單入門教程(Java Web專案)WebJava
- Java開源專案Hibernate快速入門Java
- 大資料入門指南(GitHub開源專案)大資料Github
- vue 快速入門 系列 —— Vue(自身) 專案結構Vue
- vue入門(安裝環境與搭建專案)Vue
- Go 語言入門練手專案推薦Go
- Axon框架快速入門和DDD專案實踐框架
- 專案之爬蟲入門(豆瓣TOP250)爬蟲
- `.NET Web`新人入門必學專案`EarthChat`Web
- web專案技術必備-------jQuery快速入門WebjQuery