IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 07-GuliMall SpringCloud Alibaba-Nacos作为注册中心、配置中心 -> 正文阅读

[Java知识库]07-GuliMall SpringCloud Alibaba-Nacos作为注册中心、配置中心

1.Nacos作为注册中心

Nacos 是阿里巴巴开源的一个更易于构建云原生应用的动态服务发现、配置管理和服务管理 平台。他是使用 java 编写。需要依赖 java 环境

官方文档

1.启动nacos-server

下载安装 nacos-server: https://github.com/alibaba/nacos/releases

打开安装目录
在这里插入图片描述

  • cmd中输入命令startup.cmd -m standalone, 以单机模式启动(开发测试阶段用这个, 所以现在用这个)

    或者修改startup.cmd文件中的set MODE=“standalone”, 然后就可以双击这文件启动nacos了
    在这里插入图片描述

    另外cmd中输入命令startup.cmd -m cluster是以集群模式启动,这个模式需要创建数据库, 详情网上找教程

  • 访问 http://localhost:8848/nacos/

  • 使用默认的账号密码都是nacos

在这里插入图片描述

在这里插入图片描述

2.将微服务注册到 nacos 中

1.在gulimall-common模块导入依赖

        <!--        服务注册/发现-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

记得加一个版本管理

 <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>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Greenwich.SR5</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

每次更新gulimall-common记得clean和install一下

2.在微服务模块加入依赖(如果该模块不需要调用别的模块的服务,则不需要使用openfeign, 也就不需要导入该依赖)

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

避免报错

No Feign Client for loadBalancing defined. Did you forget to include spring-cloud-starter-loadbalancer?

这是版本的问题, 我们把spring-cloud的版本降低一下

    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Greenwich.SR3</spring-cloud.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>
        </dependencies>
    </dependencyManagement>

在application.properties添加配置

#你的服务模块的名字
spring.application.name=gulimall-member
#nacos的ip
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

启动类上加入开启服务注册发现注解

@EnableDiscoveryClient

3.编写服务

这里我们简单编写一个服务来测试一下, 就是gulimall-member模块调用gulimall-product模块的服务

1.gulimall-product

package com.atguigu.gulimall.product.controller;

import com.atguigu.common.utils.R;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;


@RestController
@RequestMapping("product/test")
public class TestController {

    @RequestMapping("/list")
    public R list(){
        String[] list =  {"苹果", "香蕉", "桃子"};
        return R.ok().put("list",list);
    }
}

2.gulimall-member
在这里插入图片描述
启动类GulimallMemberApplication

package com.atguigu.gulimall.member;

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


@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients(basePackages = "com.atguigu.gulimall.member.feign")
public class GulimallMemberApplication {

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

}

ProductFeignService

package com.atguigu.gulimall.member.feign;


import com.atguigu.common.utils.R;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;

@FeignClient("gulimall-product")  //使用商品服务
public interface ProductFeignService {

    @GetMapping("/product/test/list")
    R getProductList();
}

ProductController

package com.atguigu.gulimall.member.controller;


import com.atguigu.common.utils.R;
import com.atguigu.gulimall.member.feign.ProductFeignService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ProductController {

    @Autowired
    private ProductFeignService productFeignService;

    @GetMapping("/test")
    public R list(){
        return productFeignService.getProductList();
    }
}

4.运行测试

把这两个服务运行启动

在这里插入图片描述

在这里插入图片描述

2.Nacos作为配置中心

1.相关概念

  • 命名空间namespace:
    用于进行租户粒度的配置隔离。不同的命名空间下,可以存在相同的 Group 或 Data ID 的 配置。Namespace的常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生 产环境的资源(如配置、服务)隔离等。

    spring.cloud.nacos.config.namespace=xxxx
    
  • 配置分组group:
    Nacos 中的一组配置集,是组织配置的维度之一。通过一个有意义的字符串(如 Buy 或 Trade)对配置集进行分组,从而区分 Data ID 相同的配置集。当您在 Nacos 上创建一个配置时,如果未填写配置分组的名称,则配置分组的名称默认采用 DEFAULT_GROUP 。配置分组的常见场景:不同的应用或组件使用了相同的配置类型,如 database_url 配置和 MQ_topic 配置。

    spring.cloud.nacos.config.group=xxx
    

    每个微服务创建自己的 namespace 进行隔离,group 来区分 dev,beta,prod 等环境

    spring.cloud.nacos.config.namespace=member
    spring.cloud.nacos.config.group=dev
    
  • 配置集: 一组相关或者不相关的配置项的集合称为配置集。在系统中,一个配置文件通常就是一个配置集,包含了系统各个方面的配置。例如,一个配置集可能包含了数据源、线程池、日志级别等配置项。

  • 配置集 ID: Nacos 中的某个配置集的 ID。配置集 ID 是组织划分配置的维度之一。Data ID 通常用于组织划分系统的配置集。一个系统或者应用可以包含多个配置集,每个配置集都可以被一个有 意义的名称标识。Data ID 通常采用类 Java包(如com.taobao.tc.refund.log.level)的命名 规则保证全局唯一性。此命名规则非强制。

    #配置文件可以拆分为多个子文件
    #第1个子文件,配置数据源
    spring.cloud.nacos.config.ext-config[0].group=dev
    spring.cloud.nacos.config.ext-config[0].data-id=member-datasource.yml
    spring.cloud.nacos.config.ext-config[0].refresh=true
            
    #第2个子文件,配置mybatis
    spring.cloud.nacos.config.ext-config[1].group=dev
    spring.cloud.nacos.config.ext-config[1].data-id=member-mybatis.yml
    spring.cloud.nacos.config.ext-config[1].refresh=true
    

2.原理

  • 自动注入: NacosConfigStarter 实现了org.springframework.cloud.bootstrap.config.PropertySourceLocator接口,并将优先级设置成了最高。 在 Spring Cloud 应用启动阶段,会主动从 Nacos Server端获取对应的数据,并将获取到的 数据转换成 PropertySource 且注入到 Environment 的PropertySources 属性中,所以使用 @Value 注解也能直接获取 Nacos Server 端配置的内容。

  • 动态刷新: Nacos Config Starter 默认为所有获取数据成功的 Nacos 的配置项添加了监听功能,在监听到服务端配置发生变化时会实时触发org.springframework.cloud.context.refresh.ContextRefresher 的 refresh方法 。 如果需要对 Bean 进行动态刷新,请参照 Spring 和 Spring Cloud 规范。推荐给类添加@RefreshScope 或 @ConfigurationProperties 注解

3.编写测试

1.登录nacos管理界面, 为gulimall-member的配置文件创建命名空间
在这里插入图片描述

2.在nacos管理界面, 为gulimall-member的配置文件创建配置文件

在 nacos 中创建一个 " 应用名.properties "的配置文件并编写配置 , 项目使用的时候可以通过 dataId 和 group 来唯一确定该条配置,不用data id。

gulimall-member.properties
在这里插入图片描述

新建一个配置子文件,项目使用的时候需要用data id来确定它

gulimall-member-datasource.properties
在这里插入图片描述

在这里插入图片描述

3.编写gulimall-member模块的代码,进行测试

application.properties

server.port=9010

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://192.168.56.103/gulimall_ums?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=root

spring.application.name=gulimall-member
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

member.name=lisi
member.age=15

在resources目录下创建bootstrap.properties, 注册中心的配置优先级高于本地的配置

spring.application.name=gulimall-member
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.cloud.nacos.config.namespace=e1c3d8b5-1ba4-4720-a9ad-e0b7abb8e2e5
spring.cloud.nacos.config.group=dev

#配置文件可以拆分为多个子文件
#第1个子文件,配置数据源
spring.cloud.nacos.config.ext-config[0].group=dev
spring.cloud.nacos.config.ext-config[0].data-id=gulimall-member-datasource.properties
spring.cloud.nacos.config.ext-config[0].refresh=true

测试类

package com.atguigu.gulimall.member.controller;


import org.springframework.beans.factory.annotation.Autowired;
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.RestController;

import java.util.HashMap;
import java.util.Map;

@RestController
@RefreshScope  //动态刷新
public class TestController {

    @Value("${member.name}")
    private String name;

    @Value("${member.age}")
    private Integer age;

    @GetMapping("/show")
    public Map<String, Object> test(){
        Map map = new HashMap<String, Object>();
        map.put("name", name);
        map.put("age", age);
        return map;
    }
}

4.运行

1.初始时
访问http://localhost:9010/show

在这里插入图片描述

2.修改配置中心的配置文件
在这里插入图片描述
可以看到数据动态刷新了

在这里插入图片描述

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-07-20 18:38:23  更:2022-07-20 18:38:38 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/31 7:01:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码