成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Springboot 項目集成 Nacos 實現服務注冊發現與配置管理

開發 前端
我們通過使用 SpringBoot 項目集成 Nacos 來給大家演示一下是如何使用 Nacos 來實現服務發現和配置管理的。

[[393779]]

本文轉載自微信公眾號「Java極客技術」,作者鴨血粉絲。轉載本文請聯系Java極客技術公眾號。  

Hello 大家好,我是阿粉,前面的文章給大家介紹了一下如何在本地搭建微服務環境下的服務注冊中心和配置管理中心 Nacos,今天通過

我們通過使用 SpringBoot 項目集成 Nacos 來給大家演示一下是如何使用 Nacos 來實現服務發現和配置管理的。

啟動 Nacos 服務

啟動完本地搭建的 Nacos 服務后,我們可以看到,目前的服務管理下面的服務列表里面在三個命名空間下都沒有服務,這是正常的,因為目前我們還沒有服務接入Nacos。

Nacos 服務啟動成功后,我們再創建兩個 SpringBoot 項目,一個用于接入 Nacos 服務注冊與發現和配置中心作為服務提供者 Producer,另一個只接入 Nacos的服務注冊與發現,調用 Producer 獲取配置中心的參數,我們叫做Consumer。

服務提供者 Producer

1.我們首先創建一個 SpringBoot 的項目,bootstrap.properties 文件內容如下:

  1. spring.application.name=producer 
  2.  
  3. #######################配置中心配置################################# 
  4. # 指定的命名空間,只會在對應的命名空間下查找對應的配置文件 
  5. spring.cloud.nacos.config.namespace=caeser-adsys-naming 
  6. spring.cloud.nacos.config.file-extension=properties 
  7. # 配置的分組名稱 
  8. spring.cloud.nacos.config.group=TEST1 
  9. # 配置文件,數組形式,可以多個,依次遞增 
  10. spring.cloud.nacos.config.ext-config[0].data-id=com.example.properties 
  11. spring.cloud.nacos.config.ext-config[0].group=TEST1 
  12. # 配置中心的地址 
  13. spring.cloud.nacos.config.server-addr=127.0.0.1:8848 
  14. #啟用自動刷新對應的配置文件 
  15. spring.cloud.nacos.config.ext-config[0].refresh=true 
  16. ######################服務注冊發現配置################################## 
  17.  
  18. # 服務集群名稱 
  19. spring.cloud.nacos.discovery.cluster-name=TEST1_GROUP 
  20. # 服務注冊中心的地址 
  21. spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848 
  22. # 服務的命名空間 
  23. spring.cloud.nacos.discovery.namespace=caeser-adsys-naming 

2.application.properties 的文件內容如下,主要就是一個端口,其他配置根據情況自行添加或刪除就好:

  1. # 服務啟動的端口 
  2. server.port=8080 
  3. spring.main.allow-bean-definition-overriding=true 
  4. # tomcat 配置 
  5. server.tomcat.max-threads=500 
  6. spring.mvc.servlet.load-on-startup=1 
  7. spring.servlet.multipart.max-file-size=40MB 
  8. spring.servlet.multipart.max-request-size=100MB 
  9. # 日志配置 
  10. logging.level.root=info 
  11. logging.level.com.alibaba=error 
  12. logging.pattern.console=%clr{[%level]}{green} [%d{yyyy-MM-dd HH:mm:ss}] %clr{[${PID:-}]}{faint} %clr{[%thread]}{magenta} %clr{[%-40.40logger{80}:%line]}{cyan} %msg%n 

3.在啟動類上面增加如下注解

  1. package com.ziyou.nacos.demo.producer; 
  2.  
  3. import org.springframework.boot.SpringApplication; 
  4. import org.springframework.boot.autoconfigure.SpringBootApplication; 
  5. import org.springframework.cache.annotation.EnableCaching; 
  6. import org.springframework.cloud.client.discovery.EnableDiscoveryClient; 
  7.  
  8. @SpringBootApplication(scanBasePackages = "com.ziyou.nacos"
  9. @EnableDiscoveryClient 
  10. @EnableCaching 
  11. public class ProducerApplication { 
  12.  
  13.     public static void main(String[] args) { 
  14.         SpringApplication.run(ProducerApplication.class, args); 
  15.     } 

4.pom.xml 文件內容如下:

  1. <?xml version="1.0" encoding="UTF-8"?> 
  2.  
  3. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  4.   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
  5.   <modelVersion>4.0.0</modelVersion> 
  6.  
  7.   <parent> 
  8.     <groupId>org.example</groupId> 
  9.     <artifactId>nacos-demo</artifactId> 
  10.     <version>1.0-SNAPSHOT</version> 
  11.   </parent> 
  12.  
  13.   <artifactId>producer</artifactId> 
  14.   <version>1.0-SNAPSHOT</version> 
  15.  
  16.   <name>producer Maven Webapp</name
  17.   <!-- FIXME change it to the project's website --> 
  18.   <url>http://www.example.com</url> 
  19.  
  20.   <properties> 
  21.     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
  22.     <maven.compiler.source>1.7</maven.compiler.source> 
  23.     <maven.compiler.target>1.7</maven.compiler.target> 
  24.     <spring.maven.plugin.version>2.2.2.RELEASE</spring.maven.plugin.version> 
  25.   </properties> 
  26.  
  27.   <dependencies> 
  28.     <!-- Spring Boot --> 
  29.     <dependency> 
  30.       <groupId>org.springframework.boot</groupId> 
  31.       <artifactId>spring-boot-starter</artifactId> 
  32.       <exclusions> 
  33.         <exclusion> 
  34.           <groupId>org.springframework.boot</groupId> 
  35.           <artifactId>spring-boot-starter-logging</artifactId> 
  36.         </exclusion> 
  37.       </exclusions> 
  38.     </dependency> 
  39.     <dependency> 
  40.       <groupId>org.springframework.boot</groupId> 
  41.       <artifactId>spring-boot-starter-log4j2</artifactId> 
  42.     </dependency> 
  43.     <dependency> 
  44.       <groupId>org.springframework.boot</groupId> 
  45.       <artifactId>spring-boot-starter-web</artifactId> 
  46.     </dependency> 
  47.  
  48.     <!-- nacos 配置中心 --> 
  49.     <dependency> 
  50.       <groupId>com.alibaba.cloud</groupId> 
  51.       <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> 
  52.     </dependency> 
  53.     <!-- nacos 注冊發現 --> 
  54.     <dependency> 
  55.       <groupId>com.alibaba.cloud</groupId> 
  56.       <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> 
  57.     </dependency> 
  58.   </dependencies> 
  59.  
  60.   <build> 
  61.     <!--指定下面的目錄為資源文件--> 
  62.     <resources> 
  63.       <!--設置自動替換--> 
  64.       <resource> 
  65.         <directory>src/main/resources</directory> 
  66.         <filtering>true</filtering> 
  67.         <includes> 
  68.           <include>**/**</include> 
  69.         </includes> 
  70.       </resource> 
  71.     </resources> 
  72.     <finalName>producer</finalName> 
  73.     <plugins> 
  74.       <plugin> 
  75.         <groupId>org.springframework.boot</groupId> 
  76.         <artifactId>spring-boot-maven-plugin</artifactId> 
  77.         <version>${spring.maven.plugin.version}</version> 
  78.         <executions> 
  79.           <execution> 
  80.             <goals> 
  81.               <goal>repackage</goal> 
  82.             </goals> 
  83.           </execution> 
  84.         </executions> 
  85.       </plugin> 
  86.     </plugins> 
  87.   </build> 
  88. </project> 

5.在 Producer 側提供一個獲取配置里面內容的接口,代碼如下:

  1. package com.ziyou.nacos.demo.producer.controller; 
  2.  
  3. import com.ziyou.nacos.demo.producer.config.UserConfig; 
  4. import org.springframework.beans.factory.annotation.Autowired; 
  5. import org.springframework.web.bind.annotation.GetMapping; 
  6. import org.springframework.web.bind.annotation.RequestMapping; 
  7. import org.springframework.web.bind.annotation.RestController; 
  8.  
  9. /** 
  10.  * <br> 
  11.  * <b>Function:</b><br> 
  12.  * <b>Author:</b>@author ziyou<br> 
  13.  * <b>Date:</b>2021-04-11 19:59<br> 
  14.  * <b>Desc:</b>無<br> 
  15.  */ 
  16. @RestController 
  17. @RequestMapping(value = "producer"
  18. public class ProducerController { 
  19.  
  20.     private UserConfig userConfig; 
  21.  
  22.     @GetMapping("/getUsername"
  23.     private String getUsername() { 
  24.         String result = userConfig.getUsername() + "-" + userConfig.getPassword(); 
  25.         System.out.println(result); 
  26.         return result; 
  27.     } 
  28.  
  29.     @Autowired 
  30.     public void setUserConfig(UserConfig userConfig) { 
  31.         this.userConfig = userConfig; 
  32.     } 
  1. package com.ziyou.nacos.demo.producer.config; 
  2.  
  3. import org.springframework.beans.factory.annotation.Value; 
  4. import org.springframework.cloud.context.config.annotation.RefreshScope; 
  5. import org.springframework.stereotype.Component; 
  6.  
  7. /** 
  8.  * <br> 
  9.  * <b>Function:</b><br> 
  10.  * <b>Author:</b>@author ziyou<br> 
  11.  * <b>Date:</b>2021-04-11 20:39<br> 
  12.  * <b>Desc:</b>無<br> 
  13.  */ 
  14. @RefreshScope 
  15. @Component 
  16. public class UserConfig { 
  17.     @Value("${username}"
  18.     private String username; 
  19.     @Value("${password}"
  20.     private String password
  21.  
  22.     public String getUsername() { 
  23.         return username; 
  24.     } 
  25.  
  26.     public void setUsername(String username) { 
  27.         this.username = username; 
  28.     } 
  29.  
  30.     public String getPassword() { 
  31.         return password
  32.     } 
  33.  
  34.     public void setPassword(String password) { 
  35.         this.password = password
  36.     } 

6.啟動 Producer,并且手動調用接口,啟動 Producer 過后,我們在 Nacos 的服務注冊列表可以看如下所示的內容,在 test1 的命名空間下,已經有了我們創建的 Producer 服務。

7.通過手動調用 Producer 的接口 http://127.0.0.1:8080/producer/getUsername 顯示如下內容

并且我們看下此時 Nacos 的配置中心里面配置文件com.example.properties 里面的內容正是這個,這個時候我們手動把配置里面password 參數的值改成JavaGeek666,再次訪問接口,我們會發現接口的輸出也自動改變了。

修改配置內容如下:

再次訪問結果如下:

服務調用者 Consumer

前面我們已經完成了Producer 的服務注冊與配置動態生效的功能,這個時候基本已經可以使用了,不過我們還需要更進一步通過 Nacos 來實現服務發現,接下來我們創建 Consumer 的 SpringBoot 的項目,配置文件和pom.xml 文件基本一致,只要修改端口以及對應地方,下面貼一下不一樣的地方

1.boostrap.properties 內容如下,因為這里我們只調用Producer 的接口,不需要接入 Nacos 的配置中心,所以這里只配置發服務注冊與發現

  1. spring.application.name=consumer 
  2.  
  3. ######################服務注冊發現配置################################## 
  4. spring.cloud.nacos.discovery.cluster-name=TEST1_GROUP 
  5. spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848 
  6. spring.cloud.nacos.discovery.namespace=caeser-adsys-naming 

2.啟動類,配置上 feignClient 需要掃描的包路徑

  1. package com.ziyou.nacos.demo.consumer; 
  2.  
  3. import org.springframework.boot.SpringApplication; 
  4. import org.springframework.boot.autoconfigure.SpringBootApplication; 
  5. import org.springframework.cache.annotation.EnableCaching; 
  6. import org.springframework.cloud.openfeign.EnableFeignClients; 
  7.  
  8. /** 
  9.  * <br> 
  10.  * <b>Function:</b><br> 
  11.  * <b>Author:</b>@author ziyou<br> 
  12.  * <b>Date:</b>2021-04-11 17:07<br> 
  13.  * <b>Desc:</b>無<br> 
  14.  */ 
  15. @SpringBootApplication(scanBasePackages = "com.ziyou.nacos"
  16. @EnableFeignClients(basePackages = {"com.ziyou.nacos.demo.consumer.rpc"}) 
  17. @EnableCaching 
  18. public class ConsumerApplication { 
  19.     public static void main(String[] args) { 
  20.         SpringApplication.run(ConsumerApplication.class, args); 
  21.     } 

3.編寫調用 Producer 的接口,FeignClient 里面的 value 就是 Producer 的應用名稱

  1. package com.ziyou.nacos.demo.consumer.rpc; 
  2.  
  3. import org.springframework.cloud.openfeign.FeignClient; 
  4. import org.springframework.stereotype.Component; 
  5. import org.springframework.web.bind.annotation.GetMapping; 
  6.  
  7. /** 
  8.  * <br> 
  9.  * <b>Function:</b><br> 
  10.  * <b>Author:</b>@author ziyou<br> 
  11.  * <b>Date:</b>2021-04-11 20:01<br> 
  12.  * <b>Desc:</b>無<br> 
  13.  */ 
  14. @FeignClient(value = "producer"
  15. @Component 
  16. public interface IProducerFeign { 
  17.     /** 
  18.      * 獲取生產者名稱接口 
  19.      * 
  20.      * @return 
  21.      */ 
  22.     @GetMapping("/producer/getUsername"
  23.     String getUsername(); 
  24.  
  1. package com.ziyou.nacos.demo.consumer.controller; 
  2.  
  3. import com.ziyou.nacos.demo.consumer.rpc.IProducerFeign; 
  4. import org.springframework.beans.factory.annotation.Autowired; 
  5. import org.springframework.web.bind.annotation.GetMapping; 
  6. import org.springframework.web.bind.annotation.RequestMapping; 
  7. import org.springframework.web.bind.annotation.RestController; 
  8.  
  9. /** 
  10.  * <br> 
  11.  * <b>Function:</b><br> 
  12.  * <b>Author:</b>@author ziyou<br> 
  13.  * <b>Date:</b>2021-04-11 19:59<br> 
  14.  * <b>Desc:</b>無<br> 
  15.  */ 
  16. @RestController 
  17. @RequestMapping(value = "consumer"
  18. public class TestNacosController { 
  19.  
  20.     private IProducerFeign iProducerFeign; 
  21.  
  22.     @GetMapping("/testNacos"
  23.     private String testNacos() { 
  24.         return iProducerFeign.getUsername(); 
  25.     } 
  26.  
  27.     @Autowired 
  28.     public void setiProducerFeign(IProducerFeign iProducerFeign) { 
  29.         this.iProducerFeign = iProducerFeign; 
  30.     } 

4.啟動Consumer,我們可以看到在 Nacos 如下圖所示

5.調用 Consumer 的接口consumer/testNacos,結果如下圖所示,同樣的如果此時更改了 Nacos 配置文件中的內容,Consumer 這邊也是可以實時更新的,感興趣的小伙伴可以自己試試。

 

今天主要給大家介紹了一下如何通過 SpringBoot 項目來接入 Naocs 實現服務注冊與發現,以及配置管理和動態刷新,相關的代碼已經上傳到 GitHub 了。

 

責任編輯:武曉燕 來源: Java極客技術
相關推薦

2022-02-07 07:10:32

服務注冊功能

2022-02-09 07:03:01

SpringNacos服務注冊

2022-04-26 05:36:42

服務治理模式

2023-12-07 08:07:10

2021-04-20 17:20:59

SpringColud EurekaNetflix開發

2015-12-25 11:00:52

Zookeeper的Python

2023-04-27 08:18:25

GitLab開源

2022-06-08 10:58:00

服務配置Nacos

2022-06-13 09:58:06

NacosSpring

2023-05-30 07:50:56

項目管理權限

2025-01-20 00:10:00

Go語言Kratos

2021-07-12 08:00:21

Nacos 服務注冊源碼分析

2023-08-03 08:51:07

2023-11-29 16:21:30

Kubernetes服務注冊

2009-03-03 17:17:52

環境配置軟件開發

2022-01-16 23:10:40

語言服務注冊

2009-03-25 09:52:00

虛擬網絡VLAN配置

2022-07-07 10:43:58

安全配置管理SCM

2020-08-26 07:37:25

Nacos微服務SpringBoot

2025-01-09 08:32:50

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美综合色 | 久久精品亚洲精品 | 中文字幕精品一区二区三区精品 | 免费麻豆视频 | 91久久久久久| 日本在线视频一区二区 | 日韩成人精品一区二区三区 | 日韩一区二区免费视频 | 欧美日韩视频在线第一区 | 欧美在线观看黄色 | 亚洲欧美国产精品一区二区 | 国产日韩欧美激情 | 免费在线观看h片 | 国产精品高潮呻吟久久aⅴ码 | 精品国产91乱码一区二区三区 | 国产福利91精品一区二区三区 | 综合九九| 亚洲热在线视频 | 日韩中文字幕一区二区 | 午夜在线精品 | 一二三在线视频 | 国产精品成av人在线视午夜片 | 亚洲精品视频免费观看 | 成人在线视频免费观看 | 日本精品一区二区三区在线观看视频 | 成人在线视频网 | 日韩一区不卡 | 成年精品 | 日韩成人av在线 | 精品免费国产一区二区三区 | 久久久蜜桃一区二区人 | 在线欧美亚洲 | 成人小视频在线观看 | 国产精品久久久99 | 色就是色欧美 | 日韩在线一区二区 | 国产精品毛片一区二区在线看 | 日韩精品在线免费观看视频 | 中文字幕视频在线 | 日韩在线电影 | 人人做人人澡人人爽欧美 |