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