前言
nacos可以作為微服務的注冊中心 .,也可以作為配置中心, 功能強大. 但是在生産環境中還是不要把nacos 既作為配置中心, 又當做注冊中心, 因為這兩個都是微服務中十分重要的子產品, 如果把他們合在一起風險太大. 可以建議你部署兩個nacos(叢集)來分别作為注冊中心和配置中心.
項目結構
最外面的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.cloud</groupId>
<artifactId>spring-cloud-build</artifactId>
<version>2.3.1.RELEASE</version>
<relativePath/>
</parent>
<groupId>xyz.xiezc</groupId>
<artifactId>dailyMaven</artifactId>
<packaging>pom</packaging>
<version>0.0.1-SNAPSHOT</version>
<modules>
<module>db-jpa</module>
</modules>
<name>dailyMaven</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>11</java.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.2.5.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
</dependency>
<!-- 正常jar -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>
db-jpa子產品的配置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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>dailyMaven</artifactId>
<groupId>xyz.xiezc</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>db-jpa</artifactId>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
</dependencies>
</project>
在resource目錄下增加 application.yml
配置檔案:
application.yml
server:
## 端口号
port: 8001
spring:
application:
## 項目名, 很重要 後面微服務的之間的調用會根據這個來進行路由
name: db-jpa
cloud:
nacos:
discovery:
#配置nacos位址
server-addr: www.abc.com:8848
#打開全部監控端點
maagement:
endpoints:
web:
exposure:
include: '*'
增加啟動類
啟動類代碼如下:
package com.abc.db;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
@EnableDiscoveryClient
public class DbApplication {
public static void main(String[] args) {
SpringApplication.run(DbApplication.class,args);
}
@Slf4j
@RestController
static class TestController {
@GetMapping("/hello")
public String hello(@RequestParam String name) {
log.info("invoked name = " + name);
return "hello " + name;
}
}
}
接下來點選執行即可
運作結果
打開我上篇文章Docker配置的nacos 注冊中心位址, 可以看到服務已經注冊上去了.
接口也可以直接通路
監控也正常
總結
db-jpa 是我用來專門通路資料庫的一個微服務, 這種設計有利和弊;
優點:
- 資料庫可以統一管理, 屏蔽其他微服務都資料庫的通路
- 切換修改資料庫可以隻修改者一個微服務, 不影響其他的微服務
缺點:
- 都使用微服務了, 說明系統壓力大, 會導緻這個服務壓力過大,
- 容易出現單點故障. 這個服務挂了導緻都不可通路資料庫
微服務的劃分有需要要考慮的地方, 沒有萬全的方案, 我之是以這樣搞, 是因為這是我的業餘項目.
這裡一個最最基本的服務注冊到nacos 完成了, 這個服務中我隻是簡單的提供一個http接口, 如果要完整的微服務需要你接入 其他的子產品, 本來這個微服務我定義的是專門用來通路資料庫的. 并且使用dubbo對外提供rpc調用服務, 如何接入dubbo會在後面的文章中介紹.