什么是Spring Cloud Alibaba
这里我们不讲解Spring Cloud 和 Spring Cloud Alibaba 的关系,大家自己查看下官网就明白了!!
Spring Cloud Alibaba 致力于提供分布式应用服务开发的一站式解决方案。项目包含开发分布式应用服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。
这是官网的一句话,主要分析这句话我们可以看出来Spring Cloud Alibaba 是一种分布式的解决方案,不是框架,也不是架构,而是一种方案。方案的作用是用来解决分布式服务所遇到的问题。 比如说如果我们在做微服务之间的调用的时候,Spring Cloud Alibaba 给的解决方案是用Nacos 来做服务注册和管理,用Feign 来做服务之间的自由调用。类似的组件阿里云提供了很多, Spring Cloud Alibaba 官网
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: 覆盖全球的短信服务,友好、高效、智能的互联化通讯能力,帮助企业迅速搭建客户触达通道。
组件分为商业和非商业和 大家可以简单理解为 ,马爸爸 提供了一套基础的分布式解决方案,基础的是免费的,当然基础的组件足以满足中小型公司的对生产环境的需求。
但是,在使用相关组件的开发过程中,版本依赖这个东西有的时候是真的头疼,我记得有无数次在开发过程中出现莫名其妙的问题,最后都是从官网发现,是版本依赖的问题,然后就各种内心无数的****飞过
以下是Spring cloud ,Spring Cloud Alibaba, Spring Boot 之间的版本选择
在版本选择上大家尽量选择稳定版,也就是Release 后的3 到4个版本,这个版本是趋于稳定的版本
版本对比的官方文档 毕业版本依赖关系(推荐使用)
版本选择尽量按照官方给的文档来做 否则会出现不兼容的情况,大家谨慎选择
个人公众号:Java架构师联盟,每日更新技术好文,后台回复书籍更可以获得精美资料
下面我们来看一下搭建一个简单的springcloud都需要做哪些准备吧
其实不难,除了简单的idea配置之外,我们就是多了一个把Nacos作为配置中心
那什么是Nacos
这是官网上的介绍,大家一看,知道是个什么玩意就好
首先肯定是下载安装包
下载地址:nacos.io/zh-cn/docs/quick-start.html
或者从git下载
选择对应版本进行解压(注意 Nacos 解压后 是一个完整的运行包,如果用的不熟练,不要动里面的配置信息)
下载完成后解压后进入到 bin 目录 在终端运行命令
- MAC sh startup.sh -m standalone (standalone代表着单机模式运行,后来会单独讲解集群模式的搭建和启动方法)
- Windows cmd startup.cmd
启动成功后 默认账号密码 nacos/nacos(初始账号密码)
登录后可以看到右上角中英文切换,英语不好的同学们 可以切换到中文
- 配置管理主要是用来做项目配置,比如配置文件等可以用nacos来管理 因为nacos不仅仅是服务中心,也是配置中心(后面有讲) 我们开发项目的配置一般有以下几种做法:1. 硬编码--作为类字段的形式存在,导致:动态修改困难,没有持久化2. 配置文件( properties、yml 文件等)--导致:配置动态变更,可能需要重启应用,让配置生效。当然,你也可以在代码中增加一个定时任务,如每个 10s 读取配置文件内容,让最新的配置能够及时在应用中生效,这样也就免 去了重启应用这个“较重”的运维操作。3. DB 配置表--导致:配置动态变更,可能需要通过暴露管理接口去解决。
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;
}
}
测试访问:
总结
至此一个简单的微服务工程已经搭建完毕。其实操作很简单,大家可以动手试试。
个人公众号:Java架构师联盟,每日更新技术好文,后台回复书籍更可以获得精美资料