前言
已經好久沒有更新文章了,小編最近比較偷懶,清明節放假在忙一些事情,然后落下了很多,今天將Spring的擴展點結束,之后進入SpringMvc以及SpringBoot的原始碼學習,對了Dubbo的原始碼學習也差不多結束了,請大家繼續支持小編!
小編這次主要介紹Nacos作為注冊中心與Spring的整合原理,不過要講解這個需要使用當下最流行的一些微服務治理框架,即阿里創造的spring cloud alibaba,所以小編先得構建微服務專案,這邊小編把構建的步驟和自己的學習方式分享一下,希望對大家有所幫助,話不多說進入正題,
構建微服務步驟
這邊小編借鑒了spring官方檔案,阿里將自己對spring的擴展也放進了spring官網中,小編參考了Spring cloud官方檔案、spring cloud alibaba官方檔案和Nacos檔案,這邊小編也建議大家學習的時候盡量看官方檔案,然后做出自己的理解,當然是自己空余時間學習時,下面小編一步一步構建以nacos為注冊中心的微服務專案,
1、準備作業Nacos的安裝
這邊nacos安裝啟動可以有兩種方案:
第一種去下載壓縮包,
然后下載好了,在bin里面啟動,nacos下載路徑,

下載完畢后,不同的系統啟動方式:
windows 使用cmd到解壓檔案下面使用以下命令:
startup.cmd -m standalone
Linux/Unix/Mac 啟動命令:
startup.sh -m standalone
啟動命令(standalone代表著單機模式運行,非集群模式,默認集群)
完成后輸入網址127.0.0.1:8848/nacos然后登錄,用戶名密碼都是nacos

第二種方式:
下載原始碼然后啟動,這樣有利于我們學習,
這邊下載完畢然后進入nacos-console子專案,然后再啟動引數里面加-Dnacos.standalone=true ,然后啟動main方法即可,子專案里面application.properties定義了服務埠,默認8848,所以nacos啟動后訪問埠號為8848,具體配置如下:
## Default web context path:
server.servlet.contextPath=/nacos
### Default web server port:
server.port=8848
啟動后訪問和第一種一樣,
說明:nacos啟動默認使用集群方式,需要配置資料庫等資訊,這邊學習我們只配單機模式所以加入啟動引數-Dnacos.standalone=true,或使用命令啟動的時候加入-m standalone,否則就會報錯,啟動不了,
下載原始碼的時候直接下載發布下面的原始碼如果你用git那用注意一下分支和使用的tag,
2、創建一個父專案修改pom檔案(這個不需要小撰寫詳細步驟了吧)
父類pom檔案如下,groupId和artifactId修改為自己的工程名
<?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">
<modelVersion>4.0.0</modelVersion>
<groupId>com.learn.code</groupId>
<artifactId>spring-cloud-course</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.3</version>
<relativePath/>
</parent>
<modules>
<module>spring-cloud-provider</module>
<module>spring-cloud-client</module>
</modules>
<properties>
<spring.cloud-version>2020.0.2</spring.cloud-version>
<project-version>2.2.1.RELEASE</project-version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring.cloud-version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${project-version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>
3、加入服務提供
在父專案下面加入服務提供子專案其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>spring-cloud-course</artifactId>
<groupId>com.learn.code</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>spring-cloud-provider</artifactId>
<dependencies>
<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-web</artifactId>
</dependency>
</dependencies>
</project>
組態檔寫在resource下面application.yml檔案:
server:
port: 8081
spring:
application:
name: provider
cloud:
nacos:
server-addr: localhost:8848
寫個啟動類:
@SpringBootApplication
public class WebApplication {
public static void main(String[] args) {
SpringApplication.run(WebApplication.class,args);
}
}
啟動服務測驗看是否已經注冊到nacos里面了

3、加入客戶端
客戶端和服務端內容基本一致,在組態檔yml中修改服務名和埠號,pom檔案一直即可,連啟動類都可以復用,然后啟動后,在nacos服務里面就會發現兩個服務串列,如下,

4、測驗呼叫
這里客戶端呼叫的時候使用openFeign所以需要修改客戶端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>spring-cloud-course</artifactId>
<groupId>com.learn.code</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>spring-cloud-client</artifactId>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-loadbalancer</artifactId>
</dependency>
</dependencies>
</project>
客戶端代碼
//controller層
@RestController
public class ConsumerController {
@Autowired
private ProviderService service;
@RequestMapping("/doMap")
public Map<String,String> getMap(){
return service.map();
}
}
//介面
@FeignClient("provider")
public interface ProviderService {
@RequestMapping(value = "/getMap")
Map<String,String> map();
}
@SpringBootApplication
@EnableFeignClients
public class WebApplication {
public static void main(String[] args) {
SpringApplication.run(WebApplication.class,args);
}
}
服務端代碼
@RestController
public class ProviderController {
@RequestMapping("/getMap")
public Map<String,String> getMap(){
return Collections.singletonMap("1","bob");
}
}
遠程呼叫結果:

這樣一個簡單的微服務就完成了,
總結
今天小編主要是根據官方檔案搭建微服務專案,接下來會帶大家了解注冊中心nacos的整合原理,
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/274543.html
標籤:其他
