javascript
SpringCloud微服务:阿里开源组件Nacos,服务和配置管理
源碼地址:GitHub·點這里||GitEE·點這里
一、阿里微服務簡介
1、基礎描述
Alibaba-Cloud致力于提供微服務開發的一站式解決方案。此項目包含開發分布式應用微服務的必需組件,方便開發者通過SpringCloud編程模型輕松使用這些組件來開發分布式應用服務。只需要添加一些注解和少量配置,就可以將SpringCloud應用接入阿里微服務解決方案,通過阿里中間件來迅速搭建分布式應用系統。
2、核心功能
- 服務限流降級
默認支持 WebServlet、WebFlux, OpenFeign、RestTemplate、SpringCloudGateway,Zuul,Dubbo和RocketMQ限流降級功能的接入,可以在運行時通過控制臺實時修改限流降級規則,還支持查看限流降級 Metrics 監控。
- 服務注冊與發現
適配 Spring Cloud 服務注冊與發現標準,默認集成了 Ribbon 的支持。
- 分布式配置管理
支持分布式系統中的外部化配置,配置更改時自動刷新。
- 消息驅動能力
基于 Spring Cloud Stream 為微服務應用構建消息驅動能力。
- 分布式事務
使用 @GlobalTransactional 注解, 高效并且對業務零侵入地解決分布式事務問題。
- 分布式任務調度
提供秒級、精準、高可靠、高可用的定時(基于Cron表達式)任務調度服務。同時提供分布式的任務執行模型,如網格任務。網格任務支持海量子任務均勻分配到所有 Worker(schedulerx-client)上執行。
3、功能組件
- Nacos
一個更易于構建云原生應用的動態服務發現、配置管理和服務管理平臺。
- Sentinel
把流量作為切入點,從流量控制、熔斷降級、系統負載保護等多個維度保護服務的穩定性。
- RocketMQ
一款開源的分布式消息系統,基于高可用分布式集群技術,提供低延時的、高可靠的消息發布與訂閱服務。
- Dubbo
Apache Dubbo 是一款高性能 Java RPC 框架。
- Seata
阿里巴巴開源產品,一個易于使用的高性能微服務分布式事務解決方案。
- OSS
阿里云對象存儲服務(Object StorageService,簡稱OSS),是阿里云提供的海量、安全、低成本、高可靠的云存儲服務。您可以在任何應用、任何時間、任何地點存儲和訪問任意類型的數據。
- SchedulerX
阿里中間件團隊開發的一款分布式任務調度產品,提供秒級、精準、高可靠、高可用的定時(基于 Cron 表達式)任務調度服務。
4、環境和依賴
- Nacos服務
Nacos 致力于發現、配置和管理微服務。幫助開發者快速實現動態服務發現、服務配置、服務元數據及流量管理。敏捷構建、交付和管理微服務平臺。首先下載 Nacos 并啟動 Nacos server。
參考文章:Nacos組件,環境搭建和入門案例詳解
- 版本關系
版本 2.1.x.RELEASE 對應的是 SpringBoot2.1.x版本。版本2.0.x.RELEASE對應的是SpringBoot2.0.x版本。PS通常學習新的東西,最容易讓人犯迷糊的地方就是版本對應關系,問題不好排查,一般都可以參考官網的給的樣例。
二、服務中心管理
1、案例結構
- 服務端:node08-nacos-server
- 客戶端:node08-nacos-clien
2、配置文件
配置內容如下:
my:name: cloudinfo: alibaba spring:datasource:type: com.alibaba.druid.pool.DruidDataSourcedruid:driverClassName: com.mysql.jdbc.Driverurl: jdbc:mysql://localhost:3306/data_oneusername: rootpassword: 123核心內容:DataID、文件格式、文件內容的配置。這里還配置了一個MySQL數據源。
3、服務注冊發現
(1)、服務端配置
- 核心依賴
- 配置文件
這里的name配置和上面DataID一致,就可以讀取上述配置內容。
- 提供服務接口
- 啟動類注解
(2)、客戶端配置
- 核心依賴
這里也可以基于Feign模式,訪問上述服務端提供的接口服務 。
- 基于Rest接口訪問
提供接口配置
@Configuration public class RestConfig {@LoadBalanced@Beanpublic RestTemplate restTemplate() {return new RestTemplate();} }這里用法和SpringCloud原生框架生態相同 。
請求方法
@RestController public class ClientWeb {@Resourceprivate RestTemplate restTemplate ;@RequestMapping(value = "/web/getMsgV1/{name}",method = RequestMethod.GET)public String getMsgV1 (@PathVariable String name){String reqUrl = "http://node08-nacos-server:8001/web/getMsg/"+name ;return restTemplate.getForObject(reqUrl,String.class) ;} }- 基于Feign接口訪問
Feign接口配置
@FeignClient("node08-nacos-server") public interface MsgFeign {@GetMapping("/web/getMsg")String getMsg (@RequestParam(name = "name") String name); }這里用法依舊和SpringCloud原生框架生態相同 。
請求方法
@RestController public class ClientWeb {@Resourceprivate MsgFeign msgFeign ;@RequestMapping(value = "/web/getMsgV2/{name}",method = RequestMethod.GET)public String getMsgV2 (@PathVariable String name){return msgFeign.getMsg(name) ;} }- 啟動類配置
三、配置中心管理
通過Nacos的配置管理可以將整合架構體系內配置,集中統一在Nacos中存儲管理。分離的多環境配置,靈活的權限管理。
1、核心依賴
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId><version>2.1.1.RELEASE</version> </dependency>2、服務端配置
spring:application:name: node08-nacos-servercloud:nacos:discovery:server-addr: 127.0.0.1:8848config:server-addr: 127.0.0.1:8848file-extension: yaml這里的核心配置是config配置。
3、配置讀取方式
這里就是Spring框架原生的讀取方式。
@RestController @RefreshScope public class ValueWeb {@Value("${my.name:}")private String myName ;@Value("${my.info:}")private String myInfo ;@RequestMapping("/getNameInfo")public String getNameInfo (){return myName+":"+myInfo ;} }4、數據庫連接
配置JDBC連接
這里基于Druid連接池,配置JdbcTemplate數據庫訪問API。
@Configuration public class DruidConfig {@Value("${spring.datasource.druid.url}")private String dbUrl;@Value("${spring.datasource.druid.username}")private String username;@Value("${spring.datasource.druid.password}")private String password;@Value("${spring.datasource.druid.driverClassName}")private String driverClassName;/*** Druid 連接池配置*/@Beanpublic DruidDataSource dataSource() {DruidDataSource datasource = new DruidDataSource();datasource.setUrl(dbUrl);datasource.setUsername(username);datasource.setPassword(password);datasource.setDriverClassName(driverClassName);return datasource;}/*** JDBC操作配置*/@Bean(name = "jdbcTemplate")public JdbcTemplate jdbcTemplate (@Autowired DruidDataSource dataSource){return new JdbcTemplate(dataSource) ;} }測試方法
@RestController public class JdbcWeb {@Resourceprivate JdbcTemplate jdbcTemplate ;@RequestMapping("/getJdbc")public List<String> getJdbc (){String sql = "select phone from d_phone" ;List<String> phoneEntityList = jdbcTemplate.queryForList(sql,String.class) ;return phoneEntityList ;} }四、案例總結
上面兩個使用案例走下來,感覺和原生SpringCloud的用法區別不大,整體上手難度也不太高,畢竟AlibabaCloud框架是在SpringCloud框架基礎上。適配了阿里很多開源組件,在微服務框架組件選擇上,根據業務需求和團隊的熟悉程序選擇即可。
五、源代碼地址
GitHub地址:知了一笑 https://github.com/cicadasmile/spring-cloud-base GitEE地址:知了一笑 https://gitee.com/cicadasmile/spring-cloud-base推薦閱讀:微服務架構
《1、項目技術選型簡介,架構圖解說明》
《2、業務架構設計,系統分層管理》
《3、數據庫選型簡介,業務數據規劃設計》
《4、中間件集成,公共服務封裝》
《5、SpringCloud 基礎組件應用設計》
《6、通過業務、應用、技術、存儲方面,聊聊架構》
新人創作打卡挑戰賽發博客就能抽獎!定制產品紅包拿不停!總結
以上是生活随笔為你收集整理的SpringCloud微服务:阿里开源组件Nacos,服务和配置管理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Define change docume
- 下一篇: 忽然看懂了《大话西游》