Nacos简介及其应用场景

Nacos订阅功能及应用场景解析 Nacos的订阅功能及应用场景 阅读详情

Spring Cloud Alibaba

Spring Cloud Netflix项⽬进⼊维护模式
Spring Cloud Alibaba 能够提供微服务开发的⼀站式解决⽅案,⽽且经过阿⾥业务考验,⾜够优秀
参考⽂档 https://spring.io/blog/2018/12/12/spring-cloud-greenwich-rc1-available-now

  1. Spring CloudNetFlix项⽬进⼊维护模式
  2. 维护模式意味着Spring Cloud团队将不再向改团队添加新功能,修复block级别的Bug以及安全问题,会考虑审查社区的⼩型pull request

简介

Spring Cloud Alibaba 致⼒于提供微服务开发的⼀站式解决⽅案。此项⽬包含开发分布式应⽤微服务的必需组件,⽅便开发者通过 Spring Cloud 编程模型轻松使⽤这些组件来开发分布式应⽤服务。
依托 Spring Cloud Alibaba,您只需要添加⼀些注解和少量配置,就可以将 Spring Cloud 应⽤接⼊阿⾥微服务解决⽅案,通过阿⾥中间件来迅速搭建分布式应⽤系统。
官⽹地址:https://spring.io/projects/spring-cloud-alibaba
github项⽬地址:https://github.com/alibaba/spring-cloud-alibaba

主要功能

服务限流降级:默认⽀持 WebServlet、WebFlux, OpenFeign、RestTemplate、Spring Cloud Gateway, Zuul, Dubbo 和 RocketMQ 限流降级功能的接⼊,可以在运⾏时通过控制台实时修改限流降级规则,还⽀持查看限流降级 Metrics 监控。
服务注册与发现:适配 Spring Cloud 服务注册与发现标准,默认集成了 Ribbon 的⽀持。
分布式配置管理:⽀持分布式系统中的外部化配置,配置更改时⾃动刷新。
消息驱动能⼒:基于 Spring Cloud Stream 为微服务应⽤构建消息驱动能⼒。
分布式事务:使⽤ @GlobalTransactional 注解, ⾼效并且对业务零侵⼊地解决分布式事务问题。
阿⾥云对象存储:阿⾥云提供的海量、安全、低成本、⾼可靠的云存储服务。⽀持在任何应⽤、任何时间、任何地点存储和访问任意类型的数据。
分布式任务调度:提供秒级、精准、⾼可靠、⾼可⽤的定时(基于 Cron 表达式)任务调度服务。同时提供分布式的任务执⾏模型,如⽹格任务。⽹格任务⽀持海量⼦任务均匀分配到所有 Worker(schedulerx-client)上执⾏。
阿⾥云短信服务:覆盖全球的短信服务,友好、⾼效、智能的互联化通讯能⼒,帮助企业迅速搭建客户触达通道。

主要组件

Sentinel:把流量作为切⼊点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。
Nacos:⼀个更易于构建云原⽣应⽤的动态服务发现、配置管理和服务管理平台。
Seata:阿⾥巴巴开源产品,⼀个易于使⽤的⾼性能微服务分布式事务解决⽅案。
RocketMQ:⼀款开源的分布式消息系统,基于⾼可⽤分布式集群技术,提供低延时的、⾼可靠的消息发布与订阅服务。
Dubbo:Apache Dubbo™ 是⼀款⾼性能 Java RPC 框架。
Alibaba Cloud OSS: 阿⾥云对象存储服务(Object Storage Service,简称 OSS),是阿⾥云提供的海量、安全、低成本、⾼可靠的云存储服务。您可以在任何应⽤、任何时间、任何地点存储和访问任意类型的数据。
Alibaba Cloud SchedulerX: 阿⾥中间件团队开发的⼀款分布式任务调度产品,提供秒级、精准、⾼可靠、⾼可⽤的定时(基于 Cron 表达式)任务调度服务。
Alibaba Cloud SMS: 覆盖全球的短信服务,友好、⾼效、智能的互联化通讯能⼒,帮助企业迅速搭建客户触达通道。

版本说明

组件版本关系
在这里插入图片描述
依赖版本关系

在这里插入图片描述

Nacos

简介

为什么叫nacos

前四个字⺟分别为Naming和Configuration的前两个字⺟,最后的s为Service
简介
Nacos 致⼒于帮助您发现、配置和管理微服务。Nacos 提供了⼀组简单易⽤的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。
Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中⼼的现代应⽤架构 (例如微服务范式、云原⽣范式) 的服务基础设施。
下载地址
https://github.com/alibaba/Nacos 下载地址
https://nacos.io/zh-cn/docs/what-is-nacos.html 官⽅⽂档
总结
Nacos = Eureka + Config + Bus
Nacos代替Eureka作为注册中⼼,Nacos代替Config作为配置中⼼

安装

下载nacos-server-1.4.1.zip
解压进⼊bin⽬录执⾏startup.cmd启动
修改startup.cmd⽂件中 set MODE=“standalone”
访问http://localhost:8848/nacos,默认⽤户名密码都是"nacos"

在这里插入图片描述
在这里插入图片描述

入门案例

⼊⻔案例模拟订单微服务调⽤⽀付微服务,订单和⽀付都注册到Nacos,以及后续从nacos读取配置属性
⽀付微服务:服务提供者
订单微服务:服务消费者
在这里插入图片描述

⽗⼯程

⽗⼯程统⼀管理spring boot,spring cloud和spring cloud alibaba版本号,参考上⾯版本对应关系
Spring Cloud Hoxton.SR8
Spring Cloud Alibaba 2.2.5.RELEASE
Spring Boot 2.3.2.RELEASE

pom

<properties>
 <java.version>1.8</java.version>
 <alibaba-cloud.version>2.2.5.RELEASE</alibaba-cloud.version>
 <springcloud.version>Hoxton.SR8</springcloud.version>
 </properties>
 <dependencyManagement>
 <dependencies>
 <dependency>
 <groupId>org.springframework.cloud</groupId>
 <artifactId>spring-cloud-dependencies</artifactId>
 <version>${springcloud.version}</version>
 <type>pom</type>
 <scope>import</scope>
 </dependency>
 <dependency>
 <groupId>com.alibaba.cloud</groupId>
 <artifactId>spring-cloud-alibaba-dependencies</artifactId>
 <version>${alibaba-cloud.version}</version>
 <type>pom</type>
 <scope>import</scope>
 </dependency>
 </dependencies>
 </dependencyManagement>
 <dependencies>
 <dependency>
 <groupId>org.apache.commons</groupId>
 <artifactId>commons-lang3</artifactId>
 <version>3.9</version>
 </dependency>
 </dependencies>
 <build>
 <plugins>
 <plugin>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-maven-plugin</artifactId>
 </plugin>
 </plugins>
 </build>

公共⼯程

提供订单和⽀付业务都需要的公共实体类
pom.xml

 <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <skip>true</skip>
                </configuration>
            </plugin>
        </plugins>
    </build>

注意:设置maven-plugin插件 true 可以避免spring boot应该⽤没有main class的错误

实体类

CommonResult

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class CommonResult<T> {

    private  Integer code;  //返回状态码
    private String message;  //返回信息
    private  T   data; //返回数据

    public CommonResult(Integer code, String message) {
        this.code = code;
        this.message = message;
    }
}

Payment

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Payment implements Serializable {
    private Long id;
    private String serial;

}

提供者-⽀付微服务

pom.xml

<properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>
    <dependencies>
        <!--nacos config-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>

        <!--SpringCloud ailibaba nacos -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
       <!--sentinel持久化-->
        <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-datasource-nacos</artifactId>
        </dependency>
        <!-- SpringBoot整合Web组件 -->
        <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><!-- 引⼊⾃⼰定义的api通⽤包,可以使⽤Payment⽀付Entity -->
            <groupId>org.example</groupId>
            <artifactId>common</artifactId>
            <version>${project.version}</version>
        </dependency>
        <!--⽇常通⽤jar包配置-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!-- 后续做Sentinel的持久化会⽤到的依赖 -->
        <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-datasource-nacos</artifactId>
        </dependency>
        <!-- sentinel -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        </dependency>
    </dependencies>

application.yml

server:
 port: ${port:9001}
spring:
 application:
   name: payment-service
 cloud:
   nacos:
    discovery:
      server-addr: localhost:8848 #配置Nacos地址

PaymentApplication

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

@SpringBootApplication
@EnableDiscoveryClient
public class PaymentApplication{
    public static void main(String[] args) {
        SpringApplication.run(PaymentApplication.class, args);
    }
}

PaymentController

import com.lxs.springcloud.entity.CommonResult;
import com.lxs.springcloud.entity.Payment;
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.RestController;
import java.util.HashMap;
@RestController
public class PaymentController {
 @Value("${server.port}")
 private String serverPort;
 public static HashMap<Long, Payment> hashMap = new HashMap<>();
 static {
 hashMap.put(1L, new Payment(1L, "28a8c1e3bc2742d8848569891fb42181"));
 hashMap.put(2L, new Payment(2L, "bba8c1e3bc2742d8848569891ac32182"));
 hashMap.put(3L, new Payment(3L, "6ua8c1e3bc2742d8848569891xt92183"));
 }
 @GetMapping(value = "/paymentSQL/{id}")
 public CommonResult<Payment> paymentSQL(@PathVariable("id") Long id) {
 Payment payment = hashMap.get(id);
 CommonResult<Payment> result = new CommonResult(200, "from
mysql,serverPort: " + serverPort, payment);
 return result;
 }
}

5) 启动⽀付服务
启动两个服务实例端⼝号分别为9001和9002,注册到nacos中
配置⽂件port: ${port:9001}表示,没有port参数,使⽤9001端⼝,有port参数则使⽤port参数指定的端⼝
在这里插入图片描述
访问nacos查看服务列表
在这里插入图片描述

消费者-订单微服务

pom.xml

<properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>
    <dependencies>
        <!--nacos config-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
      <!--sentinel持久化配置-->
        <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-datasource-nacos</artifactId>
        </dependency>
    <!--SpringCloud openfeign -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>
    <!--SpringCloud ailibaba nacos -->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
    <!--SpringCloud ailibaba sentinel -->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
    </dependency>
        <!-- 引⼊⾃⼰定义的api通⽤包,可以使⽤Payment⽀付Entity -->
        <dependency>
            <groupId>org.example</groupId>
            <artifactId>common</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <!-- SpringBoot整合Web组件 -->
        <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>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

application.yml
server:
port: 84
spring:
application:
name: order-service
cloud:
nacos:
discovery:
server-addr: localhost:8848
启动器

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
public class OrderApplication {
    public static void main(String[] args) {
        SpringApplication.run(OrderApplication.class, args);
    }
}

ApplicationContextConfig

//nacos底层也是ribbon,注⼊RestTemplate
@Configuration
public class ApplicationContextConfig {
    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate(){
        return new RestTemplate();
    }
}

5)FeignClient
PaymentFallbackService

@Component
public class PaymentFallbackService implements PaymentService {
 @Override
 public CommonResult<Payment> paymentSQL(Long id) {
 return new CommonResult<>(44444, "服务降级返回,---
PaymentFallbackService", new Payment(id, "errorSerial"));
 }
}

PaymentService

import com.springcloud.entity.CommonResult;
import com.springcloud.entity.Payment;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

@FeignClient(value = "payment-service", fallback = PaymentFallbackService.class)
public interface PaymentService {
    @GetMapping(value = "/paymentSQL/{id}")
    public CommonResult<Payment> paymentSQL(@PathVariable("id") Long id);
}

OrderController

@RestController
public class OrderController {
 
 public static final String SERVICE_URL = "http://payment-service";
 @Resource
 private RestTemplate restTemplate;
 @GetMapping("/consumer/ribbon/{id}")
 public CommonResult consumer_ribbon(@PathVariable("id") Integer id){
 CommonResult<Payment> result = restTemplate.getForObject(SERVICE_URL +
"/paymentSQL/" + id, CommonResult.class, id);
 return result
 }
 
 //OpenFeign
 @Resource
 private PaymentService paymentService;
 @GetMapping(value = "/consumer/feign/{id}")
 public CommonResult<Payment> consumer_feign(@PathVariable("id") Long id) {
 return paymentService.paymentSQL(id);
 } 
 
}

启动
访问http://localhost:84//consumer/ribbon/2地址,可以看到9001和9002端⼝交替执⾏,因为nacos底层也是采⽤ribbon进⾏负载均衡处理

在这里插入图片描述
在这里插入图片描述

通过feign调用,也是有负载均衡的。
在这里插入图片描述
在这里插入图片描述

配置中心:

基本配置

nacos可以作为配置中⼼使⽤,在payment⼯程中如下步骤,启动nacos配置中⼼
引⼊依赖

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

配置⽂件
bootstrap.yml

spring:
  cloud:
    nacos:
      config:
        server-addr: localhost:8848
        file-extension: yaml

application.yml

server:
 port: ${port:9001}
spring:
 application:
   name: payment-service
 cloud:
   nacos:
     discovery:
       server-addr: localhost:8848 #配置Nacos地址
 profiles:
   active: dev

注意:spring.cloud.nacos.config配置必须放到bootstrap.yml配置⽂件中,保证在优先读取配置⽂件再启动,否则配置⽆效
点击发布:
nacos中的配置
访问nacos在配置列表中增加如下配置
在这里插入图片描述
在Nacos配置中心就可以看到了一个配置
在这里插入图片描述

说明:之所以需要配置 spring.application.name ,是因为它是构成 Nacos 配置管理 dataId 字段的⼀部分。
在 Nacos Spring Cloud 中, dataId 的完整格式如下:
p r e f i x − {prefix}- prefix−{spring.profiles.active}.${file-extension}

在这里插入图片描述
对应的关系图
在这里插入图片描述
业务中读取配置属性

@RestController
@RequestScope
public class PaymentController {
 @Value("${config.info}")
 private String configInfo;
 @GetMapping("/config/info")
 public String getConfigInfo() {
 return configInfo;
 }
} 

测试
http://localhost:9001/config/info
在这里插入图片描述
在这里插入图片描述
修改以后页面直接刷新,可以看到已经是修改后的配置了
当修改配置值,会结果已经改变,Nacos⾃带⾃动刷新功能,也就是Nacos=Spring Cloud Config +Spring Cloud Bus
在这里插入图片描述
在这里插入图片描述

配置隔离

通常,企业研发的流程是这样的:先在开发测试环境开发和测试功能,然后灰度,最后发布到⽣产环境。并且,为了⽣产环境的稳定,需要将测试环境和⽣产环境进⾏隔离,此时,必然会遇到问题是多环境(dev,test,prod)问题,即:
多个环境的数据如何隔离?
如何优雅的隔离?
nacos采⽤如下⽅案进⾏服务的隔离,如下图:
在这里插入图片描述
1)创建dev,test,prod命名空间
在这里插入图片描述
2)在不同命名空间下创建如下配置
在这里插入图片描述
其他命名空间下,克隆修改相应内容
3)配置读取相应的配置
bootstrap.yml

spring:
 cloud:
   nacos:
     config:
       server-addr: localhost:8848
       file-extension: yaml
       namespace: f521b45b-e0bb-4c4d-b97c-3d0158970001
       group: MY_GROUP

注意:如果不配置namespace默认为public,不配置group默认为DEFAULT_GROUP
在这里插入图片描述
4) 在注册service可以指定namespace隔离注册到nacos的服务
在这里插入图片描述

server:
 port: ${port:9001}
spring:
 application:
   name: payment-service
 cloud:
   nacos:
     discovery:
       server-addr: localhost:8848 #配置Nacos地址
       namespace: f521b45b-e0bb-4c4d-b97c-3d0158970001
 profiles:
   active: dev

服务已经被部署到Dev下了;
此时用订单服务去访问服务,就访问不到,因为他们不在同一个命名空间下了。
然后部署到同一个命名空间下,就又可以访问了

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

配置拆分⽅案

项⽬中会有很多的微服务,必然会存在很多具体配置,和重复配置,可以采⽤如下⽅案管理配置
在这里插入图片描述
根据上⾯分析在nacos中配置如下:

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
配置⽂件
bootstrap.yml

在这里插入图片描述
注:extension-configs配置属性和shared-configs配置属性功能⼀致,都是读取配置⽂件,这⾥我们把重复配置放到common.yaml中,这样在不同的⼯程中就可以重复使⽤[n]的值越⼤,优先级越⾼
application.yml

spring:
 application:
   name: payment-service
 profiles:
   active: dev

在这里插入图片描述
在这里插入图片描述
order微服务bootstrap.yml
在这里插入图片描述
注意:这⾥两个⼯程使⽤重⽤的配置⽂件common.yaml

在这里插入图片描述

交给Nacos管理的配置不能包括关于服务本身的名称的相关配置,如本例中的服务的名称。

订单微服务的配置文件注释掉
在这里插入图片描述
然后访问
在这里插入图片描述

可以发现已经成功了,说明配置到Nacos成功了

Nacos⾼可⽤

官⽹nacos集群部署⽂档:https://nacos.io/zh-cn/docs/cluster-mode-quick-start.html
在这里插入图片描述
我们采⽤的Nacos⾼可⽤架构
在这里插入图片描述

在本地创建centos 7镜像,路径提前选好
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
复制好配置文件以后执行安装:

Vagrant.configure("2") do |config|
 # 定义应⽤服务器
 config.vm.define :s2 do |s2|
   s2.vm.provider "virtualbox" do |v|
             v.customize ["modifyvm", :id, "--name", "s2", "--memory", "4096", "--
cpus", "2"]
 end
 s2.vm.box = "centos/7"
 s2.vm.hostname = "s2"
 s2.vm.network :private_network, ip: "192.168.56.111"
 end
end

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
安装sz,rz命令

yum -y install lrzsz

安装vim

yum -y install vim*

安装net-tool 包

yum install net-tools

开启远程登陆,修改“/etc/ssh/sshd_config”

PermitRootLogin yes
PasswordAuthentication yes

然后重启SSHD

systemctl restart sshd

使⽤Xshell或SecureCRT进⾏远程连接即可

安装MySQL

1)下载Mysql
下载地址 https://downloads.mysql.com/archives/community/

在这里插入图片描述

在这里插入图片描述
2)安装
拷⻉mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz到/root⽬录下

tar -zxvf mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz

解压完成后重命名

mv mysql-5.7.28-linux-glibc2.12-x86_64 mysql-5.7.28
mv mysql-5.7.28 /usr/local/

检查mysql组和⽤户是否存在,如果没有则创建
创建用户
在这里插入图片描述
安装数据库
创建data⽬录

cd /usr/local/mysql-5.7.28
mkdir data

将/usr/local/mysql-5.7.28的所有者及所属组改为mysql

chown -R mysql.mysql /usr/local/mysql-5.7.28

在/usr/local/mysql-5.7.28/support-files⽬录下创建my_default.cnf

cd /usr/local/mysql-5.7.28/support-files
vim my_default.cnf

在这里插入图片描述

[mysqld]

#设置mysql的安装⽬录
basedir =/usr/local/mysql-5.7.28
#设置mysql数据库的数据存放⽬录
datadir = /usr/local/mysql-5.7.28/data
#设置端⼝
port = 3306

socket = /tmp/mysql.sock
#设置字符集
character-set-server=utf8
#⽇志存放⽬录
log-error = /usr/local/mysql-5.7.28/data/mysqld.log
pid-file = /usr/local/mysql-5.7.28/data/mysqld.pid
#允许时间类型的数据为零(去掉NO_ZERO_IN_DATE,NO_ZERO_DATE)
sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
#ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

拷⻉配置⽂件,是否覆盖,是

cp my_default.cnf /etc/my.cnf

初始化Mysql

./bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql-5.7.28/ --datadir=/usr/local/mysql-5.7.28/data/

如果报错:./bin/mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or 就安装libaio,如果没有则跳过

yum install libaio

在这里插入图片描述
初始化完成之后查看⽇志

cat /usr/local/mysql-5.7.28/data/mysqld.log

在这里插入图片描述
把启动脚本放到开机初始化⽬录

cp support-files/mysql.server /etc/init.d/mysql

启动mysql

service mysql start

进⼊mysql并更改密码

cd /usr/local/mysql-5.7.28
./bin/mysql -u root -p 上⾯⽣成的初始化密码
mysql> set password=password('123456');
mysql> grant all privileges on *.* to root@'%' identified by '123456';
mysql> flush privileges;

添加远程访问权限

mysql> use mysql;
mysql> update user set host='%' where user = 'root';
mysql> flush privileges;

如果更改时报错:ERROR 1062 (23000): Duplicate entry ‘%-root’ for key ‘PRIMARY’,就先查询⼀下是否已更改,最后执⾏刷新。
重启mysql⽣效

service mysql restart

3 安装JDK

yum安装很⽅便,实在是懒得⼀直拷⻉安装包了。
安装⽅法

yum install java-1.8.0-openjdk.x86_64

查找jdk安装的位置

[root@localhost]# which java
/bin/java
[root@localhost]# ls -l /bin/java
lrwxrwxrwx. 1 root root 22 Mar 22 01:01 /bin/java -> /etc/alternatives/java
[root@localhost]# ls -l /etc/alternatives/java
lrwxrwxrwx. 1 root root 73 Mar 22 01:01 /etc/alternatives/java ->
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.242.b08-0.el7_7.x86_64/jre/bin/java

配置JAVA_HOME

vi /etc/profile

最后⼀⾏加⼊

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.242.b08-
0.el7_7.x86_64/jre
export PATH=$PATH:$JAVA_HOME/bin

配置⽣效

source /etc/profile

4 安装Nginx

安装所需环境
Nginx 是 C语⾔ 开发,先安装相关依赖包
⼀. gcc 安装
安装 nginx 需要先将官⽹下载的源码进⾏编译,编译依赖 gcc 环境,如果没有 gcc 环境,则需要安装:

yum install gcc-c++

⼆. PCRE pcre-devel 安装
PCRE(Perl Compatible Regular Expressions) 是⼀个Perl库,包括 perl 兼容的正则表达式库。nginx 的http 模块使⽤ pcre 来解析正则表达式,所以需要在 linux 上安装 pcre 库,pcre-devel 是使⽤ pcre 开发的⼀个⼆次开发库。nginx也需要此库。命令:

yum install -y pcre pcre-devel

三. zlib 安装
zlib 库提供了很多种压缩和解压缩的⽅式, nginx 使⽤ zlib 对 http 包的内容进⾏ gzip ,所以需要在Centos 上安装 zlib 库。

yum install -y zlib zlib-devel

四. OpenSSL 安装
OpenSSL 是⼀个强⼤的安全套接字层密码库,囊括主要的密码算法、常⽤的密钥和证书封装管理功能及SSL 协议,并提供丰富的应⽤程序供测试或其它⽬的使⽤。
nginx 不仅⽀持 http 协议,还⽀持 https(即在ssl协议上传输http),所以需要在 Centos 安装OpenSSL 库

yum install -y openssl openssl-devel

官⽹下载
1.直接下载 .tar.gz 安装包,地址:https://nginx.org/en/download.html
在这里插入图片描述解压
依然是直接命令:

tar -zxvf nginx-1.18.0.tar.gz
cd nginx-1.18.0

配置
其实在 nginx-1.18.0 版本中你就不需要去配置相关东⻄,默认就可以了。当然,如果你要⾃⼰配置⽬录也是可以的。
1.使⽤默认配置

./configure

2.⾃定义配置(不推荐)

./configure \
--prefix=/usr/local/nginx \
--conf-path=/usr/local/nginx/conf/nginx.conf \
--pid-path=/usr/local/nginx/conf/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi

注:将临时⽂件⽬录指定为/var/temp/nginx,需要在/var下创建temp及nginx⽬录
编译安装

make
make install

查找安装路径:

whereis nginx

启动、停⽌nginx

cd /usr/local/nginx/sbin/
./nginx
./nginx -s stop
./nginx -s quit
./nginx -s reload

5 Nacos持久化配置

拷⻉nacos-server-1.4.1.tar.gz,解压到/user/local/nacos下

tar -zxvf nacos-server-1.4.1.tar.gz -C /usr/local

创建nacos数据库,导⼊nacos\conf\nacos-mysql.sql脚本
修改conf\application.properties配置⽂件,如下:

#*************** Config Module Related Configurations ***************#
### If use MySQL as datasource:
spring.datasource.platform=mysql
### Count of DB:
db.num=1
### Connect URL of DB:
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?
characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=tru
e&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=123456
### Connection pool configuration: hikariCP
db.pool.config.connectionTimeout=30000
db.pool.config.validationTimeout=10000
db.pool.config.maximumPoolSize=20
db.pool.config.minimumIdle=2

让3个Nacos节点都使⽤同⼀个数据源
修改nacos\conf\cluster⽂件:

10.0.2.15:8848
10.0.2.15:8849
10.0.2.15:8850

拷⻉2个nacos,修改端⼝号

server.port=8849

在这里插入图片描述
从之前Nacos导⼊配置,修改如下:
在这里插入图片描述

6 Nginx反向代理配置

修改/usr/local/nginx/conf配置如下:

#gzip on;
 upstream nacos_cluster {
 server 127.0.0.1:8848;
 server 127.0.0.1:8849;
 server 127.0.0.1:8850;
 }
 server {
 listen 1111;
 server_name localhost;
 location / {
 proxy_pass http://nacos_cluster;
 proxy_set_header Host $host:$server_port;
 }
 }

在这里插入图片描述

7 配置⽂件

spring:
 cloud:
   nacos:
     config:
       server-addr: 192.168.56.110:1111
       file-extension: yaml
       extension-configs[0]:
         data-id: common.yaml
         refresh: true

在这里插入图片描述
运⾏测试,关闭⼀个Nacos节点,测试⾼可⽤,Nacos其他两个节点依然可⽤

App inventor2通过蓝牙控制Arduino Uno LED开关 App inventer2控制Arduino Uno LED开关 如果学会这个小程序,大部分的手机通过蓝牙控制Arduino的功能都可以实现,这个小示例是通过蓝牙模块向Arduino发送"0"和"1",而其它功能要发送其它不同的字符串内容给Arduino. 所需硬件: Arduino Uno JDY-16 蓝牙模块(我的是蓝牙4.2版本) 草帽LED(可选) 手机(我用的是安卓,苹果手机应该也可以,最近其应用商店也有App inventor(AI)伴侣) 软件: Aduino IDE或者Platfom 阅读详情

相关推荐

ETL数据集成案例

一个典型的ETL数据集成案例是将多个来源的数据合并成一个数据集。假设有一个公司,该公司使用一些不同的系统来存储不同部门的数据,例如销售数据存储在一个CRM系统中,财务数据存储在一个ERP系统中,人力资源数据存储在一个HR系统中。为了更好地进行报告和分析,该公司决定将所有这些数据集成到一个数据仓库中。以下是实现这一目标的ETL过程的步骤:提取(Extract):首先,需要从每个系统中提取所需的数据。每个系统可能有不同的数据格式和结构,因此需要编写不同的提取程序或查询来提取数据。

runqu的博客 948

Nacos应用场景

Nacos(前身为阿里巴巴的Nacos Config和Nacos Discovery)是一个开源的分布式服务发现和配置管理系统,它具有广泛的应用场景,特别适用于微服务架构和容器化应用。总之,Nacos是一个功能强大的工具,适用于构建和管理现代化的分布式、微服务化和容器化应用程序。它为应用程序的发现、配置和管理提供了一种集中且可扩展的解决方案。

极客神殿 1559

【Apollo学习笔记】——规划模块TASK之SPEED_HEURISTIC_OPTIMIZER

在Apollo星火计划学习笔记——Apollo路径规划算法原理与实践与【Apollo学习笔记】——Planning模块讲到……Stage::Process的函数会依次调用task_list中的TASK,本文将会继续以LaneFollow为例依次介绍其中的TASK部分究竟做了哪些工作。由于个人能力所限,文章可能有纰漏的地方,还请批评斧正。在配置文件中,我们可以看到LaneFollow所需要执行的所有task。本文将继续介绍LaneFollow的第10个TASK——动态规划规划目标加速度尽可能小。

sinat_52032317的博客 3425

nacos 使用文档

文章目录什么是 Nacos概览什么是 Nacos?nacos server 准备nacos 作为注册中心,在 springboot 使用0 前置条件1 依赖引入2 @EnableDiscoveryClient 开启3 新增配置4 效果5 更多关于 nacos 注册中心nacos 作为配置中心,在 springboot 使用1 依赖引入2 新增配置3 在配置中心添加相关配置文件4 注意事项5 更多关...

渐行渐远 的博客 4421

CentOS 9 Stream 上安装 MySQL 8.0+

根据提示进行设置,包括设置新的 root 密码、禁用远程 root 登录等。MySQL 在首次安装时会生成一个临时密码。这样就完成了 MySQL 8.0.37 的安装。这将安装最新的 MySQL 8.0 版本。

小强不是坑 1679

STM32F103+AX58100 EtherCAT从站SPI移植实战:CubeMX配置避坑指南

本文详细介绍了STM32F103与AX58100 EtherCAT从站控制器的SPI接口移植实战,重点解析CubeMX配置中的关键参数与常见陷阱。内容涵盖硬件连接规范、SPI模式设置、中断优先级规划及协议栈对接技巧,帮助开发者高效实现工业自动化领域的实时通信方案。特别强调CPOL/CPHA配置与AX58100的匹配要求,避免数据错位问题。

weixin_29230865的博客 330

Nacos的应用

综上所述,Nacos作为一个开源的分布式服务发现和配置管理平台,具有服务发现和注册、配置管理、动态配置和负载均衡等重要功能,适用于微服务架构、云原生应用和分布式系统等不同场景。使用Nacos可以方便地实现服务化管理和运维,并提升系统的稳定性和可靠性。

chen_xiayu的博客 584

Virtuoso ADE Explorer实战技巧:从基础操作到高级仿真

本文深入解析了Virtuoso ADE Explorer在模拟电路仿真中的核心价值与实战技巧。作为Cadence平台的专业工具,它专为高效、系统化的设计空间探索而生,能大幅提升PVT验证、参数扫描和蒙特卡洛分析的效率。文章从基础界面操作、并行仿真管理,到高级的参数扫描、数据报告生成及蒙特卡洛结果深度剖析,提供了全面的避坑指南与工作流优化建议,帮助工程师从重复劳动中解放,专注于电路设计与性能优化。

ios99的博客 898

Nacos的概述与简单应用

Nacos的概述与简单应用

weixin_62661659的博客 1124

LeRobot 入门教程(七)数据集

LeRobot Dataset v3.0 是机器人学习数据的标准化格式,支持多模态时间序列数据和视频的统一访问。该版本通过基于文件的存储(Parquet/MP4)、关联元数据和Hub原生流式处理等新特性,显著提升了性能并降低了存储开销。文档详细介绍了格式设计、安装使用、数据记录与加载方法,以及从v2.1迁移到v3.0的步骤,特别针对大型数据集(如DROID 1.0.1)的处理提供了SLURM集群移植方案。v3.0通过优化文件组织和元数据管理,实现了更快的加载速度、更高的内存效率和更好的可扩展性。

2506_90492529的博客 2052

YOLO模型在STM32微控制器上的部署:1.98M参数如何塞进嵌入式设备?

<think>我们根据内容生成不超过150字的摘要。内容主要是关于YOLO模型在STM32微控制器上的部署,包括STM32N6 NPU、模型量化、工具链、开源方案和架构设计。摘要需要简洁概括主要点。 字数限制:≤150字。需要包含关键信息:STM32N6运行YOLO,困难,方案(NPU、INT8量化、工具链),性能(34 FPS 9.4mJ)。结尾可能提到开源和生态。 写中文摘要。注意不超过150字。</think>本文探讨YOLO模型在STM32微控制器上的部署。集成NPU的STM32N6搭配轻量化YOL

2601_95807009的博客 255

Nacos简介

Nacos简介 背景:当我们需要将微服务中不同模块之间实现服务调用时,我们需要使用到远程调用的 1、Nacos概述 1.1 什么是Nacos Nacos 是阿里巴巴推出来的一个新开源项目,这是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。 Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。 Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应

qq_51726114的博客 16万+

沙猫群优化算法(SCSO)详解:从沙漠生存智慧到全局优化引擎

本文详细介绍了沙猫群优化算法(SCSO),这是一种新型元启发式优化算法,灵感来源于沙猫在沙漠环境中的卓越狩猎行为。SCSO通过模拟沙猫的低频探测能力和精确攻击策略,将优化问题转化为搜索和捕获"猎物"的过程。算法核心包括探索阶段(全局搜索)和开发阶段(局部精细搜索),通过灵敏度范围模型和自适应控制参数实现两者的平衡。SCSO具有参数简单、收敛性能好等优点,适用于解决复杂全局优化问题。

qq_42212808的博客 200

【Nacos入门到实战二】Nacos配置管理:Nacos简介

在深入了解Nacos的配置管理之前,首先需要对Nacos整体架构和功能模块有一个系统性的理解。本文将详细介绍Nacos的基本概念、架构设计、功能模块以及它在微服务体系中的核心作用。通过学习本篇内容,读者将能够理解Nacos为何能够成为微服务治理的利器,并为后续使用Nacos做服务注册、配置管理和集群部署打下坚实的理论基础。Nacos,全称为,是阿里巴巴开源的一款专注于动态服务发现、配置管理和服务治理的微服务管理平台。

私聊前往站内信:https://i.youkuaiyun.com/#/msg/chat/weixin_44976692 1万+

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Nacos简介(一)

Nacos 支持几乎所有主流类型的服务的发现、配置和服务管理平台,提供「注册中心配置中心和动态 DNS 服务」三大功能。能够无缝对接Springcloud、Spring、Dubbo等流行框架。

拾一二的博客 5万+

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Nacos——Nacos简介以及Nacos Server安装

Nacos事阿里的一个开源产品,针对微服务架构中的服务发现、配置管理、服务治理的综合型解决方案。1.1四大功能:①服务发现与服务健康检查Nacos使服务更容易注册,并通过DNS或HTTP接口发现其他服务,Nacos还提供服务的实时健康检查,以防止向不健康的主机或服务实例发送请求。②动态配置管理动态配置服务允许您在所有环境中以集中和动态的方式管理所有服务的配置。Nacos消除了在更新配置时重新部署应用程序,这使配置的更改更加高效和灵活。③动态DNS服务Nacos提供基于DNS。

weixin_51351637的博客 9586

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Nacos简介和原理

Nacos注册中心以及配置中心简介

weixin_37375983的博客 6229

Nacos简介—1.Nacos使用简介

保护阈值,可以设置为0~1之间的比例。如果健康的服务实例比例太低,则把不健康的服务实例也返回服务调用方。此时会有很多请求交给不健康的服务实例来处理,会导致请求失败,但可以避免健康的服务实例出现因为请求流量过大而被压垮的问题。一种是临时的服务实例,一种是持久化的服务实例。临时的服务实例默认会每隔5s上报一次心跳给Nacos,Nacos如果15s没收到心跳就标记该服务实例为不健康,Nacos如果超过30s没收到心跳就摘除这个服务实例。假设有10个服务实例,每个服务实例的极限QPS是700,当前QPS是500。

mjunz的博客 1933

Nacos及其使用

Nacos 是 Dynamic Naming and Configuration Service 的首字母简称,它是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。

WenZhang的博客 1993

Nacos简介、下载与配置持久化到Mysql

场景 什么是Nacos Nacos致力于帮助您发现、配置和管理微服务。Nacos提供了一组简单易用的特性集,帮助您快速实现动态服务发 现、服务配置、服务元数据及流且管理。 Nacos帮助您更敏捷和容易地构建、交付和管理微服务平台。Nacos是构建以“服务’‘为中心的现代应用架构(例 如微服务范式、云原生范式)的服务基础设施。 Nacos全景图 博客:https://blog.youkuaiyun.com/badao_liumang_qizhi 关注公众号 霸道的程序猿 获取编程相关电子书、教程推送与免.

BADAO_LIUMANG_QIZHI的博客 1万+
上一篇: 解决springboot项目访问接口出现404项目(Nacos项目)
下一篇: Sentinel的基本使用案例
凌晨里的无聊人
博客等级 码龄8年 2320粉丝 206原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凌晨里的无聊人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值