官方文檔:https://nacos.io/zh-cn/docs/v2/ecology/use-nacos-with-spring-cloud.html
前置條件:SpringCloud腳手架
單機模式下的Nacos控制檯:
<dependencies>
<!-- Registry 註冊中心相關 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- Config 配置中心相關 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!--服務間的遠程調用-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
</dependencies>
Nacos服務註冊與發現
GitHub官方註冊中心實例:https://github.com/alibaba/spring-cloud-alibaba/wiki/Nacos-discovery
作爲註冊中心的nacos主要有三種角色:
- 服務提供者
- 服務消費者
- 服務註冊中心
Nacos配置
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
實現使用openFeign的負載均衡:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
Nacos之前的默認的負載均衡是Ribbon,現版本Nacos 2021已經沒有自帶Ribbon的整合,所以無法通過修改Ribbon負載均衡的模式來實現Nacos提供的負載均衡模式;
啓動類增加註解開關:配置文件在最後
@EnableFeignClients //openfeign 負載均衡及服務調用
@EnableDiscoveryClient //nacos 註冊中心
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
public class LotteryRpc {
public static void main(String[] args) {
SpringApplication.run(LotteryRpc.class, args);
}
}
啓動效果:
啓動兩個服務:
OpenFeign使用
在微服務下,每個模塊的主啓動類都要設置上述的相關的配置。
lottery-activity--------請求-------->lottery-strategy
Lottery-Cloud
└── lottery-activity
└── lottery-activity-facade
└── IActivityToStrategyIntegration
└── lottery-strategy
└── lottery-strategy-controller
└── StrategyController.java
IActivityToStrategyIntegrationn內容
@Service
@FeignClient(value = "lottery-strategy")
public interface IActivityToStrategyIntegration {
/**
* 添加活動策略
* @param strategyDtos
*/
@PostMapping("/facade/addStrategy")
void addStrategy(@RequestBody StrategyDto strategyDtos);
}
strategy服務中正常的接口實現,但是請求的地址、數據類型等需要保持一致。
@PostMapping("/facade/addStrategy")
public void addStrategy(@RequestBody StrategyDto strategyDtos){
log.info("活動模塊請求策略模塊,請求參數:{}",strategyDtos);
}
Nacos的配置中心
公共配置
在微服務項目中,多個模塊在MySQL、Redis、RocketMQ等有些配置上是相同的,可以將相同的配置抽取出來,通過nacos的擴展進行引入,實現配置共享。
在nacos對應的空間中創建公共yaml。
我將mysql、druid、mybatis-plus等配置抽取了。
啓動項目,看到一下內容則表示配置完成:
2023-08-06 16:50:37.162 INFO 17508 --- [ main] c.a.c.n.refresh.NacosContextRefresher : [Nacos Config] Listening config: dataId=lottery-common-dev.yaml, group=DEFAULT_GROUP
單獨配置
在開發過程中不免有需要自定義的參數獲取,在nacos可以通過編寫配置文件來獲取nacos中自定義參數。
我們新建一個yaml文件:lottery-strategy-dev.yaml文件,裏面添加MaxTimes=1
參數.
在對應的模塊當中新建StrategyConfig
/**
* @author xbhog
* @describe:
* @date 2023/8/5
*/
@Getter
@Configuration
@RefreshScope //自動刷新
public class StrategyConfig {
@Value("${MaxTimes}")
private String maxTimes;
}
設置測試請求:
@Autowired
private StrategyConfig strategyConfig;
//--------------------------------------
@GetMapping("/test")
public ResponseResult<String> test(){
log.info("============獲取的值:{}",strategyConfig.getMaxTimes());
return ResponseResult.success(null);
}
測試數據:
2023-08-06 17:01:25.328 [http-nio-8001-exec-3] INFO o.a.c.c.C.[Tomcat].[localhost].[/]: Initializing Spring DispatcherServlet 'dispatcherServlet'
2023-08-06 17:01:25.328 [http-nio-8001-exec-3] INFO o.s.web.servlet.DispatcherServlet: Initializing Servlet 'dispatcherServlet'
2023-08-06 17:01:25.330 [http-nio-8001-exec-3] INFO o.s.web.servlet.DispatcherServlet: Completed initialization in 1 ms
2023-08-06 17:01:25.384 [http-nio-8001-exec-3] INFO c.x.controller.StrategyController: ============獲取的值:1
當修改完參數值,發佈後,Springboot
開始監聽到並更新。在請求,數據就變成了2.
配置文件:bootstrap.yaml
spring:
#在nacos中對應的dataID名
application:
#應用名稱
name: lottery-activity
profiles:
# 環境配置
active: @profiles.active@
--- # nacos 配置
spring:
cloud:
config:
override-none: true
allow-override: true
override-system-properties: false
nacos:
# 註冊地址
server-addr: @nacos.server@
discovery:
# 註冊組
group: @nacos.discovery.group@
namespace: ${spring.profiles.active}
config:
# 配置組
group: @nacos.config.group@
namespace: ${spring.profiles.active}
file-extension: yaml
#引入公共配置文件,開啓自動刷新
shared-configs:
- data-id: lottery-common-dev.yaml
refresh: true
refresh-enabled: true
Nacos的持久化
基於MySQL的持久化,主要修改nacos\conf\application.properties,該版本是MySQL5.6.
數據庫名字、賬號、密碼需要自己設置。
重啓nacos,查看數據庫中的nacos配置。