Spring Cloud Nacos

1.Spring Cloud Alibaba的功能:

1.流控制和服务降级:支持WebServlet,WebFlux,OpenFeign,RestTemplate,Dubbo访问限制和降级流的功能。它可以在运行时通过控制台实时修改限制和降级流的规则,并且还支持监视限制和降级度量标准。
2.服务注册和发现:可以注册服务,客户可以使用Spring托管的bean,自动集成功能区发现实例。
3.分布式配置:支持分布式系统中的外部配置,配置更改时自动刷新。
4.Rpc服务:扩展Spring Cloud客户端RestTemplate和OpenFeign以支持调用Dubbo RPC服务。
5.事件驱动:支持构建与共享消息系统连接的高度可扩展的事件驱动微服务。
6.分布式事务:支持高性能且易于使用的分布式事务解决方案。
7.阿里云对象存储:大规模,安全,低成本,高度可靠的云存储服务。支持随时随地在任何应用程序中存储和访问任何类型的数据。
8.阿里云SchedulerX:准确,高度可靠,高可用性的计划作业调度服务,响应时间在几秒钟之内。
9.阿里云短信:阿里云短信服务覆盖全球,提供便捷,高效,智能的通信功能,帮助企业快速联系客户。

2.依赖管理

添加依赖到pom.xml 部分。这将允许您忽略任何Maven依赖项的版本,而是将版本委派给BOM。

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>2.1.0.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

3.服务注册/ 发现

3.1 服务发现

引入依赖

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
3.3使用Nacos Discovery进行服务注册/发现和呼叫的示例

Nacos Discovery与Netflix Ribbon,RestTemplate或OpenFeign集成在一起,可用于服务到服务的呼叫

3.3.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">
    <modelVersion>4.0.0</modelVersion>

    <groupId>open.source.test</groupId>
    <artifactId>nacos-discovery-test</artifactId>
    <version>1.0-SNAPSHOT</version>
    <name>nacos-discovery-test</name>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>${spring.boot.version}</version>
        <relativePath/>
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring.cloud.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>
        </dependencies>
    </dependencyManagement>

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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</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>
    </build>
</project>

application.properties的配置

server.port=8081
spring.application.name=nacos-provider
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
management.endpoints.web.exposure.include=*

如果您不想使用Nacos进行服务注册和发现,则可以设置spring.cloud.nacos.discovery为false
启动provider程序

@SpringBootApplication
@EnableDiscoveryClient
public class NacosProviderDemoApplication {

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

    @RestController
    public class EchoController {
        @GetMapping(value = "/echo/{string}")
        public String echo(@PathVariable String string) {
            return "Hello Nacos Discovery " + string;
        }
    }
}

现在,您可以在Nacos控制台上查看已注册的服务
在这里插入图片描述

3.3.2启动消费者应用程序
@SpringBootApplication
@EnableDiscoveryClient
public class NacosConsumerApp {

    @RestController
    public class NacosController{

        @Autowired
        private LoadBalancerClient loadBalancerClient;
        @Autowired
        private RestTemplate restTemplate;

        @Value("${spring.application.name}")
        private String appName;

        @GetMapping("/echo/app-name")
        public String echoAppName(){
            //Access through the combination of LoadBalanceClient and RestTemplate
            ServiceInstance serviceInstance = loadBalancerClient.choose("nacos-provider");
            String path = String.format("http://%s:%s/echo/%s",serviceInstance.getHost(),serviceInstance.getPort(),appName);
            System.out.println("request path:" +path);
            return restTemplate.getForObject(path,String.class);
        }

    }

    //Instantiate RestTemplate Instance
    @Bean
    public RestTemplate restTemplate(){

        return new RestTemplate();
    }

    public static void main(String[] args) {

        SpringApplication.run(NacosConsumerApp.class,args);
    }
}

接下来,访问http://localhost:8081/echo/app-name使用者提供的界面。在这里,我们启动了8082端口。访问结果如下:
Address:http://127.0.0.1:8082/echo/app-name
Access result: Hello Nacos Discovery nacos-consumer

配置Key默认值描述
服务器地址spring.cloud.nacos.discovery.server-addrNacos监听器的IP和端口
服务名称spring.cloud.nacos.discovery.service${spring.application.name}命名当前服务
权重spring.cloud.nacos.discovery.weight1值范围:1到100。值越大,重量越大
网卡名称spring.cloud.nacos.discovery.network-interface如果未指定IP地址,则注册的IP地址是网卡的IP地址。如果也未指定,默认情况下将使用第一个网卡的IP地址。
注册IP地址spring.cloud.nacos.discovery.ip最高优先级
注册端口spring.cloud.nacos.discovery.port-1默认情况下将自动检测。不需要配置。
命名空间spring.cloud.nacos.discovery.namespace一个典型的场景是隔离针对不同环境的服务注册,例如测试和生产环境之间的资源(配置,服务等)隔离
快捷键spring.cloud.nacos.discovery.access-key阿里云帐户访问密钥
密钥spring.cloud.nacos.discovery.secret-key阿里云账户密钥
元数据spring.cloud.nacos.discovery.metadata您可以使用地图格式为服务定义一些元数据
日志文件名spring.cloud.nacos.discovery.log-name
集群名称spring.cloud.nacos.discovery.cluster-nameDEFAULTNacos的集群名称
endpointspring.cloud.nacos.discovery.endpoint特定服务在特定区域中的域名。您可以使用该域名动态检索服务器地址
是否集成ribbonribbon.nacos.enabledtrue在大多数情况下设置为true
启用Nacos监听spring.cloud.nacos.discovery.watch.enabledtrue设置为false以关闭手表

4. Nacos Config

4.1 Nacos Config配置

在这里插入图片描述

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

bootstrap.properties.

spring.application.name=nacos-config
spring.cloud.nacos.config.server-addr=127.0.0.1:8848

取值方式:
在这里插入图片描述

4.2支持自定义命名空间

命名空间用于隔离不同租户的配置。在不同的命名空间中,组和数据ID可以相同。命名空间的典型场景是隔离不同环境的配置,例如,开发/测试环境与生产环境(配置和服务等)之间的隔离。

如果未指定名称空间,则使用Nacos的“公共”名称空间${spring.cloud.nacos.config.namespace}。您还可以通过以下方式指定自定义名称空间:

spring.cloud.nacos.config.namespace = b3404bc0-d7dc-4855-b519-570ed34b62d7
4.3支持自定义组

{spring.cloud.nacos.config.group}未定义配置时,默认情况下使用DEFAULT_GROUP 。如果需要定义自己的组,则可以在以下属性中进行定义:

spring.cloud.nacos.config.group = DEVELOP_GROUP
4.4支持自定义数据ID
spring.application.name=opensource-service-provider
spring.cloud.nacos.config.server-addr=127.0.0.1:8848

#1.数据ID位于DEFAULT_GROUP的默认组中,并且不支持动态刷新配置
spring.cloud.nacos.config.ext-config[0].data-id=ext-config-common01.properties

#2.数据ID不在默认组中,并且不支持动态刷新配置
spring.cloud.nacos.config.ext-config[1].data-id=ext-config-common02.properties
spring.cloud.nacos.config.ext-config[1].group=GLOBALE_GROUP

#3.数据ID不在默认组中,并且支持配置的动态引用。
spring.cloud.nacos.config.ext-config[2].data-id=ext-config-common03.properties
spring.cloud.nacos.config.ext-config[2].group=REFRESH_GROUP
spring.cloud.nacos.config.ext-config[2].refresh=true

我们可以看到:
1.通过配置支持多个数据ID spring.cloud.nacos.config.ext-config[n].data-id。
2.通过配置数据ID组spring.cloud.nacos.config.ext-config[n].group。如果未指定,则使用DEFAULT_GROUP。
3.通过配置动态刷新spring.cloud.nacos.config.ext-config[n].refresh。默认情况下不支持。
当同时配置多个数据ID时,优先级由中的“ n”值定义spring.cloud.nacos.config.ext-config[n].data-id。值越大,优先级越高。

spring.cloud.nacos.config.ext-config[n].data-id必须具有文件扩展名,并且可以是属性或yaml / yml
spring.cloud.nacos.config.file-extension对自定义数据ID文件扩展名没有任何影响。

多个配置,还可以这样

spring.cloud.nacos.config.shared-dataids = bootstrap-common.properties,all-common.properties
 spring.cloud.nacos.config.refreshable-dataids = bootstrap-common.properties

spring.cloud.nacos.config.shared-dataids用于配置多个共享数据时,优先级是根据配置出现的顺序来确定的。较晚出现的优先级比最先出现的优先级高。
spring.cloud.nacos.config.refreshable-dataids指定支持动态刷新的数据ID时,数据ID的相应值还应指定文件扩展名。

4.5 Nacos Config 更多信息配置
配置Key默认值描述
服务器地址spring.cloud.nacos.config.server-addrNacos服务器侦听器的IP和端口
Nacos配置的Dataidspring.cloud.nacos.config.name首先使用前缀,然后使用名称,最后使用spring.application.name
编nacos配置编码spring.cloud.nacos.config.encode
Nacos配置组spring.cloud.nacos.config.groupDEFAULT_GROUP
nacos config dataId的后缀,也是config文件扩展名。spring.cloud.nacos.config.fileExtensionproperties
Nacos配置超时spring.cloud.nacos.config.timeout3000从Nacos获取配置超时
命名空间spring.cloud.nacos.config.namespace命名空间
Nacos Server的上下文路径spring.cloud.nacos.config.contextPathNacos Server的上下文路径
集群名称spring.cloud.nacos.config.clusterName
共享配置的Dataidspring.cloud.nacos.config.sharedDataids共享配置的数据标识,用“,”分隔
共享配置的动态刷新dataidspring.cloud.nacos.config.refreshableDataids共享配置的动态刷新数据标识,用“,”分隔
自定义dataidspring.cloud.nacos.config.extConfig这是一个列表,由ConfigPOJO建立。Config具有3个属性dataId,group和refresh
Nacos持久化

mysql数据库3.6.5以上
Nacos默认自带嵌入式数据库Derby

derby到mysql切换配置步骤
1./nacos/conf目录下找到sql脚本nacos-mysql.sql
2.修改conf目录下application.properties

spring.datasource.platform=mysql

db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/mynacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=123456
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值