RocketMQ 积压大量消息处理(搬运工模式)

这篇文章是对 https://mp.weixin.qq.com/s/ih6hhTPTAgfT0L6MLObmqA 的学习,主要是针对 RocketMQ 积压大量消息的场景,分享一些排查思路和解决方案。 ...

2025年12月27日 · 1 分钟 · 浅忆

购买了一台OVH KS-LE-C 服务器

最近因为个人需要(性价比还可以),购买了一台OVH的KS-LE-C服务器,用于搭建一些测试环境和个人项目。 唯一缺点,硬盘不是NVME,而是SATA固态,但对于我的使用场景来说,影响不大。 购买过程 本意是想购买KS-LE-B的,但ovh提前进行了放货,并且由于很多人使用了OVH API 脚本挂着抢,导致KS-LE-B根本没见上货,这KS-LE-C还是原价从别人手里收的。 服务器配置 这台服务器的具体配置如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 # ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## # # Yet-Another-Bench-Script # # v2025-04-20 # # https://github.com/masonr/yet-another-bench-script # # ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## # Mon Nov 24 11:35:22 UTC 2025 Basic System Information: --------------------------------- Uptime : 0 days, 1 hours, 16 minutes Processor : Intel(R) Xeon(R) CPU E5-1630 v4 @ 3.70GHz CPU cores : 8 @ 1476.470 MHz AES-NI : ✔ Enabled VM-x/AMD-V : ✔ Enabled RAM : 62.7 GiB Swap : 512.0 MiB Disk : 438.5 GiB Distro : Debian GNU/Linux 13 (trixie) Kernel : 6.12.57+deb13-amd64 VM Type : NONE IPv4/IPv6 : ✔ Online / ✔ Online IPv6 Network Information: --------------------------------- ISP : OVH SAS ASN : AS16276 OVH SAS Host : OVH SAS Location : Roubaix, Hauts-de-France (HDF) Country : France fio Disk Speed Tests (Mixed R/W 50/50) (Partition /dev/sdb3): --------------------------------- Block Size | 4k (IOPS) | 64k (IOPS) ------ | --- ---- | ---- ---- Read | 132.32 MB/s (33.0k) | 170.26 MB/s (2.6k) Write | 132.67 MB/s (33.1k) | 171.15 MB/s (2.6k) Total | 264.99 MB/s (66.2k) | 341.41 MB/s (5.3k) | | Block Size | 512k (IOPS) | 1m (IOPS) ------ | --- ---- | ---- ---- Read | 220.49 MB/s (430) | 227.37 MB/s (222) Write | 232.20 MB/s (453) | 242.52 MB/s (236) Total | 452.70 MB/s (883) | 469.89 MB/s (458) iperf3 Network Speed Tests (IPv4): --------------------------------- Provider | Location (Link) | Send Speed | Recv Speed | Ping ----- | ----- | ---- | ---- | ---- Clouvider | London, UK (10G) | 496 Mbits/sec | 941 Mbits/sec | 3.81 ms Eranium | Amsterdam, NL (100G) | 494 Mbits/sec | 939 Mbits/sec | 9.07 ms Uztelecom | Tashkent, UZ (10G) | 444 Mbits/sec | 885 Mbits/sec | 96.7 ms Leaseweb | Singapore, SG (10G) | 398 Mbits/sec | 779 Mbits/sec | 164 ms Clouvider | Los Angeles, CA, US (10G) | 431 Mbits/sec | 844 Mbits/sec | 141 ms Leaseweb | NYC, NY, US (10G) | 422 Mbits/sec | 838 Mbits/sec | 78.0 ms Edgoo | Sao Paulo, BR (1G) | 409 Mbits/sec | 809 Mbits/sec | 203 ms iperf3 Network Speed Tests (IPv6): --------------------------------- Provider | Location (Link) | Send Speed | Recv Speed | Ping ----- | ----- | ---- | ---- | ---- Clouvider | London, UK (10G) | 489 Mbits/sec | 928 Mbits/sec | 6.28 ms Eranium | Amsterdam, NL (100G) | 487 Mbits/sec | 926 Mbits/sec | 9.04 ms Uztelecom | Tashkent, UZ (10G) | 458 Mbits/sec | 856 Mbits/sec | 96.7 ms Leaseweb | Singapore, SG (10G) | 399 Mbits/sec | 657 Mbits/sec | 164 ms Clouvider | Los Angeles, CA, US (10G) | 433 Mbits/sec | 841 Mbits/sec | 141 ms Leaseweb | NYC, NY, US (10G) | 437 Mbits/sec | 828 Mbits/sec | 77.9 ms Edgoo | Sao Paulo, BR (1G) | 380 Mbits/sec | 776 Mbits/sec | 202 ms Geekbench 6 Benchmark Test: --------------------------------- Test | Value | Single Core | 1364 Multi Core | 4854 Full Test | https://browser.geekbench.com/v6/cpu/15206739 YABS completed in 13 min 20 sec 单核测试分数:1098 多核测试分数:4505 详细结果链接:https://browser.geekbench.com/v5/cpu/23936424

2025年11月20日 · 3 分钟 · 浅忆

基于S3协议对外分享文件权限管理方案

本篇文章以MinIO作为文件服务端,其他基于S3协议的文件服务也一样。 通过接口返回文件地址给前端时,可以结合 S3 的预签名 URL 或 STS(临时凭证) 来实现安全访问。 核心思路 接口返回的文件地址不直接暴露 MinIO 存储路径。 在返回文件地址前,通过后端生成 预签名 URL 或 动态临时凭证。 前端使用该地址访问文件,确保文件访问受到权限和时间限制。 实现方法 1:基于预签名 URL 1.1 后端生成预签名 URL 使用 MinIO 提供的 SDK,在接口中动态生成带有时间限制的预签名 URL,并返回给前端。 Java 示例代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 import io.minio.MinioClient; import io.minio.GetPresignedObjectUrlArgs; import io.minio.http.Method; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; @RestController public class FileController { private final MinioClient minioClient; public FileController() { this.minioClient = MinioClient.builder() .endpoint("https://your-minio-server.com") .credentials("ACCESS_KEY", "SECRET_KEY") .build(); } @GetMapping("/api/getFileUrl") public String getFileUrl(@RequestParam String bucketName, @RequestParam String objectName) { try { // 生成预签名 URL(有效期 1 小时) String url = minioClient.getPresignedObjectUrl( GetPresignedObjectUrlArgs.builder() .method(Method.GET) .bucket(bucketName) .object(objectName) .expiry(60 * 60) // 有效期:1小时 .build() ); return url; } catch (Exception e) { e.printStackTrace(); return "Error generating URL"; } } } 1.2 接口返回示例 前端调用 /api/getFileUrl,后端返回: ...

2025年10月9日 · 2 分钟 · 浅忆

docker login 执行之后的影响

当执行 docker login xxx.xxx.xxx 命令后,Docker 客户端会尝试登录到指定的镜像仓库 xxx.xxx.xxx,并提示输入用户名和密码(如果该仓库需要身份验证)。成功登录后,Docker 会将登录凭证存储在本地(通常在 ~/.docker/config.json 文件中),以便后续操作(如拉取镜像或推送镜像)可以自动使用这些凭证。 对拉取镜像的具体变化 执行 docker login xxx.xxx.xxx 后,拉取镜像时的变化取决于以下几个方面: 访问私有镜像 如果 xxx.xxx.xxx 是一个私有镜像仓库,并且之前没有登录,那么在登录之前尝试拉取该仓库中的私有镜像会失败(通常会收到 unauthorized: authentication required 的错误)。登录成功后,可以拉取该仓库中有权限访问的私有镜像。例如: 1 docker pull xxx.xxx.xxx/my-private-image:latest 在登录后,Docker 会使用存储的凭证自动完成身份验证,拉取过程会顺利进行。 加速镜像拉取(如果它是镜像代理) 如果 xxx.xxx.xxx 是一个镜像加速服务(类似于国内的镜像源,如阿里云、DaoCloud 等),登录后可能会影响从该仓库拉取镜像的速度。许多加速服务会代理 Docker Hub 的官方镜像,登录后可以通过该服务更快地下载镜像。例如: 1 docker pull xxx.xxx.xxx/library/ubuntu:latest 这里假设 xxx.xxx.xxx 代理了 Docker Hub 的 ubuntu 镜像,拉取速度可能会比直接从 registry-1.docker.io(Docker Hub 默认地址)更快,具体取决于网络环境和该服务的性能。 无变化的情况 如果登录后仍然拉取的是其他仓库的镜像(例如默认的 Docker Hub 镜像 ubuntu:latest),并且没有配置 xxx.xxx.xxx 作为镜像源,那么拉取镜像的行为不会有任何变化。登录仅对 xxx.xxx.xxx 仓库的操作生效。 拉取镜像的行为 在默认情况下,如果执行: 1 docker pull ubuntu:latest Docker 会从官方镜像仓库(即 Docker Hub,地址为 registry-1.docker.io)拉取 ubuntu:latest 镜像,而不是从 xxx.xxx.xxx 拉取。原因如下: ...

2025年6月19日 · 1 分钟 · 浅忆

nginx如何防止非 server_name 配置的域名访问

在 Nginx 中,如果客户端请求的域名未在 server_name 指定的配置中匹配,Nginx 仍然会将请求转发到默认的 server 块。为了防止非 server_name 配置的域名访问,可以使用以下几种方法: 方法 1:使用默认 server 块拦截未匹配的域名 在 Nginx 配置文件中(通常是 /etc/nginx/nginx.conf 或 /etc/nginx/conf.d/default.conf),添加一个默认的 server 块,只允许 server_name 明确配置的域名访问,其他所有未匹配的域名都返回 444(直接断开连接)。 1 2 3 4 5 6 7 server { listen 80 default_server; listen [::]:80 default_server; server_name _; return 444; } 解释 listen 80 default_server;:表示该 server 块是默认的服务器,所有未匹配的请求都会进入这里。 server_name _;:这个 _ 是一个通配符,表示未匹配的任何域名都会进入该 server 块。 return 444;:返回 444 状态码,直接断开连接,不给客户端任何响应,提高安全性。 方法 2:使用 if 语句在特定 server 块中拦截 如果不想使用默认 server 块,也可以在你的业务 server 块中检查 Host 头,拒绝非指定域名的访问。 1 2 3 4 5 6 7 8 9 10 11 12 server { listen 80; server_name example.com www.example.com; if ($host !~* ^(example\.com|www\.example\.com)$) { return 403; } location / { proxy_pass http://127.0.0.1:8080; } } 解释 if ($host !~* ^(example\.com|www\.example\.com)$):检查 Host 头,如果不符合 example.com 或 www.example.com,则返回 403 Forbidden。 return 403;:拒绝访问。 ⚠️ 注意:Nginx 官方不推荐 if 语句用于控制访问,但在简单场景下可以使用。 ...

2025年6月18日 · 2 分钟 · 浅忆

Docker拉取镜像设置s5代理

目前有2种方案 方案一、在 daemon.json 配置 1 vi /etc/docker/daemon.json 1 2 3 4 5 6 7 { "proxies": { "http-proxy": "http://127.0.0.1:10808", "https-proxy": "http://127.0.0.1:10808", "no-proxy": "localhost,127.0.0.1" } } 方案二、在docker服务里配置 1 vi /lib/systemd/system/docker.service 1 2 3 4 5 [Service] Environment="HTTP_PROXY=http://127.0.0.1:10808" Environment="HTTPS_PROXY=http://127.0.0.1:10808" Environment="NO_PROXY=localhost,127.0.0.1" 1 2 systemctl daemon-reload systemctl restart docker 设置加速源(自建或使用第三方) 1 vi /lib/systemd/system/docker.service 1 2 3 { "registry-mirrors": ["https://mirror.example.com"] }

2025年6月1日 · 1 分钟 · 浅忆

Docker-安装

Linux docker、docker-compose安装命令 ...

2025年6月1日 · 1 分钟 · 浅忆

Docker-开发相关镜像

开发过程中常用镜像。 ...

2025年6月1日 · 15 分钟 · 浅忆

Git 配置代理:HTTPS 和 SSH 仓库地址配置方式

这里记录一下 Git 配置代理的几种常见方式。 首先要看远程仓库地址是哪种格式: ...

2025年5月25日 · 2 分钟 · 浅忆

Git 如何忽略已经提交过的文件或目录

遇到个问题是:明明已经把 .idea/ 写进了 .gitignore,但 VS Code 里还是显示这些文件,Git 也还是在跟踪它们。 原因很简单:.gitignore 只对还没有被 Git 跟踪的文件生效。 如果某个文件或目录之前已经被提交过,Git 就已经开始管理它了。后面再把它写进 .gitignore,并不会自动停止跟踪。 ...

2025年4月25日 · 1 分钟 · 浅忆