栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

springcloud璇﹁В(springcloud2020.0.0)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

springcloud璇﹁В(springcloud2020.0.0)

Spring Cloud Alibaba官网:

Git:
https://github.com/alibaba/spring-cloud-alibaba/blob/2.2.x/README-zh.md

Spring Cloud:
https://spring.io/projects/spring-cloud-alibaba/

1、Nacos介绍(NamingConfigurationService)

1.1 基本概念

更易于构建云原生应用的动态服务发现,配置管理和服务管理平台;Nacos =Eureka(注册)+Config(配置)+Bus(总线);官网:https://nacos.io/zh-cn/index.html

安装请查看:https://blog.csdn.net/weixin_45176509/article/details/123583281

1.2 使用

父工程pom.xml添加依赖;


    
        
            com.alibaba.cloud
            spring-cloud-alibaba-dependencies
            2.2.7.RELEASE
            pom
            import
        
    

2、服务注册

2.1 注册服务提供者(支付模块)

pom.xml

       
            org.springframework.cloud
            spring-cloud-starter-alibaba-nacos-discovery
            0.9.0.RELEASE
        


    
        cloud2022
        org.example
        1.0-SNAPSHOT
    
    4.0.0

    org.payment9001
    cloud-alibaba-payment9001

    
        
            org.springframework.cloud
            spring-cloud-starter-alibaba-nacos-discovery
            0.9.0.RELEASE
        
        
            com.commons
            commons
            1.0-SNAPSHOT
            compile
        

        
            org.springframework.boot
            spring-boot-starter-web
        
        
            org.springframework.boot
            spring-boot-starter-actuator
        
        
            com.baomidou
            mybatis-plus-boot-starter
        
        
            com.alibaba
            druid-spring-boot-starter
            1.1.10
        
        
        
            mysql
            mysql-connector-java
        
        
        
            org.springframework.boot
            spring-boot-starter-jdbc
        
        
            org.springframework.boot
            spring-boot-devtools
            runtime
            true
        
        
            org.projectlombok
            lombok
            true
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        

        
            org.springframework.boot
            spring-boot-devtools
            runtime
            true
        
        
            org.springframework.boot
            spring-boot-autoconfigure
        

    




application.yml

server:
  port: 9001

spring:
  application:
    name: payment-nacos
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848

management:
  endpoints:
    web:
      exposure.include: '*'

server:
  port: 9001

spring:
  application:
    name: payment-nacos
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
  datasource:
    url: jdbc:mysql://localhost:3306/springboot-mybatisplus?serverTimezone=Asia/Shanghai&useSSL=false&useUnicode=true&characterEncoding=utf8&characterSetResults=utf8
    username: root
    password: 123456
    driver-class-name=com: mysql.cj.jdbc.Driver

management:
  endpoints:
    web:
      exposure.include: '*'


#2、mybatis-plus配置
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  global-config :
    db-config:
      logic-delete-value: 1
      logic-not-delete-value: 0
  mapper-locations: classpath:mapper/*.xml


主启动

package com.payment;

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

@SpringBootApplication
@EnableDiscoveryClient
public class NacosProviderDemoApplication {

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

Controller

package com.payment.Controller;

import com.commons.Entity.Result;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("nacos1/")
public class PaymentController {

    @GetMapping("/{id}")
    public Result saveEntity(@PathVariable("id") Integer id) {
        System.out.println(id);
        return new Result(200,"成功9001",id);
    }
}

启动访问

使用以上方法再建一个服务生产者,端口为9002,其余内容相同;

2.2 注册服务消费者(消费模块)

pom.xml:与生产者相同



    
        cloud2022
        org.example
        1.0-SNAPSHOT
    
    4.0.0

    org.consumer8083
    cloud-alibaba-consumer8083

    
        
            org.springframework.cloud
            spring-cloud-starter-alibaba-nacos-discovery
            0.9.0.RELEASE
        
        
            com.commons
            commons
            1.0-SNAPSHOT
            compile
        

        
            org.springframework.boot
            spring-boot-starter-web
        
        
            org.springframework.boot
            spring-boot-starter-actuator
        
        
            com.baomidou
            mybatis-plus-boot-starter
        
        
            com.alibaba
            druid-spring-boot-starter
            1.1.10
        
        
        
            mysql
            mysql-connector-java
        
        
        
            org.springframework.boot
            spring-boot-starter-jdbc
        
        
            org.springframework.boot
            spring-boot-devtools
            runtime
            true
        
        
            org.projectlombok
            lombok
            true
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        

        
            org.springframework.boot
            spring-boot-devtools
            runtime
            true
        
        
            org.springframework.boot
            spring-boot-autoconfigure
        

    


application.yml

server:
  port: 8083

spring:
  application:
    name: consumer-nacos
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848

service-url: #注册成功的服务生产者
  nacos-user-service: http://payment-nacos



server:
  port: 8083

spring:
  application:
    name: consumer-nacos
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
  datasource:
    url: jdbc:mysql://localhost:3306/springboot-mybatisplus?serverTimezone=Asia/Shanghai&useSSL=false&useUnicode=true&characterEncoding=utf8&characterSetResults=utf8
    username: root
    password: 123456
    driver-class-name=com: mysql.cj.jdbc.Driver

service-url: #注册成功的服务生产者
  nacos-user-service: http://payment-nacos


#2、mybatis-plus配置
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  global-config :
    db-config:
      logic-delete-value: 1
      logic-not-delete-value: 0
  mapper-locations: classpath:mapper/*.xml


主启动

package com.consumer;

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

@SpringBootApplication
@EnableDiscoveryClient
public class NacosConsumerDemoApplication {

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


}

RestTemplatef负载均衡配置config
Nacos引入Robbion负载均衡配置,无需单独引入依赖

package com.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 RestTemplateConfig {

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

}

业务Controller,调用服务提供者接口

package com.consumer.Controller;

import com.commons.Entity.Result;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

import javax.annotation.Resource;

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

    @Resource
    private RestTemplate restTemplate;

    @Value("${service-url.nacos-user-service}")
    private String url;

    @GetMapping("/{id}")
    public Result saveEntity(@PathVariable("id") Integer id) {

        return restTemplate.getForObject(url+"/nacos/"+id,Result.class);
    }
}

访问:http://localhost:8083/nacos/1



2.3 各服务中心对比

AP:注册临时实例;CP:注册持久化实例

EurekaAP、支持控制台、低社区活跃
ZookeeperCP、不支持控制台、中社区活跃
ConsulCP、支持控制台、高社区活跃
NacosAP+CP切换、支持控制台、高社区活跃

3、配置中心

3.1 配置中心使用(以消费模块为例)
(1)引入依赖

   
            com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-config
            2.2.7.RELEASE
        


    
        cloud2022
        org.example
        1.0-SNAPSHOT
    
    4.0.0

    org.consumer8083
    cloud-alibaba-consumer8083

    
        
            com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-config
            2.2.7.RELEASE
        
        
            org.springframework.cloud
            spring-cloud-starter-alibaba-nacos-discovery
            0.9.0.RELEASE
        
        
            com.commons
            commons
            1.0-SNAPSHOT
            compile
        

        
            org.springframework.boot
            spring-boot-starter-web
        
        
            org.springframework.boot
            spring-boot-starter-actuator
        
        
            com.baomidou
            mybatis-plus-boot-starter
        
        
            com.alibaba
            druid-spring-boot-starter
            1.1.10
        
        
        
            mysql
            mysql-connector-java
        
        
        
            org.springframework.boot
            spring-boot-starter-jdbc
        
        
            org.springframework.boot
            spring-boot-devtools
            runtime
            true
        
        
            org.projectlombok
            lombok
            true
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        

        
            org.springframework.boot
            spring-boot-devtools
            runtime
            true
        
        
            org.springframework.boot
            spring-boot-autoconfigure
        

    




(2)更改配置

application.yml

spring:
  profiles:
    active: dev

bootstrap.yml:将配置注册进注册中心

server:
  port: 8083

spring:
  application:
    name: consumer-nacos
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
      config:
        server-addr: localhost:8848 #将配置注册进注册中心
        file-extension: yaml

(3)Nacos配置列表添加配置

在 Nacos Config Starter 中,dataId 的拼接格式如下

${prefix} - ${spring.profiles.active} . ${file-extension}

prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。

spring.profiles.active 即为当前环境对应的 profile,详情可以参考 Spring Boot文档。
注意,当 active profile 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 p r e f i x . {prefix}. prefix.{file-extension}

file-extension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension来配置。 目前只支持 properties 类型。



配置内容:

(4)主启动

package com.consumer;

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

@SpringBootApplication
@EnableDiscoveryClient
public class NacosConsumerDemoApplication {

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

(5)配置访问接口


(6)支持动态刷新:@RefreshScope //动态刷新

package com.consumer.Controller;

import com.commons.Entity.Result;
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.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

import javax.annotation.Resource;

@RestController
@RequestMapping("nacos/")
@RefreshScope //动态刷新
public class ConsumerController {

    @Resource
    private RestTemplate restTemplate;

    @Value("${spring.datasource.username}")
    private String configInfo;

    @Value("${service-url.nacos-user-service}")
    private String url;

    @GetMapping("/{id}")
    public Result saveEntity(@PathVariable("id") Integer id) {

        return restTemplate.getForObject(url+"/nacos/"+id,Result.class);
    }

    @GetMapping("/getInfo")
    public String getInfo() {
        return configInfo;
    }

}

编辑root为root2

3.2 命名空间、分组和、DataId三者关系

(1)关系

配置文件寻找时按照先找命名空间,再从命名空间寻找对应的组,再从组里面寻找匹配DataId的配置;

(2)使用

新建两个命名空间


命名空间新建组


新建成功后可以看到dev命名空间下游存在刚才新建的分组配置。

更改配置文件,选择命名空间和分组


group:组名;
namespace:命名空间名,为命名空间的编号;

4、Nacos集群和持久化配置 4.1 基本概念

Nacos支持单机、集群、多集群3种部署模式;在实际生产中,需要注册多集群来保证服务安全,相关集群配置也需要持久化到数据库保证服务重启之后配置信息不丢失。其默认使用嵌入式数据库实现数据存储,但是每个nacos都自带一个数据库,多集群会导致数据不同步问题,所以需要手动配置数据库,目前仅支持MySQL数据库; 4.2 使用

打开Nacos的conf目录,会看到一个Mysql文件和一个application.properties配置文件;创建数据库nacos_config,执行数据库脚本创建表结构;
更改application配置

spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://localhost:3306/nacos_config?serverTimezone=Asia/Shanghai&useSSL=false&useUnicode=true&characterEncoding=utf8&characterSetResults=utf8
db.user=root
db.password=123456![在这里插入图片描述](https://img-blog.csdnimg.cn/6735ae5221604980a3df98aa1b13e280.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5b6u5YeJ5b2S5pyf,size_20,color_FFFFFF,t_70,g_se,x_16)

关掉Nacos重新启动
之前的配置都不见了,说明配置成功了;

使用过程

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/776865.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号