由于spring-cloud的官方核心組件eureka停止升級維護,再加上支持國貨,微服務的技術選型spring-cloud-alibaba,注冊和服務發現中心,呼叫服務則選為dubbo,雖然耦合性有點高(指尖銀河),但好歹是國貨,沒說的,必須支持,
小聲比比:這類文章比較多,我也跟風一波,湊下熱鬧
技術堆疊:
spring-boot、spring-cloud-alibaba-nacos、dubbo
首先是nacos
nacos是干嘛的呢?簡單來說就是服務注冊、服務發現、高可用配置中心
首先下載nacos
https://github.com/alibaba/nacos/releases
選擇1.4版本下載并解壓
由于本人技術有限,只配置了nacos單機版,所以此文只敘述nacos的單機模式的相關操作
nacos資料存盤
nacos的資料存盤有好幾種方式,默認用的file方式存盤資料,如果要最快速啟動的話自然什么也不用改,如果要更換資料存盤方式的話則需要修改${nacos}/conf/application.properties檔案
db.num=1
db.url.0=jdbc:mysql://12.32.12.32:3243/sdfdsf?characterEncoding=utf8&connectTimeout=10000&socketTimeout=30000&autoReconnect=true
db.user=fdgfdg
db.password=fdgbfdgfsdg
資料庫資訊修改不用多說了吧
啟動nacos
首先到${nacos}/bin目錄下,執行命令
sh startup.sh -m standalone
由于nacos默認集群模式,單機模式啟動的話要加上-m standalone
注:不要修改nacos的訪問前綴,否則默認配置可能無法找到nacos的server端,具體請看下去
nacos啟動完后就可以不管了
專案代碼
首先建立一個獨立的公用模塊,該模塊不是服務,僅提供dubbo的interface類供其實作
由于該模塊不需要任何業務代碼僅需要interface類,故此處只貼interface的代碼
public interface TestService {
/**
* 發送訊息
* @param test1Msg 發送給消費者1的訊息
* @param test2Msg 發送給消費者2的訊息
*/
String test(String test1Msg,String test2Msg);
}
此模塊就此結束,不再需要寫任何東西,
由于是分布式專案,需要啟動多個業務相關的服務,他們互為服務提供者和消費者,兩個服務的代碼格式都差不多,這里就偷懶只寫一份,
pom檔案
<!-- SpringBoot Web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.2.3.RELEASE</version>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-starter-alibaba-nacos-config -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2.2.3.RELEASE</version>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-dubbo</artifactId>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-registry-nacos</artifactId>
<version>2.7.4.1</version>
</dependency>
<!-- 此處為上面說的dubbbo必須的公用模塊>
<dependency>
<groupId>com.test</groupId>
<artifactId>api-test</artifactId>
<version>0.0.1</version>
</dependency>
先說dubbo怎么寫
bootstrap.yml
注冊服務到nacos并讀取nacos配置
spring:
cloud:
nacos:
config:
server-addr: 12.12.12.12:123
file-extension: yaml
discovery:
server-addr: 12.12.12.12:123
啟動類
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
@EnableDubbo
@EnableDiscoveryClient
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
@enabledubbo 注解是標注此專案為dubbo服務提供者與消費者,該注解是額外標注這三個注解
@EnableDubboConfig引入類DubboConfigConfigurationRegistrar,將于決議配置相關的類注冊到spring容器;
@DubboComponentScan引入類DubboComponentScanRegistrar,用于指定@Service掃描路徑;
@EnableDubboLifecycle引入類DubboLifecycleComponentRegistrar,注冊了兩個監聽器到spring容器,
接下來是重點
上面提到的公共模塊的interface實作
import com.guangxin.system.api.TestService;
import org.apache.dubbo.config.annotation.DubboService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/** dubbo遠程呼叫類
* @author admin
*/
@DubboService(timeout = 10000,group = "order")
public class TestServiceImpl implements TestService {
private static final Logger log = LoggerFactory.getLogger(TestServiceImpl.class);
@Override
public String test(String test1Msg, String test2Msg) {
log.info("dubbo進入了order模塊遠程呼叫");
return test1Msg;
}
}
注:此類寫在服務提供者里面
服務提供者(是提供者不是消費者)的application.yml配置
dubbo:
application:
#name=服務名
name: payment-dev
# 專案訪問埠
qos-port: 8091
consumer:
check: false
scan:
# 上述的服務提供者的實作類所在的包
base-packages: com.xxx.test.dubbo
protocol:
#name=
name: dubbo
port: -1
registry:
#spring-cloud=托管到spring-cloud的注冊中心,可改為nacos://10.21.32.22:123,但注冊中心的每個dubbo服務會額外出現兩個多余的服務,技術所限,原因未知,改為spring-cloud則無此毛病
address: spring-cloud://10.21.32.22:123
消費服務
@DubboReference(group = "order")
private OrderService orderService;
@PostMapping("testOrderDubbo")
public BaseResult testOrderDubbo(String msg) {
testService.test(msg, "payment訪問order模塊");
return BaseResult.successResult();
}
輪到nacos了
首先到nacos的public命名空間建立組態檔,dataId命名格式為:#{服務名}-#{環境名}.${檔案后綴},此處的檔案后綴統一為yaml
服務注冊到nacos非常簡單,bootstrap.yml配置下就行
server:
port: 8092
spring:
application:
name: order-dev
cloud:
nacos:
config:
#nacos地址
server-addr: 10.21.32.22:123
#nacos組態檔后綴
file-extension: yaml
discovery:
server-addr: 10.21.32.22:123
默認是用#{服務名}-#{環境名}.${檔案后綴}查找組態檔,默認通過上述spring.cloud.config.server-addr的地址/nacos找組態檔,spring.cloud.discovery注冊服務,故啟動nacos的server端是盡量不要更改服務名
最后,啟動專案,

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/249051.html
標籤:其他
上一篇:聊一聊,面試為什么大廠鐘愛問原始碼,真的是(問)造火箭=>(做)擰螺絲?如何讀原始碼?
下一篇:Go常見并發模式
