一,springcloud alibaba簡介
再介紹一門技術之前,我們一定要先去讀他的官網,把它看個兩遍三遍的
官網:https://github.com/alibaba/spring-cloud-alibaba/blob/master/README-zh.md
Spring Cloud Alibaba 致力于提供微服務開發的一站式解決方案,此專案包含開發分布式應用微服務的必需組件,方便開發者通過 Spring Cloud 編程模型輕松使用這些組件來開發分布式應用服務,
依托 Spring Cloud Alibaba,您只需要添加一些注解和少量配置,就可以將 Spring Cloud 應用接入阿里微服務解決方案,通過阿里中間件來迅速搭建分布式應用系統,
二,nacos講解
在將結nacos之前,依舊需要先讀官網:https://nacos.io/zh-cn/
接下來講我們的重點了,在學了之前的springclod之后,我們的注冊中心和配置中心是使用eureka + config + bus,重點來了,nacos直接將這三個給取代了,而且不需要像之前一樣需要重啟專案才能進行訪問.每次學完舊技術再學新技術,就感覺自己又被坑了,只不過雖然新技術簡單,但是思想還是一樣的,都是互相 “抄作業” 的,
接下來用一張圖來說明nacos的作用,來自官網

三,nacos下載安裝以及解決期間遇到的坑
這里使用windows下的作為演示,當然nacos作為集群的部署最侄訓是需要到linux下進行部署的,
下載官網:https://github.com/alibaba/nacos/releases/tag/1.1.4

解壓完成之后,出現以下畫面即可

接下來打開conf檔案下面的application.properties檔案,最好使用notepad++打開,真的是神器,

作如下修改,否則在啟動時報錯,將前面的 # 號去掉,全部打開處于正常運行狀態

再將nccos-mysql.sql腳本丟入到mysql資料庫中,并且資料庫名稱為nacos

再將bin目錄下的startup.cmd腳本打開

將26行的改成和下面的一樣,都為standalone

接下來打來bin目錄,點擊startup.cmd運行即可,出現如下畫面,則nacos安裝成功!

由上圖可知,埠號默認為8848,接下來打開瀏覽器訪問一下,輸入http://localhost:8848/nacos 即可,賬號密碼都是nacos,由于我做了集群配置因此出現了以下界面,剛開始肯定是一個登錄頁面的,我這里回不去了,賬號密碼一定都是nacos

四,編碼以及集群的搭建
首先約定>配置>環境,環境的配置,可以參考我前面的一篇springcloud微服務入門:https://blog.csdn.net/zhenghuishengq/article/details/113790619
1,通用包api-commons

pom.xml檔案
<?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>cloud2020</artifactId>
<groupId>com.atgui.springcloud</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>cloud-api-commons</artifactId>
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
<scope>provided</scope>
</dependency>
<!--熱部署工具-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.1.0</version>
</dependency>
</dependencies>
</project>
物體類CommonResult
package com.zheng.api.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class CommonResult<T> {
private Integer code; //類似404
private String message; //資訊描述
private T data; //
public CommonResult(Integer code,String message){
this(code,message,null);
}
}
物體類Payment
package com.zheng.api.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Payment implements Serializable {
private long id;
private String serial;
@Override
public String toString() {
return "Payment{" +
"id=" + id +
", serial='" + serial + '\'' +
'}';
}
}
2,服務提供者,搭建一個集群,分別為cloudalibaba-provider-payment-9001和cloudalibaba-provider-payment-9002
拿cloudalibaba-provider-payment-9001為例,另一個改一個埠號即可,

<?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>cloud2020</artifactId>
<groupId>com.atgui.springcloud</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>cloudalibaba-provider-payment-9001</artifactId>
<dependencies>
<!-- SpringCloud alibaba nacos -->
<!-- https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-starter-alibaba-nacos-discovery -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2.1.0.RELEASE</version>
</dependency>
<dependency>
<!--引入自己定義的 api 通用包-->
<groupId>com.atgui.springcloud</groupId>
<artifactId>cloud-api-commons</artifactId>
<version>${project.version}</version>
</dependency>
<!-- web組件 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
</dependencies>
</project>
application.yml
server:
port: 9001
spring:
application:
name: nacos-payment-provider
cloud:
nacos:
discovery:
server-addr: localhost:8848 #配置nacos地址
management:
endpoints:
web:
exposure:
include: "*"
PaymentController
package com.zheng.springcloud.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
/**
* @author zhenghuisheng
* @date 2021/02/16
*/
@RestController
public class PaymentController {
@Value("${server.port}")
private String serverPort;
@GetMapping(value = "/payment/nacos/{id}")
public String getPayment(@PathVariable("id") Integer id) {
return "nacos registry, serverPort: " + serverPort + "\t id" + id;
}
}
主啟動類PaynentMain9001.java
package com.zheng.springcloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
@EnableDiscoveryClient
public class PaynentMain9001 {
public static void main(String[] args) {
SpringApplication.run(PaynentMain9001.class,args);
}
}
cloudalibaba-provider-payment-9002在application.yml中改個埠號就行了
server:
port: 9002
spring:
application:
name: nacos-payment-provider
cloud:
nacos:
discovery:
server-addr: localhost:8848 #配置nacos地址
management:
endpoints:
web:
exposure:
include: "*"
3,消費者

pom.xml
<?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>cloud2020</artifactId>
<groupId>com.atgui.springcloud</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>cloudalibaba-config-nacos-client3377</artifactId>
<dependencies>
<!-- nacos config -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!-- SpringCloud alibaba nacos -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- 引入自定義的api通用包,可以使用Payment支付Entity -->
<dependency>
<!--引入自己定義的 api 通用包-->
<groupId>com.atgui.springcloud</groupId>
<artifactId>cloud-api-commons</artifactId>
<version>${project.version}</version>
</dependency>
<!-- web組件 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
</dependencies>
</project>
bootstrap.yml
沒錯,就是bootstrap.yml,他與application.yml具有父子級關系,先加載bootstrap.yml再加載application.yml
server:
port: 3377
spring:
application:
name: nacos-config-client
cloud:
nacos:
discovery:
server-addr: localhost:8848 # Nacos 服務注冊中心地址
config:
server-addr: localhost:8848 # Nacos 作為配置中心地址
file-extension: yaml #指定yaml格式的配置 yml會報錯,nacos識別yaml
application.yml
spring:
profiles:
active: dev
# active: test
# active: info
ConfigController
package com.zheng.springcloud.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RefreshScope //通過SpringCloud原生注解 @RefreshScope 實作配置自動更新
public class ConfigController {
@Value("${config.info}")
private String configInfo;
@GetMapping("/config/info")
public String getConfigInfo() {
return configInfo;
}
}
主啟動類 ConfigMain3377.java
package com.zheng.springcloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@EnableDiscoveryClient
@SpringBootApplication
public class ConfigMain3377 {
public static void main(String[] args) {
SpringApplication.run(ConfigMain3377.class,args);
}
}
五,測驗
依舊使用的是Run Dashboard,可以參考springcloud入門的博客,里面有具體的配置

再次打開nacos,在瀏覽器上輸入localhost:8848/nacos,可以發現以下界面,
幾個服務名正是我們application.yml里面的服務名

也可以再詳情這個按鈕中看到

六,總結
根據以上步驟,nacos就已經搭建出來了
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/261369.html
標籤:java
上一篇:云原生系列6 基于springcloud架構風格的本地debug實作
下一篇:String類的常用方法(equals、getBytes、indexOf、lastIndexOf、isEmpty、length)
