您好,登錄后才能下訂單哦!
今天小編給大家分享一下Spring Cloud Alibaba整合Nacos使用的方法是什么的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
近些年,隨著微服務框架在越來越多的公司產品中實踐落地,以Spring Cloud Alibaba為導向的一站式微服務解決方案也成為微服務實踐和運用的風向標,Spring Cloud Alibaba提供了越來越完善的各類微服務治理組件,比如分布式服務配置與注冊中心nacos,服務限流、熔斷組件sentinel等。
為什么需要注冊中心呢?簡單來說,隨著微服務的個數增多,規模增大,再向以往那樣,兩個微服務之間直接通過拼接完整的請求url調用的話,微服務的維護成本將是巨大的,也不便于后續微服務的API統一治理。
事實上,微服務化的目的就是為了減少服務間的緊密耦合,同時,一定程度上減少服務與服務之間調用時更多的信息暴露,更直接點來說,就是說服務與服務之間的調用應該是去中心化的調用,而注冊中心的好處就是為了達到此目的,注冊中心提供了一種服務與服務之間互相發現的機制,通過注冊中心,微服務提供的各類服務資源可以被統一納管,進行集中式管理,這就是注冊中心的好處。
下面是dubbo核心的經典的服務注冊與調用示意圖,其服務治理的核心就是注冊中心:Registry的存在。
下圖列舉了常用的幾種分布式配置中心各個功能的對比,其他更多的配置中心,像eureka,zk,consul等也是可以使用的,具體可結合實際場景進行選擇;
從上面的表的數據對比來看,springcloud alibaba為了更好的治理和打造自身的微服務生態體系,最終選擇了自研的nacos,nacos即是分布式服務注冊中心,同時也可以作為分布式配置中心使用,而且基于界面可視化操作客戶端,提供了完善的治理方案。
一個更易于構建云原生應用的動態服務發現(Nacos Discovery )、服務配置(Nacos Config)和服務管理平臺。
nacos的主要特點如下:
服務發現和服務健康監測;
動態配置服務;
動態 DNS 服務;
服務及其元數據管理;
簡而言之
nacos 用于管理所有微服務、解決微服務之間調用關系錯綜復雜、難以維護的問題;
下圖詳細介紹了nacos的生態,優勢,業務,架構等多維度的全景圖,由此可見,作為springcloud-alibaba微服務生態體系下的一款組件,其位置是非常重要的。
nacos在單機環境下安裝部署非常簡單,只需要下載好安裝包之后,執行bin目錄下的啟動腳本即可快速啟動服務,下面是完整的流程。
也可以根據自身的需要選擇合適的版本下載使用。
選擇完版本后,可以選擇linux或者windows環境的安裝包下載即可;
這里選擇了zip壓縮包
nacos啟動腳本里面提供了集群模式和單機模式啟動兩種方式,由于本機搭建使用,選用單機模式即可,修改啟動腳本中如下的關鍵參數;
修改并保存腳本之后,雙擊啟動服務
啟動成功之后,按上圖中地址訪問nacos的客戶端控制臺,默認登錄用戶名和密碼:nacos/nacos
登錄成功后,看到如下的控制臺界面;
在真正進行代碼整合之前,一定要弄清springloud alibaba版本選擇的事情,很多同學在這里由于沒弄清springloud alibaba與springboot的版本依賴,兼容性導致在整合過程中遇到較多的問題;
下面摘取git中關于各個版本選型的詳細對照,git地址:各版本依賴關系地址,最重要的就是springboot的版本與Spring Cloud Alibaba 版本的依賴關系;
需求說明
1、創建兩個微服務,order(訂單)微服務,和stock(庫存)微服務;
2、將兩個微服務注冊到nacos,通過nacos實現order服務對stock服務的調用;
有更多需要管理的jar,統一在dependencyManagement中加入即可;
<!-- 統一管理jar包版本 --> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <log4j.version>1.2.17</log4j.version> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>2.2.2.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Hoxton.SR1</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>2.1.0.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
這里暫時只需要導入springboot-web以及nacos的客戶端即可;
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--nacos-config 配置中心-自帶動態刷新--> <!--<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency>--> <!--nacos-discovery 注冊中心-服務發現與注冊--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> </dependencies>
stock模塊配置文件
server: port: 8085 spring: application: name: stock-service cloud: nacos: discovery: server-addr: localhost:8848 #服務注冊中心地址 #config: #server-addr: localhost:8848 #配置中心地址
order模塊配置文件
server: port: 8083 spring: application: name: order-service cloud: nacos: discovery: server-addr: localhost:8848 #服務注冊中心地址 #config: #server-addr: localhost:8848 #配置中心地址 service-url: nacos-user-service: http://stock-service
在stock模塊中添加一個扣減庫存的接口,給下單接口使用
@RestController @RequestMapping("/stock") public class StockController { @GetMapping("/reduct") public String reduct(){ System.out.println("扣減庫存"); return "扣減庫存"; } }
@RestController @RequestMapping("/order") public class OrderController { @Autowired RestTemplate restTemplate; @Value("${service-url.nacos-user-service}") private String serverURL; //localhost:8083/order/add @GetMapping("/add") public String add(){ System.out.println("下單成功"); //String forObject = restTemplate.getForObject("http://localhost:8082/stock/reduct", String.class); String forObject = restTemplate.getForObject(serverURL + "/stock/reduct", String.class); System.out.println(forObject); return "add order :" + forObject; } }
兩個模塊的啟動類上面都加上@EnableDiscoveryClient 注解
@SpringBootApplication @EnableDiscoveryClient public class OrderApp { public static void main(String[] args) { SpringApplication.run(OrderApp.class,args); } }
由于spring-cloud-starter-alibaba-nacos-discovery默認集成的是Ribbon,我們知道Ribbon是基于客戶端的負載均衡實現,所以這里的LoadBalancerClient的實現類是RibbonLoadBalancerClient,由Ribbon實現對RestTemplate的負載均衡,在當前的兩個工程模塊中,order作為客戶端,所以需要在order模塊中添加一個RestTemplate的配置類,并使用LoadBalanced注解進行修飾;
@Configuration public class RestConfig { @Bean @LoadBalanced public RestTemplate restTemplate(){ return new RestTemplate(); } }
啟動nacos,然后依次啟動stock服務,order服務,在工程啟動的時候,注意下面的關鍵信息,說明服務注冊到了nacos;
啟動完成之后,再次檢查nacos的服務列表,可以發現上面正是兩個工程的服務名;
瀏覽器調用order模塊的下單接口:localhost:8083/order/add,看到如下效果,說明通過nacos實現對微服務的調用就成功了
以上就是“Spring Cloud Alibaba整合Nacos使用的方法是什么”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。