一,什么是Spring Cloud Alibaba
Spring Cloud Alibaba 是一种分布式的解决方案,不是框架,也不是架构,而是一种方案。方案的作用是用来解决分布式服务所遇到的问题。
比如说如果我们在做微服务之间的调用的时候,Spring Cloud Alibaba 给的解决方案是用Nacos 来做服务注册和管理,用Feign 来做服务之间的自由调用。
二、Spring Cloud Alibaba 主要组件
Sentinel:把流量作为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。
Nacos:一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
RocketMQ:一款开源的分布式消息系统,基于高可用分布式集群技术,提供低延时的、高可靠的消息发布与订阅服务。
Dubbo:Apache Dubbo™ 是一款高性能 Java RPC 框架。
Seata:阿里巴巴开源产品,一个易于使用的高性能微服务分布式事务解决方案。
Alibaba Cloud OSS: 阿里云对象存储服务(Object Storage Service,简称 OSS),是阿里云提供的海量、安全、低成本、高可靠的云存储服务。您可以在任何应用、任何时间、任何地点存储和访问任意类型的数据。
Alibaba Cloud SchedulerX: 阿里中间件团队开发的一款分布式任务调度产品,提供秒级、精准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务。
Alibaba Cloud SMS: 覆盖全球的短信服务,友好、高效、智能的互联化通讯能力,帮助企业迅速搭建客户触达通道
三、搭建准备工作。
1,idea,这个自行下载安装,网上有很多教程。
2,jdk,自行安装下载。
3,maven,自行安装下载。
2,把Nacos作为配置中心
下载地址:nacos.io/zh-cn/docs/quick-start.html
选择对应版本进行解压(注意 Nacos 解压后 是一个完整的运行包,如果用的不熟练,不要动里面的配置信息)
启动安装目录bin目录下startup.cmd
如启动失败,提示"unable to start embedded tomcat"
修改startup.cmd文件set MODE="standalone",重新启动成功。
如正常启动成功,则下一步(访问启动提示网址)
启动成功后 默认账号密码 nacos/nacos(初始账号密码)
Nacos 真正作用是将配置从应用中剥离出来,统一管理,优雅地解决了配置的动态变更、持久化、运维成本等问题。应用自身既不需要去添加管理配置接口,也不需要自己去实现配置的持久化,更不需要引入“定时任务”以便降低运维成本。Nacos 提供的配置管理功能,将配置相关的所有逻辑都收拢,并且提供简单易用的 SDK,让应用的配置可以非常方便被 Nacos 管理起来不仅如此,Nacos提供 DNS-F功能, 可以与K8S、Spring Cloud和Dubbo等多个开源产品进行集成,实现服务的注册功能。
服务发现使用来管理注册到nacos 上的微服务,可以实现服务下线等功能。
命名空间是用来做服务环境区分,当项目需要开发,测试, 生产等多个不同的配置, 命名空间就可以做配置隔离。
-----到这里,基本的准备工作就做好了,下面我们来看一下如何搭建一个简单的微服务
三、工程搭建
1.首先我们先用SpringBoot创建2个工程,我这里就叫:provider,consumer.
到这里我已经设置好一个provider服务,后我我会再搭建一个消费者服务,操作步骤和上面一样
到这里我已经搭建好2个服务工程,点击apply,点击ok,工程搭建完毕
四、服务配置
provider服务配置
1.provider代码如下和配置文件(新建的工程默认是application.properties,但是再工作中用的比较多的是yml格式,所以这里我把properties改成了yml格式)如下图
2.ProviderController代码如下:
@RestController
public class ProviderController {
@Value("${providerName}")
private String name;
@GetMapping("send")
public String send(){
return name;
}
}
3.application.yml配置如下:
server:
port: 8080
#自定义参数
providerName: provider
4.provider注册到nacos
生产者注册到nacos注册中心,步骤:
添加依赖:spring-cloud-starter-alibaba-nacos-discovery及springCloud
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--整合Nacos -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>0.9.0.RELEASE</version>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Greenwich.SR2</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
在 application.yml 中配置nacos服务地址和应用名
server:
port: 8080
spring:
application:
## 应用名
name: provider
## nacos服务地址
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
#自定义参数
providerName: provider
启动服务,然后登陆Nacos服务查看,结果如下
consumer服务配置
1.首先按照我上面的引入maven依赖。
2.由于配置基本和上面一样我这里就把我代码部分例举出来
代码:
@RestController
public class ConsumerController {
@GetMapping("consumer")
public String send(){
return "Consumer";
}
}
yml配置
server:
port: 8081
spring:
application:
## 应用名
name: consumer
## nacos服务地址
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
启动服务
下面开始整合Feign实现远程调用
1.先引入feign相关依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
2.在ConsumerApplication类上添加@EnableFeignClients注解:
3.编写feignClient:
@FeignClient("provider")
public interface ProviderFeign {
@RequestMapping("send")
String send();
}
在Controller中使用feignClient:
@RestController
public class ConsumerController {
@Autowired
private ProviderFeign providerFeign;
@GetMapping("consumer")
public String send(){
String send = providerFeign.send();
return "Consumer" + send;
}
}
测试访问:
至此一个简单的微服务工程已经搭建完毕,其实整个流程很简单,可以按照步骤操作一遍。
后面都给大家讲解集群管理。