Spring Cloud Alibaba从入门到实践一网打尽

Java架构师联盟 2020-11-06 23:24:01
Spring Cloud Nacos yml


什么是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 之间的版本选择

Spring Cloud Alibaba从入门到实践一网打尽

 

在版本选择上大家尽量选择稳定版,也就是Release 后的3 到4个版本,这个版本是趋于稳定的版本

版本对比的官方文档 毕业版本依赖关系(推荐使用)

版本选择尽量按照官方给的文档来做 否则会出现不兼容的情况,大家谨慎选择

个人公众号:Java架构师联盟,每日更新技术好文,后台回复书籍更可以获得精美资料


下面我们来看一下搭建一个简单的springcloud都需要做哪些准备吧

其实不难,除了简单的idea配置之外,我们就是多了一个把Nacos作为配置中心

那什么是Nacos

Spring Cloud Alibaba从入门到实践一网打尽

 

Spring Cloud Alibaba从入门到实践一网打尽

 

这是官网上的介绍,大家一看,知道是个什么玩意就好

首先肯定是下载安装包

下载地址:nacos.io/zh-cn/docs/quick-start.html

或者从git下载

Spring Cloud Alibaba从入门到实践一网打尽

 


选择对应版本进行解压(注意 Nacos 解压后 是一个完整的运行包,如果用的不熟练,不要动里面的配置信息)

Spring Cloud Alibaba从入门到实践一网打尽

 

下载完成后解压后进入到 bin 目录 在终端运行命令

  • MAC
    sh startup.sh -m standalone
    (standalone代表着单机模式运行,后来会单独讲解集群模式的搭建和启动方法)
  • Windows
    cmd startup.cmd

启动成功后 默认账号密码 nacos/nacos(初始账号密码)

Spring Cloud Alibaba从入门到实践一网打尽

 

登录后可以看到右上角中英文切换,英语不好的同学们 可以切换到中文

Spring Cloud Alibaba从入门到实践一网打尽

 

  • 配置管理主要是用来做项目配置,比如配置文件等可以用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.

Spring Cloud Alibaba从入门到实践一网打尽

 

Spring Cloud Alibaba从入门到实践一网打尽

 

Spring Cloud Alibaba从入门到实践一网打尽

 

Spring Cloud Alibaba从入门到实践一网打尽

 

Spring Cloud Alibaba从入门到实践一网打尽

 

Spring Cloud Alibaba从入门到实践一网打尽

 

Spring Cloud Alibaba从入门到实践一网打尽

 

Spring Cloud Alibaba从入门到实践一网打尽

 


到这里我已经设置好一个provider服务,后我我会再搭建一个消费者服务,由于操作步骤和上面一样,我就不再重复了

Spring Cloud Alibaba从入门到实践一网打尽

 

Spring Cloud Alibaba从入门到实践一网打尽

 


到这里我已经搭建好2个服务工程,点击apply,点击ok,工程搭建完毕

Spring Cloud Alibaba从入门到实践一网打尽

 

服务配置

provider服务配置

1.provider代码如下和配置文件(新建的工程默认是application.properties,但是再工作中用的比较多的是yml格式,所以这里我把properties改成了yml格式)如下图

Spring Cloud Alibaba从入门到实践一网打尽

 


2.ProviderController代码如下:

@RestController
public class ProviderController {
@Value("${providerName}")
private String name;
@GetMapping("send")
public String send(){
return name;
}
}
Spring Cloud Alibaba从入门到实践一网打尽

 


3.application.yml配置如下:

server:
port: 8080
#自定义参数
providerName: provider 

4.provider注册到nacos

生产者注册到nacos注册中心,步骤:
添加依赖:spring-cloud-starter-alibaba-nacos-discovery及springCloud

Spring Cloud Alibaba从入门到实践一网打尽

 

<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服务查看,结果如下

Spring Cloud Alibaba从入门到实践一网打尽

 

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

启动服务

Spring Cloud Alibaba从入门到实践一网打尽

 

整合Feign实现远程调用

1.先引入feign相关依赖

 <dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

2.在ConsumerApplication类上添加@EnableFeignClients注解:

Spring Cloud Alibaba从入门到实践一网打尽

 


3.编写feignClient:

Spring Cloud Alibaba从入门到实践一网打尽

 

@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;
}
}

测试访问:

Spring Cloud Alibaba从入门到实践一网打尽

 

总结

至此一个简单的微服务工程已经搭建完毕。其实操作很简单,大家可以动手试试。

个人公众号:Java架构师联盟,每日更新技术好文,后台回复书籍更可以获得精美资料

版权声明
本文为[Java架构师联盟]所创,转载请带上原文链接,感谢
https://my.oschina.net/u/4472036/blog/4706954

  1. 【计算机网络 12(1),尚学堂马士兵Java视频教程
  2. 【程序猿历程,史上最全的Java面试题集锦在这里
  3. 【程序猿历程(1),Javaweb视频教程百度云
  4. Notes on MySQL 45 lectures (1-7)
  5. [computer network 12 (1), Shang Xuetang Ma soldier java video tutorial
  6. The most complete collection of Java interview questions in history is here
  7. [process of program ape (1), JavaWeb video tutorial, baidu cloud
  8. Notes on MySQL 45 lectures (1-7)
  9. 精进 Spring Boot 03:Spring Boot 的配置文件和配置管理,以及用三种方式读取配置文件
  10. Refined spring boot 03: spring boot configuration files and configuration management, and reading configuration files in three ways
  11. 精进 Spring Boot 03:Spring Boot 的配置文件和配置管理,以及用三种方式读取配置文件
  12. Refined spring boot 03: spring boot configuration files and configuration management, and reading configuration files in three ways
  13. 【递归,Java传智播客笔记
  14. [recursion, Java intelligence podcast notes
  15. [adhere to painting for 386 days] the beginning of spring of 24 solar terms
  16. K8S系列第八篇(Service、EndPoints以及高可用kubeadm部署)
  17. K8s Series Part 8 (service, endpoints and high availability kubeadm deployment)
  18. 【重识 HTML (3),350道Java面试真题分享
  19. 【重识 HTML (2),Java并发编程必会的多线程你竟然还不会
  20. 【重识 HTML (1),二本Java小菜鸟4面字节跳动被秒成渣渣
  21. [re recognize HTML (3) and share 350 real Java interview questions
  22. [re recognize HTML (2). Multithreading is a must for Java Concurrent Programming. How dare you not
  23. [re recognize HTML (1), two Java rookies' 4-sided bytes beat and become slag in seconds
  24. 造轮子系列之RPC 1:如何从零开始开发RPC框架
  25. RPC 1: how to develop RPC framework from scratch
  26. 造轮子系列之RPC 1:如何从零开始开发RPC框架
  27. RPC 1: how to develop RPC framework from scratch
  28. 一次性捋清楚吧,对乱糟糟的,Spring事务扩展机制
  29. 一文彻底弄懂如何选择抽象类还是接口,连续四年百度Java岗必问面试题
  30. Redis常用命令
  31. 一双拖鞋引发的血案,狂神说Java系列笔记
  32. 一、mysql基础安装
  33. 一位程序员的独白:尽管我一生坎坷,Java框架面试基础
  34. Clear it all at once. For the messy, spring transaction extension mechanism
  35. A thorough understanding of how to choose abstract classes or interfaces, baidu Java post must ask interview questions for four consecutive years
  36. Redis common commands
  37. A pair of slippers triggered the murder, crazy God said java series notes
  38. 1、 MySQL basic installation
  39. Monologue of a programmer: despite my ups and downs in my life, Java framework is the foundation of interview
  40. 【大厂面试】三面三问Spring循环依赖,请一定要把这篇看完(建议收藏)
  41. 一线互联网企业中,springboot入门项目
  42. 一篇文带你入门SSM框架Spring开发,帮你快速拿Offer
  43. 【面试资料】Java全集、微服务、大数据、数据结构与算法、机器学习知识最全总结,283页pdf
  44. 【leetcode刷题】24.数组中重复的数字——Java版
  45. 【leetcode刷题】23.对称二叉树——Java版
  46. 【leetcode刷题】22.二叉树的中序遍历——Java版
  47. 【leetcode刷题】21.三数之和——Java版
  48. 【leetcode刷题】20.最长回文子串——Java版
  49. 【leetcode刷题】19.回文链表——Java版
  50. 【leetcode刷题】18.反转链表——Java版
  51. 【leetcode刷题】17.相交链表——Java&python版
  52. 【leetcode刷题】16.环形链表——Java版
  53. 【leetcode刷题】15.汉明距离——Java版
  54. 【leetcode刷题】14.找到所有数组中消失的数字——Java版
  55. 【leetcode刷题】13.比特位计数——Java版
  56. oracle控制用户权限命令
  57. 三年Java开发,继阿里,鲁班二期Java架构师
  58. Oracle必须要启动的服务
  59. 万字长文!深入剖析HashMap,Java基础笔试题大全带答案
  60. 一问Kafka就心慌?我却凭着这份,图灵学院vip课程百度云