spring cloud alibaba nacos

首先去下载nacos服务端

GitHub - alibaba/nacos: an easy-to-use dynamic service discovery, configuration and service management platform for building cloud native applications.

Releases · alibaba/nacos

下载解压后

进入目录下的bin目录

执行单机模式

sh startup.sh -m standalone

然后就可以访问

http://192.168.200.130:8848/nacos

我用的是nacos-server-1.4.8.zip

nacos账号密码默认是nacos

maven 父工程

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.4.RELEASE</version>
        <relativePath />
    </parent>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Greenwich.SR1</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.1.2.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

子工程

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>springcloudalibaba</artifactId>
        <groupId>org.example</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>nocas</artifactId>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- Nacos Discovery -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
    </dependencies>
</project>

启动文件

package org.example;

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


@SpringBootApplication
@EnableDiscoveryClient
public class NacosApplication {
    public static void main(String[] args) {
        SpringApplication.run(NacosApplication.class,args);
    }
}

配置文件名要是bootstrap.yml(确保Nacos的配置放在了正确的配置文件中。对于Spring Cloud应用,Nacos的配置应该放在bootstrap.propertiesbootstrap.yml文件中,而不是application.propertiesapplication.yml中。这是因为bootstrap配置文件中的配置会在应用上下文初始化之前加载,确保在应用启动时就能正确连接到Nacos服务器)

server:
  port: 18080
spring:
  application:
    name: nacos-test1
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.200.130:8848 # Nacos服务地址

然后就可以成功把服务注册到nacos注册中心了


nacos是利用ribbon来做负载均衡的

验证:

首先把配置文件中的端口号不写死,用个变量代替

server:
  port: ${PORT}
spring:
  application:
    name: nacos-test1
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.200.130:8848 # Nacos服务地址

加两个实例

 发现服务名为

nacos-test1只有一个,而实例数有两个,所以可以负载均衡

 负载均衡我们可以用ribbon来做,也可以用NacosRule来做,

,另外

从Spring Cloud 2020版本开始,Spring Cloud官方推荐使用Spring Cloud LoadBalancer来替代Ribbon作为负载均衡器。这是因为Ribbon已经停止更新维护,而Spring Cloud LoadBalancer是Spring Cloud官方提供的负载均衡组件,它与Spring Cloud的其他组件更加紧密集成,提供了更好的易用性和稳定性。Spring Cloud LoadBalancer支持响应式编程的方式异步访问客户端,依赖于Spring Web Flux实现客户端负载均衡调用。

在Spring Cloud Hoxton.M2版本中,Spring Cloud LoadBalancer首次被整合进来作为Ribbon的替代品。因此,如果您使用的是Spring Cloud 2020版本或更高版本,应当使用Spring Cloud LoadBalancer来实现负载均衡。在使用时,您只需要在需要负载均衡的RestTemplateWebClient上添加@LoadBalanced注解即可。

我这里使用的老版本,所以使用ribbon来做实验

新创建一个模块,来测试ribbon

maven依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>springcloudalibaba</artifactId>
        <groupId>org.example</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>ribbon</artifactId>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
        </dependency>
        <!-- Nacos Discovery -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
    </dependencies>
</project>

代码

ribbon测试模块代码

@RestController
@RequestMapping("/re")
public class RequestTestController {
    private final RestTemplate restTemplate;

    @Autowired
    public RequestTestController(RestTemplate restTemplate) {
        this.restTemplate = restTemplate;
    }
    @GetMapping("look")
    public Integer look(){
        return restTemplate.getForObject("http://nacos-test1/test", Integer.class);
    }
}

 nacos-test1 代码

@RestController
@RequestMapping("/test")
public class TestController {
    @Value("${server.port}")
    private String serverPort;

    @GetMapping
    public String findById(){
        return serverPort;
    }
}

启动类

package org.example;

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

@SpringBootApplication
@EnableDiscoveryClient
public class RibbonTestApplication {
    public static void main(String[] args) {
        SpringApplication.run(RibbonTestApplication.class,args);
    }
    @Bean
    @LoadBalanced //启动负载均衡
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
}

请求后发现打印的端口会变,代表负载均衡成功

以上就是nacos作为注册中心的简单使用


配置中心

添加依赖

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

配置文件详情

spring:
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848 # Nacos服务器地址
        namespace: your-namespace # Nacos命名空间ID(如果需要)
        group: DEFAULT_GROUP # 配置分组,默认为DEFAULT_GROUP
        data-id: your-application-name.yml # 配置文件的数据ID
        file-extension: yml # 配置文件的后缀,这里是YAML格式

我的配置

server:
  port: ${PORT}
spring:
  application:
    name: nacos-test1
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.200.131:8848 # Nacos服务地址
      config:
        server-addr: 192.168.200.131:8848
        file-extension: yml #nacos远程配置文件的后缀
key: 99999

添加一个配置

 data-id要写

${data-id}.${file-extension}

我这里就是服务名.yml 

 然后发布前是99999

发布后

 

自动刷新需要再bean上加这个注解

@RefreshScope

 

posted @ 2024-12-02 22:33  在线电影制作人  阅读(4)  评论(0)    收藏  举报  来源