一、需求
在日益增長的業(yè)務(wù)需求中,一開始使用的是每個項目獨立開發(fā),雖然都是前后端分離的項目,但是每一個項目之間互不干擾。后來,因為某種需求,需要幾個項目的數(shù)據(jù)相互交錯獲取。
最開始的想法就是集成多個數(shù)據(jù)源。
舉例
有A、B、C三個項目,對應(yīng)著數(shù)據(jù)庫DBa、DBb、DBc、,現(xiàn)在A項目需要同時操作DBa、DBc數(shù)據(jù)庫。
這時,最理想就是調(diào)用RPC框架了。
環(huán)境/版本
IDEA2022.3.2
java11
SpringBoot 2.7.12-SNAPSHOT
Nacos 2.2.2
注意:如果使用SpringBoot3.x以上的要使用jdk17以上的,否則會啟動報錯。
二、須知
2.1、什么是RPC?
RPC全稱為Remote Procedure Call,翻譯為遠(yuǎn)程過程調(diào)用。它是一種計算機(jī)網(wǎng)絡(luò)通信協(xié)議,用于在不同的進(jìn)程或計算機(jī)之間進(jìn)行通信,讓它們像調(diào)用本地方法一樣調(diào)用遠(yuǎn)程方法。
假設(shè)你有一個應(yīng)用程序,它需要調(diào)用另外一個計算機(jī)上的函數(shù)或方法,通常情況下,你需要通過網(wǎng)絡(luò)編程,手動發(fā)送請求和接收響應(yīng)。而RPC則可以讓你像調(diào)用本地函數(shù)一樣,直接調(diào)用遠(yuǎn)程函數(shù),簡化了網(wǎng)絡(luò)編程的復(fù)雜度。
具體來說,RPC通信過程中,調(diào)用方會像調(diào)用本地方法一樣,發(fā)送請求到遠(yuǎn)程服務(wù)器,請求中包含了要調(diào)用的方法名和參數(shù)列表。遠(yuǎn)程服務(wù)器接收到請求后,會解析請求,調(diào)用對應(yīng)的方法,并將執(zhí)行結(jié)果返回給調(diào)用方。調(diào)用方收到響應(yīng)后,就可以像處理本地函數(shù)一樣,對結(jié)果進(jìn)行處理。
通俗來說,RPC就像是你在打電話時,向遠(yuǎn)程的對方說出你需要做的事情,對方完成后告訴你結(jié)果。這樣,你就不需要親自去完成任務(wù)了,這個過程中,你只需要關(guān)心需要完成的任務(wù)和結(jié)果,不需要關(guān)心具體的實現(xiàn)方式。
RPC在分布式系統(tǒng)中的應(yīng)用非常廣泛,比如微服務(wù)架構(gòu)中的服務(wù)調(diào)用,Hadoop中的遠(yuǎn)程過程調(diào)用等。它可以讓分布式系統(tǒng)更加簡單、靈活和可擴(kuò)展。
2.2、什么是Dubbo?
背景
Dubbo的誕生背景可以追溯到2011年,當(dāng)時阿里巴巴內(nèi)部的分布式架構(gòu)和服務(wù)治理已經(jīng)比較成熟,但面對日益增長的業(yè)務(wù)規(guī)模和復(fù)雜性,分布式服務(wù)之間的調(diào)用和管理成為了一個巨大的挑戰(zhàn)。在這樣的背景下,Dubbo應(yīng)運而生。
Dubbo最初由阿里巴巴公司的工程師提出并開發(fā),旨在為阿里巴巴內(nèi)部的分布式系統(tǒng)提供一種高性能、可靠、可擴(kuò)展的RPC框架,幫助阿里巴巴更好地構(gòu)建分布式服務(wù)架構(gòu)和實現(xiàn)服務(wù)治理。
后來,隨著Dubbo逐漸成熟并在阿里巴巴內(nèi)部廣泛應(yīng)用,阿里巴巴決定將其開源,于2011年底正式發(fā)布第一個版本,隨后在2012年和2015年分別發(fā)布了2.0和2.5版本,以及2019年發(fā)布的2.7版本。Dubbo的開源以及不斷更新迭代,吸引了越來越多的用戶和開發(fā)者參與,逐漸成為了Java生態(tài)系統(tǒng)中最受歡迎的RPC框架之一。
如今,Dubbo已經(jīng)廣泛應(yīng)用于阿里巴巴、華為、網(wǎng)易等企業(yè)的分布式系統(tǒng)中,并得到了國內(nèi)外各大互聯(lián)網(wǎng)公司和社區(qū)的廣泛認(rèn)可和支持。
2018年11月,Apache Dubbo 成為了 Apache 的頂級項目,這意味著 Dubbo 已經(jīng)發(fā)展成為一個非常成熟、高質(zhì)量、社區(qū)活躍的開源項目。Dubbo 的加入也進(jìn)一步加強了 Apache 在分布式系統(tǒng)領(lǐng)域的地位,為分布式系統(tǒng)的發(fā)展和推廣做出了巨大貢獻(xiàn)。
作用
Dubbo主要包括三個核心模塊:
Provider(服務(wù)提供者):暴露服務(wù)的應(yīng)用,提供服務(wù)的方法。
Consumer(服務(wù)消費者):調(diào)用遠(yuǎn)程服務(wù)的應(yīng)用,消費服務(wù)的方法。
Registry(服務(wù)注冊中心):服務(wù)注冊與發(fā)現(xiàn)的管理中心。
Dubbo框架的工作流程如下:
1、服務(wù)提供者啟動,向注冊中心注冊自己提供的服務(wù)。
2、服務(wù)消費者啟動,向注冊中心訂閱自己需要的服務(wù)。
3、注冊中心返回可用的服務(wù)列表給服務(wù)消費者。
4、服務(wù)消費者調(diào)用遠(yuǎn)程服務(wù)。
5、遠(yuǎn)程服務(wù)提供者響應(yīng)請求,返回結(jié)果給服務(wù)消費者。
6、服務(wù)消費者收到響應(yīng),完成調(diào)用。
2.3、什么是Nacos?
Nacos是一種基于云原生理念構(gòu)建的動態(tài)服務(wù)發(fā)現(xiàn)、配置管理和服務(wù)治理平臺,由阿里巴巴開源團(tuán)隊于2018年開源。它主要解決了分布式系統(tǒng)中服務(wù)注冊、發(fā)現(xiàn)、配置管理和DNS服務(wù)等問題。
Nacos提供了以下核心功能:
1、服務(wù)注冊和發(fā)現(xiàn):Nacos可以幫助服務(wù)提供者自動注冊服務(wù)并向Nacos Server匯報服務(wù)實例的健康狀況,服務(wù)消費者可以通過Nacos查詢可用服務(wù)實例。
2、配置管理:Nacos提供了集中式的配置管理功能,支持動態(tài)配置、版本管理、灰度發(fā)布、監(jiān)聽等功能,可以方便地管理分布式系統(tǒng)中的配置信息。
3、服務(wù)路由和負(fù)載均衡:Nacos支持服務(wù)提供者和消費者之間的流量管理和路由規(guī)則的動態(tài)更新,以及多種負(fù)載均衡策略。
4、DNS服務(wù):Nacos支持提供DNS服務(wù),可以在無需其他服務(wù)發(fā)現(xiàn)組件的情況下使用DNS方式進(jìn)行服務(wù)發(fā)現(xiàn)。
溫馨提示:Dubbo官網(wǎng)上默認(rèn)的注冊中心是Zookeeper,本文注冊中心使用的是Nacos。
三、普通的SpringBoot項目集成微服務(wù)組件方案(筆者給出兩種)
方案一(推薦)
像筆者這種的項目(看 需求),就是因為發(fā)展而演變成要使用微服務(wù)組件,而不是一開始就選好微服務(wù)架構(gòu)的。就看這個部分就好了。否則請看方案二。
1、導(dǎo)入maven依賴(消費者和提供者都是一樣的)
<!--nacos-->
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>2.2.2</version>
</dependency>
<!-- dubbo -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>3.2.0-beta.6</version>
</dependency>
啟動類加上注解@EnableDubbo
2、配置application.yml文件(消費者)
server:
port: 8102
spring:
cloud:
nacos:
server-addr: localhost:8848
dubbo:
consumer:
check: false
application:
name: dubbo-springboot-demo-consumer
protocol:
name: dubbo
# 設(shè)置為-1表示自動配置可用端口
port: -1
registry:
address: nacos://127.0.0.1:8848
配置application.yml文件(提供者)
server:
port: 8105
spring:
cloud:
nacos:
server-addr: localhost:8848
dubbo:
application:
name: dubbo-springboot-demo-provider
protocol:
name: dubbo
port: -1
registry:
address: nacos://127.0.0.1:8848
3、統(tǒng)一接口類(注意看包名,因為消費者和提供者的包名要一致)
package com.example.astar.component;
public interface DemoService {
String sayHello(String name);
}
4、提供者的接口(接口上添加@DubboService注解)
package com.example.astar.service.Impl;
import com.example.astar.component.DemoService;// 注意包名
import org.apache.dubbo.config.annotation.DubboService;
@DubboService
public class AstarServiceImpl implements DemoService {
private static int flag = 0;
@Override
public String sayHello(String name) {
String message = "你好??! " + name + " =========》 " + flag++;
return message;
}
}
5、消費者調(diào)用接口
package com.example.astar.controller;
import com.example.astar.component.DemoService;//注意包名
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/user")
public class UserController {
@DubboReference
private DemoService demoService;
@GetMapping("/1")
public String hello() {
String result = demoService.sayHello("Astar");
String re = "Receive result ======> " + result;
System.out.println(re);
return re;
}
}
6、調(diào)用成功
啟動這兩個項目(消費者和提供者),因為消費者配置了check: false,所以先啟動哪一個項目都是可以的。消費者的端口是8102,我們訪問一下
http://localhost:8102/user/1
看到如下
溫馨提示:
DemoService的全限定包名是import com.example.astar.component.DemoService,也就是說消費者和提供者之間的橋梁就是來自同一個接口,我們需要在項目中分別創(chuàng)建一模一樣的接口才可以,實現(xiàn)類不用管。如果提供者和消費者的接口的包名不一樣就會導(dǎo)致調(diào)用失敗。
說人話:就是兩個項目都不在一個文件下,怎么可能用同一個類?這里只要這個類本身、包名一樣就可以了,Dubbo就會認(rèn)為是一樣的。
方案二
此方案是在一開始就決定用微服務(wù)這個框架的項目來說的,通常我們會分為類似以下幾個子模塊:
interface模塊
步驟我就懶得說了,大致和方案一一樣,不同的地方是公共模塊interface的導(dǎo)入:
在消費者和提供者上添加子模塊即可:
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-samples-spring-boot-interface</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
溫馨提示:打包的時候會把子模塊的引入部分一起打包,不用擔(dān)心,正常使用即可,其余部分不變。
END文章來源:http://www.zghlxwxcb.cn/news/detail-440756.html
茫茫人海路漫漫,
潛心修煉方有顏。
踏實走好每一步,
靜待花開見真章。文章來源地址http://www.zghlxwxcb.cn/news/detail-440756.html
祝您開發(fā)愉快!
到了這里,關(guān)于【SpringBoot集成Nacos+Dubbo】企業(yè)級項目集成微服務(wù)組件,實現(xiàn)RPC遠(yuǎn)程調(diào)用的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!