1.springcloud版本
springboot和springcloud版本必須要對應,可查看如下鏈接
https://start.spring.io/actuator/info
2.nacos的使用
2.1下載nacos
windows系統:https://github.com/alibaba/nacos/releases/download/1.1.4/nacos-server-1.1.4.zip
Linux系統:https://github.com/alibaba/nacos/releases/download/1.1.4/nacos-server-1.1.4.tar.gz
解壓下載好的文件,找到運行文件,啟動就可以了
2.2安裝依賴
父工程,全局依賴管理
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.1.1.BUILD-SNAPSHOT</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
微服務注冊中心
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
微服務配置中心(就是把Application.yml的配置放在雲端,Nacos雲端改了以后,項目自動刷新)
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
2.3配置參數
微服務注冊中心
# application.yml server: port: 8081 spring: application: name: nacos-provider cloud: nacos: discovery: server-addr: 127.0.0.1:8848 management: endpoints: web: exposure: include:*
微服務配置中心
# bootstrap.yml spring: application: name: nacos-config cloud: nacos: config: server-addr: 127.0.0.1:8848
2.4基礎案例
Nacos自帶Ribbon,提供負載均衡能力
服務提供者
@SpringBootApplication @EnableDiscoveryClient public class NacosProviderDemoApplication { public static void main(String[] args) { SpringApplication.run(NacosProviderDemoApplication.class, args); } @RestController public class EchoController { @GetMapping(value = "/echo/{string}") public String echo(@PathVariable String string) { return "Hello Nacos Discovery " + string; } } }
服務消費者
@SpringBootApplication @EnableDiscoveryClient public class NacosConsumerApp { @RestController public class NacosController{ @Autowired private RestTemplate restTemplate; @GetMapping("/echo/app-name") public String echoAppName(){ return restTemplate.getForObject("服務提供者的服務名稱"); } } // 服務調用 @Bean @LoadBalanced public RestTemplate restTemplate(){ return new RestTemplate(); } public static void main(String[] args) { SpringApplication.run(NacosConsumerApp.class,args); } }
2.5服務分類
- namespace(命名空間): 用於區分不同的部署環境,例如正式,測試…
- groupId(分組): 服務分組
- dataId(服務ID): 具體的服務
指定分組
spring: cloud: nacos: config: namespace: b3404bc0-d7dc-4855-b519-570ed34b62d7 group: DEVELOP_GROUP
2.6持久化配置
- 1.安裝數據庫,版本要求:5.6.5+
- 2.初始化mysql數據庫,數據庫初始化文件:nacos-mysql.sql
- 3.修改conf/application.properties文件,增加支持mysql數據源配置(目前只支持mysql),添加mysql數據源的url、用戶名和密碼。
spring.datasource.platform=mysql db.num=1 db.url.0=jdbc:mysql://11.162.196.16:3306/nacos_devtest?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true db.user=nacos_devtest db.password=youdontknow
2.7集群配置
在nacos的解壓目錄nacos/的conf目錄下,有配置文件cluster.conf,請每行配置成ip:port。(請配置3個或3個以上節點)
# ip:port
200.8.9.16:8848
200.8.9.17:8848
200.8.9.18:8848
3.服務調用
3.1openFeign
openfeign對feign進行進一步的封裝,添加了springmvc的一些功能,可以用作服務調用。
3.2安裝依賴
首先在父工程配置springcloud依賴管理
<!--Spring Cloud-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>2020.0.2</version>
<type>pom</type>
<scope>import</scope>
</dependency>
微服務中服務調用依賴
<!--服務調用-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-loadbalancer</artifactId>
</dependency>
3.3基本使用
1)在調用端啟動類添加注解
@EnableFeignClients
2)在調用端創建interface,使用注解指定調用服務名稱,定義調用方法的路徑
@FeignClient注解用於指定從哪個服務中調用功能,名稱與被調用的服務名保持一致。
@GetMapping注解用於對被調用的微服務進行地址映射。
@PathVariable注解一定要指定參數名稱,否則出錯。
@Component注解防止在其他位置注入VodClient時報錯。
@Component @FeignClient("xueyuan-vidservice") public interface VodClient { //定義調用方法的路徑 @DeleteMapping("/vidservice/vod/{videoId}") public R deleteAliyunVideo(@PathVariable("videoId") String videoId); }
3)通過@Autowired注解,注入VodClient接口,然后調用里面的方法
3.4 openFeign超時控制
openFeign默認調用時間是1秒鍾,如果調用超過1秒時,就會報超時異常,我們可以通過配置yml超時時間來控制超時時長
#設置feign客戶端超時時間(OpenFeign默認支持ribbon) ribbon: #指的是建立連接后從服務器讀取到可用資源所用的時間 ReadTimeout: 5000 #指的是建立連接所用的時間,適用於網絡狀況正常的情況下, 兩端連接所用的時間 ConnectTimeout: 5000
3.5 openFeign日志打印
1) 配置日志打印類
package com.gh.config; import feign.Logger; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** * @Author Eric * @Date 2021/7/31 13:01 * @Version 1.0 */ @Configuration public class FeignConfig { @Bean Logger.Level feignLoggerLevel(){ return Logger.Level.FULL; } }
2) 在yml配置日志打印級別已經掃描接口
logging:
level:
# feign日志以 debug 級別監控
com.gh.service.PaymentFeignService: debug
