springcloud alibaba快速入门

springcloud alibaba

springcloud alibaba项目地址: https://github.com/alibaba/spring-cloud-alibaba

版本依赖关系:https://github.com/alibaba/spring-cloud-alibaba/wiki/版本说明

nacos

1. nacos是注册中心和配置中心。

NacosServer相当于EurekaServer,EurekaServer是自己搭建的项目,NacosServer不需要自己搭建。

下载NacosServer地址:https://github.com/alibaba/nacos/releases/tag/2.0.3。

下载完成后创建一个nacos数据库,导入nacos-server中conf目录下的nacos-mysql.sql。

根据本机的数据库 修改conf目录下的application.properties

#*************** Config Module Related Configurations ***************#
### If use MySQL as datasource:
spring.datasource.platform=mysql

### Count of DB:
db.num=1

### Connect URL of DB:
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=123456

命令运行bin目录startup.cmd startup.cmd -m standalone或者修改startup.cmd 将set MODE="cluster"修改为

set MODE="standalone“ ,这个设置是集群启动改为单机启动

如果mysql版本为8.0出现启动报错,可以创建plugin/mysql目录,把对应的jar包放进去重新启动

启动成功访问 http://localhost:8848/nacos

用户名密码都是nacos

2. 如何注册到nacos注册中心

创建一个springboot项目,注意版本依赖关系,这里使用

Spring Cloud Alibaba VersionSpring Cloud VersionSpring Boot Version
2.2.7.RELEASESpring Cloud Hoxton.SR122.3.12.RELEASE

添加springweb和nacos-discovery依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

配置文件:nacos注册中心和eureka相比,nacos哟是命名空间的概念它可以根据命名空间的不同区分隔离两个服务。在命名空间内还有分组的区分。比如两个项目有服务名撞了就可以做到区分隔离。

spring:
  application:
    name: nacos-client-a
  cloud:
    nacos:  #如果不指定命名空间默认注册到public,没有指定分组默认DEFAULT_GROUP
      server-addr: localhost:8848 #在这个地址注册自己
      username: nacos
      password: nacos

server:
  port: 8080

启动类添加注解:@EnableDiscoveryClient 开启服务发现客户端

@SpringBootApplication
@EnableDiscoveryClient  //开启服务发现客户端
public class NacosClintAApplication {

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

}

启动项目,再次访问nacos查看服务列表可以发现注册成功

在这里插入图片描述

3. nacos服务发现

再创建一个springboot项目注册到注册中心,这里给出一个配置文件,其他设置和上一个一样

server:
  port: 8081
spring:
  application:
    name: nacos-client-b
  cloud:
    nacos:
      username: nacos
      password: nacos
      server-addr: localhost:8848
      discovery:  # 注册相关配置
        namespace: c98c08fc-a4c2-433b-bc4a-bcb68496fd7b
        group: A_GROUP

通过A去访问B,在A中创建controller类

@RestController
public class TestController {
    @Autowired
    private DiscoveryClient discoveryClient;

    @GetMapping("test")
    public String test(){
        List<ServiceInstance> instances = discoveryClient.getInstances("nacos-client-b");
        System.out.println(instances);
        return "ok";
    }
}

注意:跨命名空间或者跨组都请求不到,只有同组同命名空间才能访问

所以修改配置文件保持一致再访问localhost:8080/test,才能得到ok的结果

4. nacos集成openFeign

如果要在A中请求B提供的接口,B的controller代码:

@RestController
public class testController {

    @GetMapping("info")
    public String info(){
        return "b提供的接口";
    }
}

然后A添加openFeign依赖,因为他是springcloud提供的,所以还要确定springcloud依赖遵循对应关系,这里使用Hoxton.SR12版本,pom文件:

<properties>
    <java.version>1.8</java.version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <spring-boot.version>2.3.12.RELEASE</spring-boot.version>
    <spring-cloud-alibaba.version>2.2.7.RELEASE</spring-cloud-alibaba.version>
    <spring-cloud.version>Hoxton.SR12</spring-cloud.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</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>

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

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>${spring-boot.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>${spring-cloud-alibaba.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>${spring-cloud.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

A启动类添加注解@EnableFeignClients

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class NacosClientAApplication {

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

}

A中feign接口编写:

@FeignClient(value = "nacos-client-b")
public interface testFeign {

    @GetMapping("info")
    public String info();
}

A的controller修改:

@RestController
public class TestController {
    @Autowired
    private DiscoveryClient discoveryClient;

    @Autowired
    private TestFeign testFeign;

    @GetMapping("test")
    public String test(){
        List<ServiceInstance> instances = discoveryClient.getInstances("nacos-client-b");
        System.out.println(instances);
        return testFeign.info();
    }
}

AB都重新启动后可以发现调用成功

5. nacos集成gateway

创建一个项目 添加gateway和nacos-discovery依赖

配置文件:

server:
  port: 80
spring:
  application:
    name: gateway
  cloud:
    nacos:
      server-addr: localhost:8848
      username: nacos
      password: nacos
      discovery:
        namespace: c98c08fc-a4c2-433b-bc4a-bcb68496fd7b
        group: A_GROUP
    gateway:
      discovery:
        locator:
          enabled: true #开启路由
          lower-case-service-id: true

启动类添加注解:

@SpringBootApplication
@EnableDiscoveryClient
public class GatewayApplication {

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

}

全部启动成功后,访问http://localhost/nacos-client-a/test,依然能够得到B提供接口的返回结果即成功

6. 以集群模式启动nacos-server

复制多个nacos,修改conf目录下配置文件application.properties,每个配置端口不同。

再根据application.properties.example创建一个cluster.conf文件,里面编写ip和端口号即可。

这里给出一个例子,如果两个配置文件端口分别为8848和8850,cluster.conf文件内容如下:

192.168.137.1:8848

192.168.137.1:8850

7. nacos配置中心

启动一个nacos-server,再配置管理中点击+号新增一个配置,这里以yaml为例

注意:nacos配置中心和注册中心一样有空间和组的概念用于区分配置文件

在这里插入图片描述

如何配置中心里的值?

新建一个springboot项目来,添加nacos configuration和spring web依赖,再resources目录下创建bootstrap.yml

server:
  port: 8081

spring:
  application:
    name: nacos-config-a
  cloud:
    nacos:
      config:
        server-addr: localhost:8848
        username: nacos
        password: nacos
        prefix: nacos-config # 配置文件Data ID
        file-extension: yml #文件类型

创建controller

@RestController
public class TestController {
    @Value("${lgd.carry}")
    private String name;

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

启动项目成功即配置正确,访问localhost:8081/info可以返回ame。

**nacos配置中心的配置文件持久化在哪?**观察nacos数据库表config_info可以发现数据存在该表中

如果此时通过nacos编辑配置文件,再次访问localhost:8081/info发现结果不变,在类上加注解@RefreshScope 可以解决该问题

**如何回滚配置文件?**通过配置管理-历史版本回滚即可,历史记录存在表his_config_info中

如何读取多个配置文件

spring:
  application:
    name: nacos-config-a
  cloud:
    nacos:
      config:
        server-addr: localhost:8848
        username: nacos
        password: nacos
        file-extension: yml
        namespace:
        extension-configs:
          - dataId:
            group:
            refresh:
          - dataId:
            group:
            refresh:

如何读取共享配置文件?

spring:
  application:
    name: nacos-config-a
  cloud:
    nacos:
      config:
        server-addr: localhost:8848
        username: nacos
        password: nacos
        file-extension: yml
        namespace:
        shared-configs: #共享配置文件
          # - application-dev.yml #写共享文件名,这种写法只能是默认组DEFAULT_GROUP
          - dataId:	#这种写法也可以
            group:
            refresh:
          - dataId:
            group:
            refresh:

os-config-a
cloud:
nacos:
config:
server-addr: localhost:8848
username: nacos
password: nacos
file-extension: yml
namespace:
shared-configs: #共享配置文件
# - application-dev.yml #写共享文件名,这种写法只能是默认组DEFAULT_GROUP
- dataId: #这种写法也可以
group:
refresh:
- dataId:
group:
refresh:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值