【SpringCloud】Nacos

Nacos简介

2018年6月,Eureka 2.0宣布闭源(但1.X版本仍然活跃),同年7月,阿里Nacos宣布开源,并迅速成为国内开发者关注的焦点。作为Eureka的替代品,Nacos目前已经成为国内开发者的首选。

Nacos(Dynamic Naming and Configuration Service)最初开源时,选择将内部的三个产品(Configserver非持久注册中心,VIPServer持久化注册中心,Diamond配置中心)合并并统一开源。其定位为一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。因此,Nacos被认为是一个注册中心组件,但它不仅限于此功能。

截至目前,Nacos几乎支持所有的主流语言,如Java、Go、C++、Node.js、Python、Scala等。

Nacos是Spring Cloud Alibaba的组件,而Spring Cloud Alibaba遵循Spring Cloud定义的服务注册和发现规范。因此,使用Nacos和使用Eureka对于微服务并没有太大区别。

主要差异在于:

Eureka需要单独搭建一个服务,而Nacos不需要自行搭建服务,其组件已经预先准备好,只需启动即可。
相应的依赖和配置略有不同。


Nacos安装 

本文使用的是单机安装。download.fastgit.orgicon-default.png?t=N7T8https://download.fastgit.org/alibaba/nacos/releases/download/2.2.3/nacos-server-2.2.3.zip把链接放到迅雷上下载会比较快。本文使用的是2.2.3

压缩包的内容如下:

Windows安装

把下载后的安装包解压缩到任何一个没有中文的文件夹下即可。

修改启动方式

nacos默认启动方式是集群,如果不是,需要修改成单机模式。

用任意文本编辑器打开bin下的startup.cmd。

把set MODE="cluster" 改成 set MODE="standalone"

启动nacos

进入bin目录双击startup.cmd即可。

如果点击无反应,注意一下是否配置了jdk的环境变量。

访问 127.0.0.1:8848/nacos 出现以下界面就成功了。

Linux安装

解压安装包

把下载的安装包解压到某个目录下。

修改启动方式

同Windows

启动nacos

#进入nacos/bin目录下

# CentOS命令
sh startup.sh -m standalone

# Ubuntu命令
bash startup.sh -m standalone

输入IP:8848\nacos访问(记得在防火墙打开端口) 

常见问题

  • 主机上都要有jdk运行,版本大于等于8。Windows中还要添加到环境变量中。
  • 报错日志在nacos/logs/nacos.log下
  • 端口号冲突。可能会与8848有冲突,要么杀死8848的进程,要么在配置文件中修改端口号,在conf目录下的application.properties中的server.port

Nacos简单使用

按照http://t.csdnimg.cn/ahirj 基础来开始Nacos的使用。

引入依赖

Spring Cloud Alibaba 与 Spring Cloud的版本要对应上。具体参考下面的文档。版本发布说明 | https://sca.aliyun.com

在父项目的pom文件的 <properties> 部分指定Spring Cloud Alibaba版本


 <spring-cloud-alibaba.version>2022.0.0.0-RC2</spring-cloud-alibaba.version>

同时在 dependencies 部分引入依赖

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

完整父项目pom

<?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>org.example</groupId>
    <artifactId>spring-cloud-nacos</artifactId>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>order-service</module>
        <module>product-service</module>
    </modules>
    <packaging>pom</packaging>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.1.6</version>
        <relativePath/>
    </parent>
    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <java.version>17</java.version>
        <mybatis.version>3.0.3</mybatis.version>
        <mysql.version>8.0.33</mysql.version>
        <spring-cloud.version>2022.0.3</spring-cloud.version>
        <spring-cloud-alibaba.version>2022.0.0.0-RC2</spring-cloud-alibaba.version>
    </properties>

    <dependencies>
        <dependency>
            <!-- 使用lombok基本都会使用到,所以直接引入到项目,被子项目继承 -->
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
    </dependencies>

    <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>
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>${mybatis.version}</version>
            </dependency>
            <dependency>
                <groupId>com.mysql</groupId>
                <artifactId>mysql-connector-j</artifactId>
                <version>${mysql.version}</version>
            </dependency>
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter-test</artifactId>
                <version>${mybatis.version}</version>
                <scope>test</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

</project>

在order-service和product-service中引入nacos依赖

也把LoadBalancer也也引用

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

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

配置地址

分别在两个服务的配置文件中添加上服务名和nacos的地址。

spring:
  application:
    name: product-service
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
spring:
  application:
    name: order-service
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848

远程调用

修改IP为项目名 + 为restTemplate 添加负载均衡注解

import com.demo.order.mapper.OrderMapper;
import com.demo.order.model.OrderInfo;
import com.demo.order.model.ProductInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

@Service
public class OrderService {
    @Autowired
    private OrderMapper orderMapper;
    @Autowired
    private RestTemplate restTemplate;

    public OrderInfo selectOrderById(Integer orderId){
        OrderInfo orderInfo = orderMapper.selectOrderById(orderId);
//        String url = "http://127.0.0.1:8350/product/"+ orderInfo.getProductId();
        String url = "http://product-service/product/"+ orderInfo.getProductId();
        ProductInfo productInfo = restTemplate.getForObject(url, ProductInfo.class);
        orderInfo.setProductInfo(productInfo);
        return orderInfo;
    }
}
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 BeanConfig {
    @LoadBalanced
    @Bean
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
}

启动服务

可以看到两个服务都注册上去了。

也能调用成功。

启动多服务

启动多个商品服务测试负载均衡


Nacos负载均衡

在生产环境中,由于环境相对恶劣,我们需要对服务的流量进行更加精细的控制。Nacos 支持多种负载均衡策略,包括:权重、同机房、同地域、同环境。

服务下线

当节点上的某个接口性能较差时,我们可以对该节点进行下线处理。

再次查看请求日志。

可以看到下线的服务没有收到任何请求。

点击上线后又能收到请求。


权重配置

可以给每个服务分配不同的权重。这样它们就会按照不同的权重收到不同数量的请求。默认每个都是1,几率都是相同的。

修改权重时可能会报错。

caused: errCode: 500, errMsg: do metadata operation failed ;caused:
com.alibaba.nacos.consistency.exception.ConsistencyException: The Raft Group
[naming_instance_metadata] did not find the Leader node;caused: The Raft Group
[naming_instance_metadata] did not find the Leader node;

如果报上面的错误,解决方案:删除nacos根目录/data/protocol文件夹即可。只需要删除protocol文件夹。

Nacos 采用 Raft 算法来计算 Leader,并且会记录前一次启动的集群地址。当服务器 IP 改变时,会导致 Raft 记录的集群地址失效,进而导致选 Leader 出现问题。(网络环境发生变化时,IP 地址也会发生变化)

开启Nacos负载均衡策略

由于 Spring Cloud LoadBalance 组件自身有负载均衡配置方式,所以不支持 Nacos 的权重属性配置。我们需要开启 Nacos 的负载均衡策略,让权重配置生效。在目前的两个服务下的配置文件中添加下面的配置即可。

spring:
  cloud:
    loadbalancer:
      nacos:
        enabled: true

同集群访问优先

Nacos把同一个机房内的实例,划分为一个集群。所以同集群优先访问,在一定程度上也可以理解为同机房优先访问。

微服务架构中,一个服务通常有多个实例共同提供服务,这些实例可以部署在不同的机器上,这些机器可以分布在不同的机房。

在微服务访问中,应该尽量访问同机房的实例。只有当本机房内的实例不可用时,才应该访问其他机房的实例。举例来说,假设 order-service 部署在上海机房,而 product-service 在北京和上海都有实例,我们希望优先访问上海机房的实例。只有当上海机房没有可用实例或实例不可用时,才会去访问北京机房的实例。一般情况下,由于同一个机房的机器属于同一个局域网,因此局域网访问速度会更快一些。

配置文件

在product-service的配置文件中给集群起个名字SHANGHAI,表示在上海

server:
  port: 8350
spring:
  application:
    name: product-service
  cloud:
    loadbalancer:
      nacos:
        enabled: true
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
        cluster-name: SHANHAI

同时在启动两个product-service,都起名为BEIJING

-Dserver.port=8351 -Dspring.cloud.nacos.discovery.cluster-name=BEIJING 

给order-service集群配置名称为SHANGHAI。

开启Nacos负载均衡策略

和上面的权重配置部分一样,同样要开启Nacos负载均衡在配置文件中,并且把权重都设置成1。

观察日志

访问接口,观察日志,可以看到只有SHANGHAI的机器收到了请求

当把product-service的SHANGHAI服务下线后,BEIJING的才能收到。


Nacos健康检查

Nacos作为注册中心,需要感知服务的健康状态,才能为服务方提供良好的服务。Nacos提供了两种检测机制。

  • 客户端主动上报:客户端通过心跳上报方式告知服务端(nacos注册中心)健康状态,默认心跳间隔为5秒;nacos会在超过15秒未收到心跳后将实例设置为不健康状态,超过30秒将实例删除。
  • 服务器端反向探测:Nacos主动探知客户端健康状态,默认间隔为20秒。健康检查失败后实例会被标记为不健康,不会被立即删除。

Nacos 中的健康检查机制不能主动设置,健康检查机制是和 Nacos 的服务实例类型强相关的。


Nacos服务实例类型

Nacos的服务实例(注册的节点)分为临时实例非临时实例

  • 临时实例:如果实例宕机超过一定时间,会从服务列表剔除,默认类型。
  • 非临时实例:如果实例宕机,不会从服务列表剔除,也可以叫永久实例。

Nacos对临时实例,采取的是客户端主动上报机制,对非临时实例,采取服务器端反向探测机制。


设置服务类型

在配置文件中设置

spring:
  cloud:
    nacos:
      discovery:
        ephemeral: false # 非临时实例

停止服务后,观察控制台。

不健康也不会下线


修改实例类型

修改了服务的实例类型后,重启服务后会报错。

解决方案:

1. 停止nacos

2. 删除 nacos根目录/data/protocol/raft目录

原因:

Nacos会记录每个服务实例的IP和端口号。当发现IP和端口都没有发生变化时,Nacos不允许一个服务实例类型发生变化,比如从临时实例变为非临时实例,或者从非临时实例变成临时实例。


Nacos健康检查出错

参考下面的内容:

如何解决Nacos持久化实例HTTP/TCP的健康检查不通过问题_微服务引擎(MSE)-阿里云帮助中心 (aliyun.com)


Nacos环境隔离

在企业开发中,一个服务会分为开发环境、测试环境和生产环境:

开发环境:开发人员用于开发的服务器,是最基础的环境。一般日志级别设置较低,可能会开启一些调试信息。
测试环境:测试人员用来进行测试的服务器,是开发环境到生产环境的过渡环境。
生产环境:正式提供对外服务的环境,通常关闭调试信息。
通常情况下,这几个环境是不能互相通信的。Nacos提供了Namespace(命名空间)来实现环境的隔离。不同的Namespace的服务不可见

默认情况下,所有的服务都在同一个名为public的Namespace下。


创建Namespace

配置Namespace

首先复制Namespace的ID

然后在配置文件中设置

spring:
  cloud:
    nacos:
      discovery:
        namespace: 0299dce3-8af2-4e1b-b697-02e473f800ce

这两个服务之间是无法通信的。


Nacos配置中心

当前项目的配置都在代码中,会存在以下问题:

  • 配置文件修改时,服务需要重新部署:微服务架构中,一个服务可能有成百个实例,挨个部署比较麻烦,且容易出错。
  • 多人开发时,配置文件可能需要经常修改:使用同一个配置文件容易冲突。

配置中心就是对这些配置项进行统一管理。通过配置中心,可以集中查看、修改和删除配置,无需再逐个修改配置文件。提高效率的同时,也降低了出错的风险。


添加配置

配置管理的命名空间和服务列表的命名空间是隔离的,两个是分别设置的。默认是public。
服务管理命名空间配置 ≠ 配置管理的命名空间

获取配置

当我们配置完之后,需要在项目中获取配置。

引入依赖

在product-service的pom中引入以下依赖

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        <!-- SpringCloud 2020.*之后版本需要引⼊bootstrap-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bootstrap</artifactId>
        </dependency>

配置bootstrap

在微服务启动前,需要先获取Nacos中的配置,并与 application.yml 配置合并。

在微服务运行之前,Nacos 要求必须使用 bootstrap.properties 配置文件来配置 Nacos Server 地址。

配置bootstrap.properties或者bootstrap.yml文件。

spring:
  application:
    # 必须和 Data ID 一致
    name: product-service
  cloud:
    nacos:
      config:
        # 配置中心地址
        server-addr: 127.0.0.1:8848

注意区别:

Nacos 配置中心: spring.cloud.nacos.config.server-addr
Nacos 注册中心: spring.cloud.nacos.discovery.server-addr

获取动态配置

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;

// 配置自动刷新注解
@RefreshScope
@RestController
public class NacosController {
    // 获取配置项
    @Value("${nacos.config}")
    private String nacosConfg;

    @RequestMapping("/getConfig")
    public String getConfig(){
        return "从Nacos获取配置项nacos.config:" + nacosConfg;
    }
}

 

设置命名空间

Nacos配置管理的命名空间和服务列表的命名空间是分别设置的。默认都是public。

Nacos配置命名空间在bootstrap.yml中进行配置。

spring:
  cloud:
    nacos:
      config:
        namespace: 5746f3e7-4c63-4f27-a1b9-79185768308b

设置命名空间后,项目启动时会在指定的命名空间下找对应的配置项。

Data ID

完整格式如下

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

  • prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix 来配置。
  • spring.profiles.active 即为当前环境对应的 profile。当 spring.profiles.active 为空时,连接符 - 也将不存在,dataId 的拼接格式变成 ${prefix}.${file-extension}。
  • file-extension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型,默认为 properties。

读取的优先级从上往下依次变低

在bootstrap.yml添加

spring:
  profiles:
    active: dev

启动日志如下:


打包部署

使用nacos配置中心

product-service使用了nacos的配置中心,需要做以下处理

在product-service的pom文件中添加

    <profiles>
        <profile>
            <id>dev</id>
            <properties>
                <profile.name>dev</profile.name>
            </properties>
        </profile>
        
        <profile>
            <id>prod</id>
            <properties>
                <profile.name>prod</profile.name>
            </properties>
        </profile>
    </profiles>

让bootstrap动态的读取这个文件,但是bootstrap不能直接读取maven中的配置项。所以还需要再bulid中添加下面能都读取maven打包时加载的静态文件。

        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
                <includes>
                    <include>**/**</include>
                </includes>
            </resource>
        </resources>

 

未使用nacos配置中心

order-service没有使用nacos的配置中心。按照一般的项目打包即可。

同样设置一下prod 和 dev配置文件即可。另外application.yml中保留公共相同的部分,其他两个保留不一样的地方。 

打包

做完上述工作后,选择

先clean,在package即可。最后上传服务器启动即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/729666.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PgSQL-添加列、字段的注释

mysql是&#xff1a; 添加列&#xff1a;--alter table 表名 add column 列名 varchar(30);ALTER TABLE p_show ADD COLUMN points VARCHAR(100) COMMENT 所需积分;---------------------------------------------------------------------------------------------添加、修改…

使用nvm安装node.js ,方便管理多个版本的node.js,且程序添加和卸载页面也不会出现多个版本的node.js软件(是一个都不会出现)

首先下载和安装nvm windows 安装 nvm&#xff1a; 需要先把本地安装的Node.js卸载&#xff0c;然后再下载nvm&#xff0c;地址&#xff1a; https://github.com/coreybutler/nvm-windows/releases 一般情况&#xff0c;找到最新版本&#xff0c;然后下载nvm-setup.exe文件就可以…

transformer之位置编码

由于 Transformer 模型中自注意力模块具有置换不变性,因此仅使用注意力机制无法捕捉序列中的顺序关系,从而退化为“词袋模型”。为了解决这一问题,需要引入位置编码(Position Embedding, PE)对于序列信息进行精确建模,从而将绝对或相对位置信息整合到模型中。 什么是位置…

大厂晋升学习方法一:海绵学习法

早晨 30 分钟 首先&#xff0c;我们可以把起床的闹钟提前 30 分钟&#xff0c;比如原来 07:30 的闹钟可以改为 07:00。不用担心提前 30 分钟起床会影响休息质量&#xff0c;习惯以后&#xff0c;早起 30 分钟不但不会影响一天的精力&#xff0c;甚至可能反而让人更有精神。早起…

低成本创业新篇章:上门回收小程序的崛起与挑战

在当今这个快速变化的时代&#xff0c;低成本创业项目成为了许多创业者的首选。其中&#xff0c;上门回收小程序以其独特的商业模式和市场需求&#xff0c;成为了创业市场中的一股新势力。本文将深入探讨上门回收小程序作为低成本创业项目的崛起之路以及面临的挑战。 一、上门回…

WPF/C#:在DataGrid中显示选择框

前言 在使用WPF的过程中可能会经常遇到在DataGrid的最前或者最后添加一列选择框的需求&#xff0c;今天跟大家分享一下&#xff0c;在自己的项目中是如何实现的。 整体实现效果如下&#xff1a; 如果对此感兴趣&#xff0c;可以接下来看具体实现部分。 实践 假设数据库中的…

【51单片机】按键的操作

文章目录 前言读取按键的原理proteus仿真示例代码 总结 前言 在现代电子产品中&#xff0c;按键是用户与设备之间交互的重要组成部分。它们允许用户通过简单的按下来触发特定的操作或命令。在微控制器的背景下&#xff0c;按键的设计和操作对于确保设备的响应性和用户体验至关…

CSS新手入门笔记【导入方法、选择器介绍、选择器优先级、属性详细介绍、盒子模型】

目录 一、目的与优势二、CSS导入方式三、语法结构四、选择器类型基本选择器组合选择器伪类与伪元素属性选择器 六、选择器优先级总结 六、CSS属性1. 字体与文本属性2. 背景属性3. 尺寸与盒模型属性4. 布局与定位5. 列表样式6. 边框与轮廓7. 文本装饰与效果8. 动画与过渡9. 伪类…

RocketMQ-记一次生产者发送消息存在超时异常

目录 1、背景说明 2、排查 2.1、防火墙 2.2、超时时间设置 2.3、服务器资源检查 2.3.1、内存、CPU等 2.3.2、磁盘空间 ​编辑 2.3.3、检查文件描述符 2.3.4、swap区 3、增加swap空间 3.1、创建目录 3.2、格式化 3.3、启动swap 3.4、查看效果 1、背景说明 在一次…

Harbor 不同模块作用以及持久化数据大小建议

目录 1. Harbor 组件1.1 Registry (Harbor Registry)1.2 Database (PostgreSQL)1.3 Jobservice1.4 Chartmuseum1.5 Redis1.6 Trivy 2. 示例 values.yaml3. 总结 搭建环境 使用 NFS 作为持久化存储使用 Helm 在 k8s 上进行搭建 在使用 Helm 安装 Harbor 并配置持久化存储时&am…

ai assistant激活成功后,如何使用

ai assistant激活成功后&#xff0c;如图 ai assistant渠道&#xff1a;https://web.52shizhan.cn/activity/ai-assistant 在去年五月份的 Google I/O 2023 上&#xff0c;Google 为 Android Studio 推出了 Studio Bot 功能&#xff0c;使用了谷歌编码基础模型 Codey,Codey 是…

Redis-数据类型-zset

文章目录 1、查看redis是否启动2、通过客户端连接redis3、切换到db4数据库4、将一个或多个member元素及其score值加入到有序集key当中5、升序返回有序集key6、升序返回有序集key&#xff0c;让分数一起和值返回的结果集7、降序返回有序集key&#xff0c;让分数一起和值返回到结…

海外仓系统有哪些模块:WMS海外仓系统完整功能清单

虽然说现在市面上的海外仓系统非常多&#xff0c;各有特色&#xff0c;不过在功能模块的设计上&#xff0c;其实殊途同归&#xff0c;只是各有侧重点而已。 作为海外仓企业&#xff0c;想选择一套适合自己的WMS海外仓系统&#xff0c;首先就要了解系统标准的功能模块都有什么。…

Typora v1.8.6解锁版安装教程 (轻便简洁的Markdown编辑器)

前言 Typora是一款轻便简洁的Markdown编辑器&#xff0c;支持即时渲染技术&#xff0c;这也是与其他Markdown编辑器最显著的区别。即时渲染使得你写Markdown就想是写Word文档一样流畅自如&#xff0c;不像其他编辑器的有编辑栏和显示栏。 一、下载地址 下载链接&#xff1a;…

Redis单例部署

目录 1. 概述2. 参考3. 环境4. 部署4.1 操作系统4.1.1 修改系统参数4.1.2 关闭透明大页内存4.1.3 修改系统限制 4.2 安装Redis4.2.1 下载Redis4.2.2 创建redis账号4.2.3 添加Redis环境变量4.2.4 创建Redis使用目录4.2.5 安装Redis4.2.6 手动修改配置文件&#xff08;**可跳过&a…

2025天津数控机床展(天津工业展)

2025第21届天津工博会—机床展 时间&#xff1a;2025年3月6-9日 地点&#xff1a;国家会展中心&#xff08;天津&#xff09; 达成交易&#xff0c;是我们唯一的追求&#xff01; Dealing Is Our Top Pursuit. 主办单位 振威会展集团 中国机械工业联合会 中国国际贸易促…

名称申请不了商标,可以受保护不!

前几天个网友说要申请注册个商标名称&#xff0c;发来名称让普推商标知产老杨帮忙检索了下&#xff0c;发现有同名的被驳回&#xff0c;而且是做过驳回复审被驳回&#xff0c;而且是绝对理由驳回的&#xff0c;易使消费者对商品的品质等特点产生误认&#xff0c;不得作为商标使…

如何开发一个项目脚手架cli

目录 背景正文unbuildpromptsprogresskolorist 设置打包命令npm execnpxnpm init/ npm create/ npm innit 使用最后 背景 随着团队项目类型越来越多&#xff0c;方便后续快速去开发项目&#xff0c;会出现各种类型的项目模版项目。 这样开发只需要通过脚手架选择自己需要的项目…

数据采集之二主一从,485总线共享器

产品概述 485总线共享器示意图 功能示意图 DAQ-GP-485HUB是上海数采物联网推出的一款 RS485总线多路复用共享数据处理器&#xff0c;是一款高性能的通讯设备&#xff0c;专门针对两台主机和 一台从机通讯时导致的数据冲突而设计。在实际工业控制和监控场景中&#xff0c;多个主…

Java宝藏实验资源库(3)类

一、实验目的 理解面向对象程序的基本概念。掌握类的继承的实现机制。熟悉类中成员的访问控制方法。熟悉ArrayList类的使用。 二、实验内容、过程及结果 *9.5Programming Exerc ise the GregorianCal endar class) Java API has the GregorianCalendar class in the java. uti…