ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

SpringCloudAlibaba学习系列Nacos-(1)入门篇

2021-06-16 17:59:07  阅读:226  来源: 互联网

标签:magic Nacos springframework nacos 入门篇 import org SpringCloudAlibaba cloud


目录

一、简介

二、Nacos服务搭建

三、配置中心实战

四、动态服务发现实战

A、magic-provider项目

B、magic-consumer项目

C、验证


一、简介

Nacos是阿里开源的项目,用于实现动态服务发现、服务配置管理(官网:https://nacos.io/zh-cn/docs/what-is-nacos.html)。说到这里,做过微服务的小伙伴应该会有熟悉感(内心OS:这个不就是跟Zookeeper的功能一样吗!!!)。而在SpringCloud生态中,我们也能找到对应的产品,Eureka注册中心用于动态服务发现,SpringCloudConfig配置中心用于服务配置管理。

根据分布式架构的CAP理论来说,Nacos是可以设置成CP或者AP 模式,Zookeeper是CP,Eureka是AP;同时Nacos作为同时集成了Eureka和SpringCloudConfig两大产品的功能,运维只需要维护一套Nacos集群,而且具备着好看易用的管理页面......balabala(自己脑补画面:哎呀哎呀,不用说了,我用还不行吗!)

二、Nacos服务搭建

这里只搭建单机版本,集群版本的搭建大家可以参考https://nacos.io/zh-cn/docs/cluster-mode-quick-start.html

准备环境:Linux 64 bit系统 和 64 bit JDK 1.8+;

1、下载安装包

从官网(https://github.com/alibaba/nacos/releases)中下载版本nacos-server-2.0.1.tar.gz,上传到linux服务器中;

2、解压

tar -xvf nacos-server-2.0.1.tar.gz

3、启动

cd nacos/bin

sh startup.sh -m standalone

4、访问管理页面

浏览器上输入,http://ip:8848/nacos 默认账号是nacos,密码是nacos

三、配置中心实战

项目结构预览:

引用的版本为:

Spring Cloud VersionSpring Cloud Alibaba VersionSpring Boot Version
Spring Cloud Hoxton.SR82.2.3.RELEASE2.3.2.RELEASE

 

 

 

1、创建parent的pom.xml文件如下:

<?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">
    <modelVersion>4.0.0</modelVersion>
    <packaging>pom</packaging>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.2.RELEASE</version>
        <relativePath/>
    </parent>

    <groupId>com.sam.cloud</groupId>
    <artifactId>magic-cloud</artifactId>
    <version>1.0-SNAPSHOT</version>
    <name>magic-cloud</name>

    <modules>
        <module>magic-provider</module>
        <module>magic-consumer</module>
    </modules>

    <properties>
        <project.version>0.0.1-SNAPSHOT</project.version>
        <java.version>1.8</java.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Hoxton.SR8</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.2.3.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

</project>

2、子项目magic-provider的pom.xml文件

<?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>magic-cloud</artifactId>
        <groupId>com.sam.cloud</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>magic-provider</artifactId>
    <name>magic-provider</name>
    <version>${project.version}</version>

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

        <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-config</artifactId>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
        <finalName>magic-provider</finalName>
    </build>
</project>

这里关键是要引入maven包:

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

3、application.properties文件

# 应用启动端口
server.port=8082
# 访问路径
server.servlet.context-path=/magic/provider
# 应用名称,用于nacos的注册
spring.application.name=magic-provider

# nacos配置中心地址
spring.cloud.nacos.config.server-addr=127.0.0.1:8848

spring.cloud.nacos.config.server-addr=127.0.0.1:8848设置nacos的ip和端口号,启动后会自动从nacos上获取配置。

4、创建启动类MagicProviderApplication.java

package com.sam.cloud.provider;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class MagicProviderApplication {

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

}

5、创建配置测试Controller:ConfigController.java

package com.sam.cloud.provider.controller;

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

@RestController
@RequestMapping("/config")
@RefreshScope
public class ConfigController {

    @Value("${my.name:haha}")
    private String myName;

    @RequestMapping("/get")
    public String get(String msg) {
        return "hi, " + msg + ", my name is " + myName;
    }

}

这里通过 Spring Cloud 原生注解 @RefreshScope 实现nacos的magic-provider配置自动更新my.name的值;

6、Nacos管理页面上添加配置

这里的Data ID的值要跟项目magic-provider的配置文件application.properties里面的spring.application.name值一致;

7、验证

启动应用magic-provider,在浏览器中输入访问地址:http://localhost:8082/magic/provider/config/get?msg=Tom

然后在nacos管理页面修改配置值my.name=Jack,刷新请求,发现已经动态更新

四、动态服务发现实战

A、magic-provider项目

在上面第三步创建的项目基础上进行配置:

1、添加maven包

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

2、application中添加内容

# nacos注册发现地址
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

3、启动类MagicProviderApplication.java中加入注解@EnableDiscoveryClient开启服务注册发现功能

package com.sam.cloud.provider;

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

@SpringBootApplication
@EnableDiscoveryClient
public class MagicProviderApplication {

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

}

B、magic-consumer项目

项目结构预览:

1、子项目pom.xml文件如下:

<?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>magic-cloud</artifactId>
        <groupId>com.sam.cloud</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>magic-consumer</artifactId>
    <name>magic-consumer</name>
    <version>${project.version}</version>

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

        <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>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
        <finalName>magic-consumer</finalName>
    </build>
</project>

2、application.properties文件

# 应用启动配置
server.port=8083
server.servlet.context-path=/magic/consumer

spring.application.name=magic-consumer

# nacos注册发现地址
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

3、创建配置类ConsumerConfiguration.java

package com.sam.cloud.consumer.config;

import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

@Configuration
public class ConsumerConfiguration {

    @LoadBalanced
    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

}

这里采用给 RestTemplate 实例添加 @LoadBalanced 注解,开启 @LoadBalanced 与 Ribbon 的集成;

4、创建测试类ConsumerController.java

package com.sam.cloud.consumer.controller;

import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

import javax.annotation.Resource;

@RestController
@RequestMapping("/test")
public class ConsumerController {

    @Resource
    private RestTemplate restTemplate;

    @RequestMapping(value = "/hello/{name}", method = RequestMethod.GET)
    public String testHello(@PathVariable String name) {
        String message = restTemplate.getForObject("http://magic-provider/magic/provider/config/get?msg=" + name, String.class);
        return "consumer : " + message;
    }

}

这里使用已经初始化的RestTemplate请求服务提供方magic-provider;

4、创建启动类MagicProviderApplication.java

package com.sam.cloud.consumer;

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

@SpringBootApplication
@EnableDiscoveryClient
public class MagicConsumerApplication {

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

}

同样的,注解@EnableDiscoveryClient开启服务注册发现功能

C、验证

1、启动magic-provider项目

2、启动magic-consumer项目

3、查看nacos管理页面中的服务列表

4、浏览器中通过访问magic-consumer的接口,获取magic-provider中的接口数据

http://localhost:8083/magic/consumer/test/hello/Marry

 

 

标签:magic,Nacos,springframework,nacos,入门篇,import,org,SpringCloudAlibaba,cloud
来源: https://blog.csdn.net/u012661488/article/details/117958420

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有