Spring Cloud Alibaba 学习 -- 1、Nacos 服务注册与发现

迈不过友情╰ 2023-01-09 03:53 209阅读 0赞

学习视频(B站):https://www.bilibili.com/video/BV1Mt4y1i7JW
GitHub 源码地址:https://github.com/tyronczt/spring-cloud-alibaba-learning

学习计划

  1. Nacos 服务注册与发现
  2. Ribbon 负载均衡
  3. Sentinel 流量控制
  4. RockerMQ 消息的生产和消费
  5. Gateway 路由映射和限流
  6. Seata 分布式事务

零、项目初始化搭建

创建父工程,作为项目的大环境,微服务的各个组件作为子项目,继承父项目。

首先确保 JDK、Maven、IDEA 安装正常.

Maven 推荐配置文件 maven的settings.xml文件

父项目根据 Spring Initializr 自动创建项目,并添加 spring-cloud-dependenciesspring-cloud-alibaba-dependencies 的依赖,注意踩坑点:pom 中的那几个依赖先放到springboot自带的 dependencies 中,然后再添加到 DependentDependencyManagement 中,否则会导致依赖下载不下来的问题。

具体pom.xml文件,参看代码: https://github.com/tyronczt/spring-cloud-alibaba-learning/blob/master/pom.xml

一、Nacos 服务注册与发现

官网安装包下载地址:https://github.com/alibaba/nacos/releases/tag/1.2.1

免费下载地址:https://download.csdn.net/download/tian330726/14150203

此处使用 Windows 环境,解压zip文件,进入bin目录,双击 startup.cmd ,会弹出命令框启动nacos程序,如果弹出后立即消失,记得检查下 JAVA_HOME 是否配置!

此时访问地址:http://localhost:8848/nacos

在这里插入图片描述

创建provider项目

继承父项目,并加入nacos-discovery 的依赖

  1. <parent>
  2. <groupId>com.tyron</groupId>
  3. <artifactId>springcloudalibabademo</artifactId>
  4. <version>0.0.1-SNAPSHOT</version>
  5. </parent>
  6. <dependency>
  7. <groupId>com.alibaba.cloud</groupId>
  8. <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
  9. <version>2.2.1.RELEASE</version>
  10. </dependency>

配置application.yml

  1. spring:
  2. cloud:
  3. nacos:
  4. discovery:
  5. server-addr: localhost:8848
  6. application:
  7. name: provider
  8. server:
  9. port: 1111/2222/3333

启动项目时,Edit Configurations,将 Allow parallel run 的选项勾上,最终:
在这里插入图片描述

创建consumer项目

pom.xml文件同 provider 项目类似

新建 ConsumerController,对服务注册情况进行查看

  1. @RestController
  2. public class ConsumerController {
  3. @Autowired
  4. private DiscoveryClient discoveryClient;
  5. @GetMapping("/instances")
  6. private List<ServiceInstance> instances(){
  7. return this.discoveryClient.getInstances("provider");
  8. }
  9. }

启动后浏览器查看
instances

通过 RestTemplate 远程调用 Provider 的服务

provider 提供服务

  1. //SPEL
  2. @Value("${server.port}")
  3. private String port;
  4. @GetMapping("/index")
  5. public String index() {
  6. return port;
  7. }

consumer 配置 RestTemplate

  1. @Configuration
  2. public class ConsumerConfig {
  3. @Bean
  4. public RestTemplate restTemplate(){
  5. return new RestTemplate();
  6. }
  7. }

ConsumerController 随机调用 provider 服务

  1. @Autowired
  2. private RestTemplate restTemplate;
  3. @GetMapping("/index")
  4. public String index() {
  5. List<ServiceInstance> provider = discoveryClient.getInstances("provider");
  6. int index = ThreadLocalRandom.current().nextInt(provider.size());
  7. String url = provider.get(index).getUri() + "/index";
  8. return "consumer随机远程调用provier:" + this.restTemplate.getForObject(url, String.class);
  9. }

发表评论

表情:
评论列表 (有 0 条评论,209人围观)

还没有评论,来说两句吧...

相关阅读