Spring cloud alibaba ——Nacos(一)

目录

  • Spring cloud
  • Nacos
  • Nacos下载Mac下载
  • Nacos服务提供者
  • Nacos服务消费者
  • Nacos配置中心

Spring cloud

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

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

Nacos

Nacos=注册中心+配置中心

Spring cloud alibaba ——Nacos(一)_第1张图片

Nacos下载Mac下载

稳定版2.0.3,[Nacos下载地址](https://github.com/alibaba/nacos/releases)
下载对应的zip文件
Spring cloud alibaba ——Nacos(一)_第2张图片
解压到常用的文件夹
进入到文件夹bin目录

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

启动Nacos

sh startup.sh -m standalone

-m standalone代表单机模式
启动成功后如下图所示
Spring cloud alibaba ——Nacos(一)_第3张图片

访问:http://localhost:8848/nacos
默认的账号密码是:nacos/nacos
Spring cloud alibaba ——Nacos(一)_第4张图片
Spring cloud alibaba ——Nacos(一)_第5张图片

Nacos服务提供者

创建一个父子项目
File–> new–>Project–>Spring Initializr–>next–>选择合适groupId和项目名,类型选择Maven Project–>Finish
Spring cloud alibaba ——Nacos(一)_第6张图片
Spring cloud alibaba ——Nacos(一)_第7张图片
按照官网的提示进行设置
spring cloud nacos官方使用说明文档

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

spring cloud和spring boot版本对应关系

 <parent>
        <groupId>com.cloudgroupId>
        <artifactId>apolloartifactId>
        <version>0.0.1-SNAPSHOTversion>
        <relativePath/> 
 parent>

<dependencies>
		<dependency>
            <groupId>com.alibaba.cloudgroupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
        dependency>
dependencies>        

父项目需要添加

 <dependencyManagement>
      <dependencies>
          <dependency>
              <groupId>com.alibaba.cloudgroupId>
              <artifactId>spring-cloud-alibaba-dependenciesartifactId>
              
              <version>2.2.5.RELEASEversion>
              <type>pomtype>
              <scope>importscope>
          dependency>
      dependencies>
  dependencyManagement>

  <modules>
      <module>springnacos-9001module>
  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监测到
Spring cloud alibaba ——Nacos(一)_第8张图片

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关系,然后添加以下依赖
添加支持配置的依赖:

 
        <dependency>
            <groupId>com.alibaba.cloudgroupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
        dependency>

        
        <dependency>
            <groupId>com.alibaba.cloudgroupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-configartifactId>
        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,添加配置文件
其中,配置文件的格式规则如下:详见官网
Spring cloud alibaba ——Nacos(一)_第9张图片
这个dataId一定不能写错,一旦写错,Nacos无法读取配置文件,项目会启动报错。

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

你可能感兴趣的:(spring,cloud,java,微服务,spring,cloud)