Spring Cloud Nacos使用总结

news2024/11/25 3:40:52

 

目录

安装Nacos服务器

服务发现与消费

服务发现与消费-添加依赖

服务发现-配置文件

服务发现-注解

服务发现-Controller

服务消费-配置文件

服务消费-注解与Ribbon消费代码

服务消费-运行

配置管理

配置管理-添加依赖

配置管理-配置文件

配置管理-注解

配置管理-加入配置1

配置管理-加入配置2

配置管理-切换不同环境

DatalD方案

Group方案

Namespace空间方案

单机模式支持mysql

linux版本安装+集群配置

linux安装

更改Nacos启动命令配置原理

集群配置

Linux服务器上Mysql数据库配置

Linux服务器上Nacos的集群配置cluster.conf

编辑Nacos的启动脚本startup.sh

Nginx配置

测试启动

启动Nacos

启动Nginx

集群添加配置

配置微服务为Linux版Nacos集群并注册进Nacos


安装Nacos服务器

Nacos 快速开始

下载软件包,然后sh startup.sh -m standalone即可

服务发现与消费

Nacos Spring Cloud 快速开始

服务发现与消费-添加依赖

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    <version>${latest.version}</version>
</dependency>

注意:版本 2.1.x.RELEASE 对应的是 Spring Boot 2.1.x 版本。版本 2.0.x.RELEASE 对应的是 Spring Boot 2.0.x 版本,版本 1.5.x.RELEASE 对应的是 Spring Boot 1.5.x 版本。

该依赖对生产者和消费者都适用

更多版本对应关系参考:版本说明 Wiki

服务发现-配置文件

配置服务提供者,从而服务提供者可以通过 Nacos 的服务注册发现功能将其服务注册到 Nacos server 上。

在 application.properties 中配置 Nacos server 的地址:

server.port=8070
spring.application.name=service-provider

spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

或者bootstrap.yaml 中配置 Nacos server 的地址和应用名

server:
  port:9001

spring:
  cloud:
    nacos:
      config:
        server-addr: 192.168.29.1:8848
        file-extension: yaml
   
  application:
    name: nacos-p

之所以需要配置 `spring.application.name` ,是因为它是构成 Nacos 配置管理 `dataId`字段的一部分。

在 Nacos Spring Cloud 中,`dataId` 的完整格式如下:

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

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

`spring.profiles.active` 即为当前环境对应的 profile,详情可以参考 [Spring Boot文档](https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-profiles.html#boot-features-profiles)。 **注意:当 `spring.profiles.active` 为空时,对应的连接符 `-` 也将不存在,dataId 的拼接格式变成 `${prefix}.${file-extension}`

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

服务发现-注解

通过 Spring Cloud 原生注解 @EnableDiscoveryClient 开启服务注册发现功能:

@SpringBootApplication
@EnableDiscoveryClient
public class NacosProviderApplication {

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

	@RestController
	class EchoController {
		@RequestMapping(value = "/echo/{string}", method = RequestMethod.GET)
		public String echo(@PathVariable String string) {
			return "Hello Nacos Discovery " + string;
		}
	}
}

服务发现-Controller

@RestController
@RefreshScope
public class MainController {

    @Value("${xxoo}")
    private String userName;

    @RequestMapping("/hello")
    public String hello() {
        return "hello+:" + userName;
    }
}

@RefreshScope注解能帮助我们做局部的参数刷新,但侵入性较强,需要开发阶段提前预知可能的刷新点,并且该注解底层是依赖于cglib进行代理

注意:服务启动前要先启动Nacos!!

服务消费-配置文件

在 application.properties 中配置 Nacos server 的地址:

server.port=8080
spring.application.name=service-consumer

spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

服务消费-注解与Ribbon消费代码

通过 Spring Cloud 原生注解 @EnableDiscoveryClient 开启服务注册发现功能。给 RestTemplate 实例添加 @LoadBalanced 注解,开启 @LoadBalanced 与 Ribbon 的集成:

@SpringBootApplication
@EnableDiscoveryClient
public class NacosConsumerApplication {

    // 注意:这里生成resttemplate
    @LoadBalanced
    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

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


@RestController
public class TestController {

	private final RestTemplate restTemplate;

	@Autowired
	public TestController(RestTemplate restTemplate) {this.restTemplate = restTemplate;}

	@RequestMapping(value = "/echo/{str}", method = RequestMethod.GET)
	public String echo(@PathVariable String str) {
		return restTemplate.getForObject("http://service-provider/echo/" + str, String.class);
	}
}

restTemplate.getForobject(arg1, arg2, arg3...);

第一个参数url表示被调用的目标Rest接口位置

1. url的第一部分是在Nacos中注册的服务提供者名称,如果多个服务提供者注册相同名称, Ribbon会自动寻找其中一个服务提供者并且调用接口方法。这个就是负载均衡功能。

2.url后半部是控制器的请求路径。

第二个参数是返回值类型

1. JavaBean类型或者JavaBean数组类型,如果控制器返回的是List集合,需要使用数组类型接收。

第三个参数是可变参数

1.是传递给url的动态参数,使用参数时候需要在url上需要使用(1)、(2)、(3)进行参数占位,这样传递的参数就会自动替换占位符。 

nacos自带了ribbon,所以不用别的配置!

服务消费-运行

启动 ProviderApplication 和 ConsumerApplication ,调用 http://localhost:8080/echo/2018,返回内容为 Hello Nacos Discovery 2018

配置管理

配置管理-添加依赖

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    <version>${latest.version}</version>
</dependency>

注意:版本 2.1.x.RELEASE 对应的是 Spring Boot 2.1.x 版本。版本 2.0.x.RELEASE 对应的是 Spring Boot 2.0.x 版本,版本 1.5.x.RELEASE 对应的是 Spring Boot 1.5.x 版本。

更多版本对应关系参考:版本说明 Wiki

配置管理-配置文件

在 bootstrap.properties 中配置 Nacos server 的地址和应用名

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

spring.application.name=example

说明:之所以需要配置 spring.application.name ,是因为它是构成 Nacos 配置管理 dataId字段的一部分。

在 Nacos Spring Cloud 中,dataId 的完整格式如下:

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

例如xxx(spring的application的名字)-dev/test(如果没配就没有).properties/yaml

例如my-producer-dev.yaml

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

可以在application.properties里面设置spring.profiles.active=dev或者test等等

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

可以在boostrap.properties里配置spring.cloud.nacos.config.file-extension=yaml或者properties

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

配置管理-注解

启动类要加入EnableDiscoveryClient注解

通过 Spring Cloud 原生注解 @RefreshScope 实现配置自动更新

@RestController
@RequestMapping("/config")
@RefreshScope
public class ConfigController {

    @Value("${useLocalCache:false}")
    private boolean useLocalCache;

    @RequestMapping("/get")
    public boolean get() {
        return useLocalCache;
    }
}

配置管理-加入配置1

首先通过调用 Nacos Open API 向 Nacos Server 发布配置:dataId 为example.properties,内容为useLocalCache=true

curl -X POST "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=example.properties&group=DEFAULT_GROUP&content=useLocalCache=true"

运行 NacosConfigApplication,调用 curl http://localhost:8080/config/get,返回内容是 true。

再次调用 Nacos Open API 向 Nacos server 发布配置:dataId 为example.properties,内容为useLocalCache=false

curl -X POST "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=example.properties&group=DEFAULT_GROUP&content=useLocalCache=false"

再次访问 http://localhost:8080/config/get,此时返回内容为false,说明程序中的useLocalCache值已经被动态更新了。

配置管理-加入配置2

配置管理-切换不同环境

DatalD方案

1.指定spring.profile.active和配置文件的DatalD来使不同环境下读取不同的配置,配置规则:默认空间+新建dev和test两个Datald:

a 新建dev配置DatalD (已经创建完成)

b 新建test配置DatalD

 

 2.通过spring.profile.active属性就能进行多环境下配置文件的读取

 

3 配置文件弄多个,然后修改active属性,即可切换到对应配置文件 

Group方案

根据之前的讲解我们都知道Group为分组默认是: DEFAULT_GROUP,所以现在我们就需要分出两组】一组是"Dev开发组",一组是“test测试组”

1.新建Group

DEV_GROUP

建立TEST_GROUP分组,同名的文件nacos-config-client-info.yaml 

2.完成以上配置以后,接下来就需要通过bootstrap+application来配合完成,具体方式:

在config下增加一条Group的配置即可,可以配置为DEV_GROUP或TEST_GROUP

bootstrap:

 application

注意:刚刚将profile改成info了,这个之后就不用变了

3 配置文件弄多个,同名,group不同,修改bootstrap的group属性,即可切换配置文件

Namespace空间方案

我们已经把DatalD方案和Group方案完成了,然后接下来我们来看一下Namespace (命名空间)方案,默认此方案为public,此方案不能删除,我们现在来新建两个命名空间方案

1 新建dev/test的命名空间

2 服务管理-服务列表页面查看

此时我们就可以切换对应的命名空间,然后再通过Group和DatalD来进行切换,如果想要切换命名空间,我们就需要通过命名空间ID来进行切换 

2. 按照域名配置(Namespace+Group+Datald)编写

先通过namespace命名空间ID来确认使用的命名空间 

单机模式支持mysql

在0.7版本之前,在单机模式时nacos使用嵌入式数据库实现数据的存储,不方便观察数据存储的基本情况。0.7版本增加了支持mysql数据源能力,具体的操作步骤:

1.安装数据库,版本要求:5.6.5+

2.初始化mysql数据库,数据库初始化文件:mysql-schema.sql

注意:先创建数据库nacos_config,然后在里面执行sql

 

3.修改nacos自己目录的conf/application.properties文件,增加支持mysql数据源配置(目前只支持mysql),添加mysql数据源的url、用户名和密码。

spring.datasource.platform=mysql

db.num=1
db.url.0=jdbc:mysql://11.162.196.16:3306/nacos_devtest?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=nacos_devtest
db.password=youdontknow

再以单机模式启动nacos,nacos所有写嵌入式数据库的数据都写到了mysql

这里表示更改Nacos数据库为本机MySql数据库

注意:这里需要注意几个点,一个是url地址需要改,另外数据库的用户和密码也需要更改,同时还有一个是官网上在db.url.0=jdbc:mysql这个属性上少了一个属性为serverTimezone=UTC需要我们手动添加l

测试

重启Nacos服务,此时之前所创建的Namespace+Group+DatalD将全部消失,因为这些数据是保存在之前Nacos内嵌的derby数据库中,现在使用的是本地的MySql数据库,此时我们可以添加配置测试,在查看数据库nacos_config中的config_info表,此时就会有新添加的配置内容

linux版本安装+集群配置

Nacos生产环境下需要搭建集群配置,那么这里我们预计需要: 1个Nginx+3个Nacos注册中心+1个Mysql(对nginx和mysql进行简化)

 

 

linux安装

1.在官网下载NacosLinux版本: https://github.com/alibaba/nacos/releases

 ​​​​​​​2.在Linux系统中解压此文件,并且把其中nacos目录拷贝到mynacos目录中

tar -zxvf nacos-server-2.0.3.tar.gz

3.打开nacos目录下的bin目录输入命令即可执行

sh startup.sh

更改Nacos启动命令配置原理

我们现在知道,想要启动Naocs只需要启动startup.sh命令即可,但是如果启动3个Nacos那?所以如果我们需要启动多个Nacos,就需要自行修改startup命令

集群配置

Linux服务器上Mysql数据库配置

1.在Linux系统上执行SQL脚本,具体位置在nacos目录下的conf中,这里的操作和之前是一样的,我们可以直接打开这个文件然后拷贝到数据库中执行,当然也是要创建数据库使用数据库然后在复制脚本内容,执行即可

create database nacos_config;

use nacos_config; 

2.修改application.properties配置文件,但是修改之前我们最好做一个备份。

cp application.properties application.properties.init

3.这里的修改和我们之间的在win上的修改是完全一样的,所以我们只要打开这个文件,加上对应的内容即可

spring.datasource.platform=mysql

db.num=1

db.ur1.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&serverTimezone=UTCl

db.user=root

db.password=123456

Linux服务器上Nacos的集群配置cluster.conf

1.这里开始正式配置集群,首先我们要更改cluster.conf这个配置文件,当然我们也需要备份,但是这里它的原始名称为: cluster.conf.example,我们需要把它保留同时复制出一个cluster.conf来进行更改

cp cluster.conf.example cluster.conf

2.具体配置内容,这里我们在配置集群的时候不能直接写127.0.0.1这样,这样分不清楚,所以我们需要知道具体的IP地址,我们可以通过:

在conf文件里,写入3个服务器对应的ip地址和端口号

ifconfig -a   查看具体ip地址

 

编辑Nacos的启动脚本startup.sh

1,编辑这个脚本的目的,是为了能够让我们在使用此命令启动的时候传入对应的端口号参数,这样携带着具体端口号参数的启动就能启动具体的Nacos节点了,此脚本的为止在/nacos/bin中

2.核心点:传递不同的端口号启动不同的nacos实例,命令:

./startup.sh-p 3333

表示启动端口号为3333的nacos服务器实例,这里要和config保持一直。

3. 具体修改,依旧要备份:cp startup.sh starup.sh.bk 

修改对应的配置文件为红框的部分(原来是没有port的那些东西)

 

Nginx配置

1.我们需要找到Nginx的配置文件,然后做备份

cd /usr/local/nginx

cp nginx.conf nginx.conf.bk

2. 修改nginx.conf

修改成下面红框那样,监听1111端口

 

测试启动

启动Nacos

1.这里注意,我们在启动之前必须要保证JDK环境变量配置好,同时保证以上配置没有问题,具体启动命令:

./startup.sh -o 3333

./startup.sh -o 4444

./startup.sh -o 5555

2.启动完成之后我们需要通过如下指令来测试Nacos集群是否正常启动,数量为3

ps -eflgrep nacos|grep -v grep Iwc -1 

3 访问具体地址 xxx.xxx.xxx.xxx:3333/nacos,出现即可

启动Nginx

1.首先进入到Nginx目录下,启动Nginx,同时要带着我们设置过得配置文件启动

cd /usr/local/nginx/sbin

./nginx -c /usr/local/nginx/conf/nginx.conf

2.通过访问Nginx来测试是否能够访问到Nacos,在win系统浏览器网址上输入:

192.168.124.133:1111/nacos

集群添加配置

1.在Nacos平台上添加配置

 

 

2. 在数据库中检查是否有这一条配置,如果有表示成功添加

配置微服务为Linux版Nacos集群并注册进Nacos

1.我们以9002为例,此时我们要修改application.yaml文件,把之前的Nacos端口换成Nacos集群 

2,配置完成启动服务,我们就可以在Naocs平台上看贝对应的微服务了,此时表示服务注册成功 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Raft一致性算法(精简和扩展)

raft一致性算法 文章目录raft一致性算法一、raft简介1.1 raft涉及到的名词1.2 Rpc请求1.3 复制状态机二、raft⼀致性算法2.0 摘要2.0.1 所有服务器需遵守的规则2.0.2 跟随者2.0.3 候选⼈2.0.4 领导人2.0.5 状态2.0.6 特性2.1 raft基础2.2 leader选举2.2.1 集群启动时选举2.2.2 …

微电网两阶段鲁棒优化经济调度方法(Python代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

清华大学ChatGLM-6B部署运行

一、模型介绍 开源项目&#xff1a; GitHub - THUDM/ChatGLM-6B: ChatGLM-6B&#xff1a;开源双语对话语言模型 | An Open Bilingual Dialogue Language Model ChatGLM-6B 是一个开源的、支持中英双语的对话语言模型&#xff0c;基于 General Language Model (GLM) 架构&…

PLC高精度定时器(T法测速功能块)

S7-200 SMART PLC时间间隔指令BGN_ITIME,和CAL_ITIME采用的是系统自带的1ms高精度定时器,PLC里只能调用一次。T法测速和M法测速应用时,都需要高精度时序定时器的支持(当然你也可以采用定时中断的方式获取高精度时序),时间间隔指令请参看下面的博客文章: SMART PLC时间间…

keil5使用c++编写stm32控制程序

keil5使用c编写stm32控制程序一、前言二、配置图解三、std::cout串口重定向四、串口中断服务函数五、结尾废话一、前言 想着搞个新奇的玩意玩一玩来着&#xff0c;想用c编写代码来控制stm32&#xff0c;结果在keil5中&#xff0c;把踩给我踩闷了&#xff0c;这里简单记录一下。…

FlinkSQL的Watermark机制和Checkpoint机制

Watermark机制 Watermark机制&#xff0c;就是水印机制&#xff0c;也叫做水位线机制。就是专门用来解决流式环境下数据迟到问题的。 MonotonousWatermark&#xff08;单调递增水印&#xff09; package day05;import lombok.AllArgsConstructor; import lombok.Data; impor…

【谷粒商城之JSR303数据校验和集中异常处理】

本笔记内容为尚硅谷谷粒商城JSR303数据校验和集中异常处理部分 目录 一、简介 二、SR303数据校验使用步骤 1、引入依赖 2、给参数对象添加校验注解 常见的注解 3、接口参数前增加Valid 开启校验 三、异常的统一处理 四、分组解决校验 1、创建Groups 2、添加分组 …

MySQL数据库之表的增删改查(进阶)

目录1. 数据库约束1.1 约束类型1.2 NULL约束1.3 UNIQUE&#xff1a;唯一约束1.4 DEFAULT&#xff1a;默认值约束1.5 PRIMARY KEY&#xff1a;主键约束1.6 FOREIGN KEY&#xff1a;外键约束1.7 CHECK约束2 表之间的关系2.1 一对一2.2 一对多2.3 多对多3 新增4 查询4.1 聚合查询4…

Redis一致性问题

&#xff08;1&#xff09;何为一致性&#xff1f; 1、定义&#xff1a; 指系统中各节点数据保持一致。 分布式系统中&#xff0c;可以理解为多个节点中的数据是一致的。 2、分类&#xff1a; 强一致性&#xff1a;写进去的数据是什么&#xff0c;读出来的数据就是什么。弱一…

DeepSpeed-Chat:最强ChatGPT训练框架,一键完成RLHF训练!

https://github.com/microsoft/DeepSpeedExamples/tree/master/applications/DeepSpeed-Chat 一个快速、负担得起、可扩展和开放的系统框架&#xff0c;用于实现端到端强化学习人类反馈 (RLHF) 培训体验&#xff0c;以生成各种规模的高质量 ChatGPT 样式模型。 目录 &#x…

计算机体系结构-体系结构基础与流水线原理

计算机体系结构&#xff1a;体系结构基础与流水线原理 ​ 计算机体系结构&#xff1a;量化设计与分析一书以RISC-V为例介绍计算机体系结构。本文为第一部分&#xff0c;介绍体系结构的基本知识和流水线原理。笔记内容为原书的第一章&#xff0c;附录A、B、C。 第一章 量化设计…

练习Tomcat

文章目录1. 简述静态网页和动态网页的区别。2. 简述 Webl.0 和 Web2.0 的区别。3. 安装tomcat8&#xff0c;配置服务启动脚本&#xff0c;部署jpress应用。1. 简述静态网页和动态网页的区别。 静态网页&#xff1a; &#xff08;1&#xff09;静态网页不能简单地理解成静止不…

SCADE Display(OpenGL)软件设计文档生成工具的设计考虑

SCADE Display&#xff08;OpenGL&#xff09;软件设计文档生成工具的设计考虑 2018年6月 1 引言 本文档描述在SCADE Display软件设计文档生成工具&#xff08;以下简称为SDYSDDGEN&#xff09;的设计过程中考虑到的一些问题及其解决方案。 2 目标 SDYSDDGEN的目标设定为&…

面向对象程序设计 C++总结笔记(1)

面向对象程序设计 学习方法 理解基本原理掌握程序设计方法加强动手实践 课程目标 理解面向对象程序设计的基本原理&#xff0c;掌握面向对象技术的基本概念和封装性、继承性和多态性&#xff0c;能够具有面向对象程序设计思想。掌握C语言面向对象的基本特性和C语言基础知识&…

就在20号!袋鼠云春季生长大会邀您共观数智生机,我们云上见

如今&#xff0c;数字经济正逐步走向深化应用、规范发展、普惠共享的新阶段&#xff0c;数字经济与实体经济深度融合、基础软件国产化替代成为数字时代主潮流。 「 2023 袋鼠云春季生长大会」乘风而起&#xff0c;带您走近大数据基础软件——数栈&#xff0c;低代码数字孪生世界…

Hadoop之Yarn篇

目录 ​编辑 Yarn的工作机制&#xff1a; 全流程作业&#xff1a; Yarn的调度器与调度算法&#xff1a; FIFO调度器&#xff08;先进先出&#xff09;&#xff1a; 容量调度器&#xff08;Capacity Scheduler&#xff09;&#xff1a; 容量调度器资源分配算法&#xff1…

【面试题】对 JSON.stringify()与JSON.parse() 理解

大厂面试题分享 面试题库 前后端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★ 地址&#xff1a;前端面试题库 web前端面试题库 VS java后端面试题库大全 重新学习这两个API的起因 在本周五有线上的项目&#xff0c;16:30开始验证线上环境。 开始…

【数据挖掘与商务智能决策】第十一章 AdaBoost与GBDT模型

11.1 AdaBoost模型简单代码实现 1.AdaBoost分类模型演示 from sklearn.ensemble import AdaBoostClassifier X [[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]] y [0, 0, 0, 1, 1]model AdaBoostClassifier(random_state123) model.fit(X, y)print(model.predict([[5, 5]]))[0…

使用 Urch 让 Ubuntu 原生远程控制功能稳定可靠

有些时候&#xff0c;使用远程控制能够简化不少运维和操作的事情。 本篇文章分享如何通过开源工具 “Urch&#xff08;Ubuntu Remote Control Helper&#xff09;” 让 Ubuntu 原生的远程控制&#xff08;远程桌面&#xff09;功能稳定可靠。 方案已经经过 Ubuntu 22.04 LTS …

JVM之低延迟垃圾收集器

目录 低延迟垃圾收集器 概要 各款收集器的并发情况 Shenandoah收集器 Shenandoah相比G1的改进之处 链接矩阵 定义 优点 Shenandoah收集器的工作过程 Brooks Pointer 转发指针技术 转发指针的优缺点 Shenandoah 性能测试 Shenandoah 总结 ZGC 收集器 ZGC的Region的…