Spring cloud alibaba ——Nacos(一)

Spring cloud

Spring cloud是微服务架构的一个框架,为服务架构强调服务的“彻底拆分”,目的就是提高效率,微服务架构中,每个服务必须独立部署同时互不影响,微服务架构更加轻巧,轻量级。

  1. 微服务强调彻底拆分,每个服务独立运行,独立部署(每个服务处理一种独立的业务,不和别的服务耦合);
  2. 每个服务有单独数据库,保证服务之间互不影响;
  3. 适合超高并发,访问量大的网站;
  4. 缺点在于开发成本高,维护成本高。

Nacos

Nacos=注册中心+配置中心

在这里插入图片描述

Nacos下载Mac下载

稳定版2.0.3,[Nacos下载地址](https://github.com/alibaba/nacos/releases)
下载对应的zip文件
在这里插入图片描述
解压到常用的文件夹
进入到文件夹bin目录

cd /Users/<你的文件夹名>/nacos/bin

启动Nacos

sh startup.sh -m standalone

-m standalone代表单机模式
启动成功后如下图所示
在这里插入图片描述

访问:http://localhost:8848/nacos
默认的账号密码是:nacos/nacos
在这里插入图片描述
在这里插入图片描述

Nacos服务提供者

创建一个父子项目
File–> new–>Project–>Spring Initializr–>next–>选择合适groupId和项目名,类型选择Maven Project–>Finish
在这里插入图片描述
在这里插入图片描述
按照官网的提示进行设置
spring cloud nacos官方使用说明文档

设置pom文件
再创建子项目,在父项目和子项目的pom文件中设置好依赖关系,其中子项目需要添加:
关于springcloud和springboot版本的对应关系,如下:

spring cloud和spring boot版本对应关系

 <parent>
        <groupId>com.cloud</groupId>
        <artifactId>apollo</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <relativePath/> <!-- lookup parent from repository -->
 </parent>

<dependencies>
		<dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
</dependencies>        

父项目需要添加

 <dependencyManagement>
      <dependencies>
          <dependency>
              <groupId>com.alibaba.cloud</groupId>
              <artifactId>spring-cloud-alibaba-dependencies</artifactId>
              <!--2.2.5的cloud搭配2.2.13的springboot-->
              <version>2.2.5.RELEASE</version>
              <type>pom</type>
              <scope>import</scope>
          </dependency>
      </dependencies>
  </dependencyManagement>

  <modules>
      <module>springnacos-9001</module>
  </modules>

设置yml文件
子项目在/main/resources/中添加application.yml,内容如下:

server:
  port:
    9001

spring:
  application:
    name: nacos-provider
  cloud:
     discovery:
     	server-addr: 127.0.0.1:8848

management:
  endpoints:
    web:
      exposure:
        include: '*'

以上添加的内容在官方说明文档都有写哦

启动类添加注解

package com.cloud.springnacos9001;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@SpringBootApplication
@EnableDiscoveryClient
// 这个注解说明该服务在运行时会被nacos自动发现服务
public class Springnacos9001Application {

    public static void main(String[] args) {
        SpringApplication.run(Springnacos9001Application.class, args);
    }

}

运行成功后,会在Nacos中“服务列表”目录中看到你的服务,说明这个应用在启动时就被nacos监测到
在这里插入图片描述

Nacos服务消费者

首先,准备两个spring.application.name为nacos-provider的服务提供者子模块,再准备一个spring.application.name为nacos-consumer的服务消费者,其中服务消费者准备流程如下:

在启动类中装配restTemplate

package com.cloud.springcloudcosumer8083;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

@SpringBootApplication
@EnableDiscoveryClient
public class SpringcloudCosumer8083Application {

    public static void main(String[] args) {
        SpringApplication.run(SpringcloudCosumer8083Application.class, args);
    }

    @Bean
    // @Bean注解表示将restTemplate装配到容器中来
    @LoadBalanced
    // 负载均衡,表示这个restTemplate在调用服务提供者接口时经过负载均衡
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
}

消费者Controller

package com.cloud.springcloudcosumer8083.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
@RequestMapping("consumer")
public class DemoController {

    @Autowired
    private RestTemplate restTemplate;

    @Value("${service-url.nacos-user-service}")
    private String serviceUrl;

    @GetMapping("visit")
    public String visitProvider(){
        /**
         * getForObject(String url,Object.class,Map/Object... params)
         * 1.url表示这个方法即将访问的路径
         * 2.Object.calss表示调用结果的类型,如果结果是一个List,只能用Array作为其返回数据类型
         * 3.可以是一个Map类型,或多个Object,表示参数,使用时需要给url加上{1},{2},{3}表示占位
         */
        String result = restTemplate.getForObject(serviceUrl+"/demo/get",String.class);
        return result;
    }

}

访问消费者接口的时候,会出现负载均衡效果。

注意版本!2021.0.1.0版本的nacos不包含ribbon了,使用了别的负载均衡组件,注意自己去看官网!

Nacos配置中心

新建一个子项目,使用Nacos配置中心,建立好主子模块的pom关系,然后添加以下依赖
添加支持配置的依赖:

 <!--    服务启动后可以被nacos发现、管理    -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

        <!--    服务可以由nacos进行配置    -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
  • 通过 Nacos Server 和 spring-cloud-starter-alibaba-nacos-config
    实现配置的动态变更。
  • 通过 Nacos Server 和spring-cloud-starter-alibaba-nacos-discovery 实现服务的注册与发现。

添加配置文件bootstrap.yml

# 端口配置
server:
  port: 3377

# 服务名称
spring:
  application:
    name: nacos-config-client
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 # Nacos服务中心注册地址
      config:
        server-addr: localhost:8848 # Nacos作为配置中心的地址
        file-extension: yaml # 制定yaml格式的配置文件

添加环境配置文件application.yml:

spring:
  profiles:
    active: dev # 表示开发环境

启动类添加注解@EnableDiscoveryClient

业务类代码:

package com.cloud.cloudalibabaconfig3377.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
/**
 * 实现配置自动更新,不需要重新启动项目
 */
@RefreshScope
@RequestMapping("config")
public class ConfigClientController {

    /** 
     * 此处并没有在application.yml等任何配置中设置这个值,而是通过Nacos配置中心去设置它
     */
    @Value("${config.info}")
    private String configInfo;

    @GetMapping("info")
    public String getConfig(){
        return configInfo;
    }
}

启动Nacos,浏览器打开localhost:8848/nacos,添加配置文件
其中,配置文件的格式规则如下:详见官网
在这里插入图片描述
这个dataId一定不能写错,一旦写错,Nacos无法读取配置文件,项目会启动报错。

在这里插入图片描述
注意
点击发布后,配置文件生效,注意yaml格式不能写错,不能使用中文冒号。
在这里插入图片描述
可以编辑此配置文件,此时即使不重启项目,设置了读取配置的服务也会自动根据配置的更新而更新。
测试,多次修改config.info的内容,会发现访问接口localhost:3377/config/info的结果发生变化。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Spring Cloud AlibabaSpring Cloud的一个子项目,它是阿里巴巴微服务生态的重要组成部分,提供了一系列基于Spring Boot和Spring Cloud的微服务组件,如服务注册与发现、配置管理、负载均衡、服务调用、熔断器等。而Nacos作为一个新兴的服务发现和配置中心,可以方便地进行服务治理。 Spring Cloud Alibaba整合Nacos的过程相对简单,只需要引入相关依赖,并在代码中使用对应的注解进行配置即可。 首先,在pom.xml文件中添加以下依赖: ```xml <!-- Nacos Discovery --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <!-- Nacos Config --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency> ``` 然后,在启动类上使用@EnableDiscoveryClient注解启用Nacos服务注册与发现功能: ```java @SpringBootApplication @EnableDiscoveryClient public class DemoApplication{ public static void main(String[] args){ SpringApplication.run(DemoApplication.class,args); } } ``` 接下来就可以使用@NacosValue注解注入配置信息: ```java @RestController public class DemoController{ @NacosValue(value="${config.key}",autoRefreshed=true) private String configValue; @GetMapping("/config") public String getConfig(){ return configValue; } } ``` 这样就可以通过Nacos Config来动态修改配置信息了。另外,Spring Cloud Alibaba还提供了一些其他有用的组件,如Sentinel、Seata等,可以方便地进行服务治理和分布式事务管理。 总的来说,Spring Cloud Alibaba整合Nacos是一个极为方便且实用的方式,它可以大大简化微服务应用的开发和部署,提高了系统的可靠性和可维护性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值