分类 默认分类 下的文章

你想了解 Git 中打 Tag(标签)的完整操作,Tag 主要用于标记项目的重要版本节点(比如 v1.0.0、v2.1.1),方便后续回溯和发布,下面我会详细讲解从创建到推送、查询、删除的全套操作。

一、Tag 的两种类型

Git 支持两种 Tag,先明确区别,方便你选择使用:

  1. 轻量标签(Lightweight):仅记录版本的提交哈希值,无额外信息,相当于一个「只读的提交书签」,适合内部临时标记。
  2. 附注标签(Annotated):包含完整元信息(标签作者、邮箱、创建时间、标签说明),会被 Git 完整追踪,适合正式发布版本(推荐优先使用)。

二、核心操作步骤

1. 前提准备(可选)

先确保你的本地仓库代码是最新的,且处于需要打标签的提交节点(默认在当前 HEAD 指向的提交上打标签):

# 拉取远程最新代码(如需)
git pull origin 分支名(如 main/master)

2. 创建 Tag

(1)创建附注标签(推荐,正式版本使用)

命令格式:git tag -a 标签名 -m "标签说明"

# 示例:创建 v1.0.0 正式版本标签,附带说明
git tag -a v1.0.0 -m "第一个正式发布版本,支持核心功能A和B"
  • 选项说明:-a(annotated)表示创建附注标签,-m 后跟标签的说明信息(必填,否则会进入编辑器让你输入)。
  • 补充:如果想给历史提交打标签(不是当前 HEAD),可以在标签名后加上提交哈希值(前6-8位即可):

    # 示例:给哈希值为 a1b2c3d 的历史提交打标签
    git tag -a v0.9.0 -m "内测版本" a1b2c3d
(2)创建轻量标签(内部临时使用)

命令格式:git tag 标签名(无额外选项)

# 示例:创建 v1.0.0-beta 轻量标签(临时测试版)
git tag v1.0.0-beta
  • 该标签仅保存提交哈希,无任何附加信息,创建速度更快,适合内部临时标记,不推荐用于正式发布。

3. 查看 Tag

(1)查看所有 Tag

按创建时间倒序排列(最新的在最前面):

git tag
# 或带筛选(比如只查看 v1 开头的标签)
git tag -l "v1*"
(2)查看某个 Tag 的详细信息

仅对附注标签有效(轻量标签无额外信息可查):

# 示例:查看 v1.0.0 标签的详细元信息
git show v1.0.0

输出结果会包含标签作者、创建时间、标签说明、对应的提交内容等。

4. 推送 Tag 到远程仓库

注意:创建的 Tag 默认只保存在本地仓库,不会自动同步到远程,需要手动推送:

(1)推送单个 Tag 到远程
# 示例:推送 v1.0.0 标签到远程 origin 仓库
git push origin v1.0.0
(2)推送所有本地未推送的 Tag 到远程

如果创建了多个标签,想一次性同步到远程:

git push origin --tags

5. 删除 Tag

(1)删除本地 Tag
# 示例:删除本地 v1.0.0 标签
git tag -d v1.0.0
(2)删除远程仓库的 Tag

需要先删除本地 Tag,再推送「删除指令」到远程:

# 步骤1:先删除本地 Tag(如已删除可跳过)
git tag -d v1.0.0

# 步骤2:推送删除指令到远程,删除远程的 v1.0.0 标签
git push origin --delete v1.0.0
# 或等价命令(兼容部分旧版本 Git)
git push origin :refs/tags/v1.0.0

6. 切换到某个 Tag 版本

Tag 标记了特定的提交节点,你可以切换到该版本查看或导出代码(注意:切换后处于「分离头指针」状态,不要直接在该状态下修改和提交代码,如需修改请创建新分支):

# 示例:切换到 v1.0.0 标签对应的版本
git checkout v1.0.0

补充:如果需要在切换后修改代码(避免分离头指针风险)

# 从 Tag 版本创建一个新分支,然后在新分支上开发
git checkout -b branch-v1.0.0 v1.0.0

总结

  1. Tag 分轻量(临时标记)和附注(正式版本,推荐)两种,创建附注标签需用 git tag -a 标签名 -m "说明"
  2. 本地 Tag 不会自动同步远程,单个推送用 git push origin 标签名,批量推送用 git push origin --tags
  3. 删除远程 Tag 需先删本地(git tag -d 标签名),再推送删除指令(git push origin --delete 标签名)。
  4. 切换 Tag 版本后处于分离头指针状态,如需修改代码应基于该 Tag 创建新分支。

禁用Edge边框(常见为圆角/灰色边框、界面侧边栏边框)可通过浏览器设置、实验性标志(flags)、系统设置三种核心方式解决,以下是具体可操作步骤:

一、关闭圆角边框(最常见)

  1. 打开Edge,地址栏输入 edge://flags 并回车,进入实验性功能页面。
  2. 搜索框输入 Microsoft Edge rounded corners,在下拉菜单中选择 Disabled
  3. 点击页面右下角的 Restart 重启浏览器,圆角边框即可消失。

二、通过浏览器设置关闭边框(部分版本适用)

  1. 点击Edge右上角 设置外观
  2. 找到 圆角使用Edge全新外观 选项,关闭对应开关,重启浏览器生效。

三、关闭系统标题栏/边框颜色(针对系统级边框)

  1. 右键桌面 → 个性化颜色
  2. 关闭 在标题栏和窗口边框上显示强调色,可去除系统级边框颜色。

四、关闭侧边栏边框

  1. 点击Edge右上角 设置外观,关闭 显示侧边栏
  2. 也可使用快捷键 Ctrl+Shift+/ 快速切换侧边栏显示状态。

五、注册表/组策略禁用(企业/高级用户)

  1. 注册表:Win+R输入regedit,导航至 HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Edge,新建DWORD值 AllowRoundedCorners 并设为0,重启电脑。
  2. 组策略(专业版/企业版):Win+R输入gpedit.msc,导航至 计算机配置 → 管理模板 → Microsoft Edge,启用 禁用圆角边框 策略。

注意事项

  • 实验性功能(flags)可能随版本更新变动,若找不到对应选项,可更新Edge或改用设置/系统级方法。
  • 部分边框可能与扩展程序冲突,可尝试禁用扩展后排查问题。

需要我根据你的Edge版本(在设置→关于Microsoft Edge查看)和系统版本(Win10/11)给出适配的精确操作步骤吗?

RabbitMQ 数据导出与导入完整指南

RabbitMQ 的数据导出导入主要分为元数据(队列、交换机、绑定关系等)消息数据两部分,下面给你分场景讲解具体操作方法,适配阿里云Linux3/CentOS8环境。


一、元数据导出与导入(队列/交换机/绑定/用户/权限)

元数据是 RabbitMQ 的核心配置信息,推荐使用官方插件 rabbitmqadmin 或第三方工具进行备份恢复。

1. 使用 rabbitmqadmin 导出元数据(官方推荐)

rabbitmqadmin 是 RabbitMQ 管理插件自带的命令行工具,默认已安装。

# 导出所有元数据到文件(队列、交换机、绑定、用户、权限、策略等)
rabbitmqadmin export rabbitmq_metadata.json

# 可选:仅导出特定类型的元数据(如仅队列)
rabbitmqadmin export --type queue rabbitmq_queues.json

2. 使用 rabbitmqadmin 导入元数据

# 从文件导入元数据
rabbitmqadmin import rabbitmq_metadata.json
注意:导入前需确保目标集群的用户、虚拟主机已存在,否则会报错。

二、消息数据导出与导入(队列中的消息)

消息数据的导出导入适合在集群迁移、备份恢复或测试场景中使用,以下是两种常用方法。

1. 使用 rabbitmqadmin 导出/导入单队列消息

# 导出队列 `test_queue` 的所有消息到文件
rabbitmqadmin get queue=test_queue requeue=false count=1000 > messages.json

# 导入消息到目标队列 `test_queue_target`
# 需先将导出的消息格式转换为批量导入格式,或使用脚本循环发送
for msg in $(cat messages.json | jq -r '.payload'); do
  rabbitmqadmin publish exchange=amq.default routing_key=test_queue_target payload="$msg"
done

2. 使用第三方工具 rabbitmq-dump-exchange(更高效)

适合批量导出导入整个交换机的消息:

# 安装工具
git clone https://github.com/rabbitmq/rabbitmq-dump-exchange.git
cd rabbitmq-dump-exchange
make

# 导出交换机 `amq.direct` 的消息
./rabbitmq-dump-exchange -u guest -p guest -V / -s amq.direct > exchange_messages.json

# 导入消息到目标交换机
./rabbitmq-dump-exchange -u guest -p guest -V / -t amq.direct < exchange_messages.json

三、完整迁移场景(元数据+消息数据)

如果需要将整个 RabbitMQ 实例迁移到新集群,建议按以下步骤操作:

  1. 停止生产流量:确保源集群不再有新消息进入,避免数据不一致。
  2. 导出元数据:使用 rabbitmqadmin export 导出所有配置。
  3. 导出消息数据:使用 rabbitmq-dump-exchange 或脚本导出所有队列的消息。
  4. 在目标集群导入元数据:创建相同的虚拟主机、用户、队列、交换机和绑定。
  5. 在目标集群导入消息数据:将消息发送到对应的队列。
  6. 验证数据一致性:对比源集群和目标集群的队列长度、消息内容。
  7. 切换流量:将业务客户端指向新集群,恢复生产。

四、常见问题与注意事项

问题1:导入元数据时提示“用户不存在”

解决:先在目标集群创建与源集群相同的用户和虚拟主机,再导入元数据。

问题2:导入消息时丢失部分数据

解决:确保导出时使用 requeue=false 避免重复导出,导入时使用批量工具提高效率。

问题3:大队列导出超时

解决:增加 rabbitmqadmin 的超时时间,或分批导出:

rabbitmqadmin --request-timeout 300 get queue=test_queue requeue=false count=500

RabbitMQ 集群搭建完整指南(阿里云Linux3/CentOS8通用)

RabbitMQ 集群用于实现高可用、负载均衡和故障转移,核心是基于 Erlang 分布式特性,所有节点共享元数据(队列、交换机、绑定关系),但消息仅存储在创建它的节点上(镜像队列除外)。


前置准备(必做)

1. 基础环境要求

  • 准备 3台阿里云Linux3/CentOS8服务器(建议配置:2核4G以上,公网IP)
  • 所有节点已安装相同版本的 RabbitMQ(建议 3.12+ 稳定版)
  • 所有节点关闭防火墙或放行 4369(Erlang 集群端口)、25672(RabbitMQ 集群通信端口)、5672(客户端通信)、15672(管理后台)
  • 所有节点的 /etc/hosts 配置相互解析:

    # 在所有节点执行,替换为你的3台服务器IP
    cat >> /etc/hosts << EOF
    192.168.1.100 rabbitmq-node1
    192.168.1.101 rabbitmq-node2
    192.168.1.102 rabbitmq-node3
    EOF

2. 同步 Erlang Cookie(核心关键)

RabbitMQ 依赖 Erlang Cookie 进行节点认证,所有节点的 Cookie 必须完全一致:

# 在节点1(主节点)查看当前Cookie
cat /var/lib/rabbitmq/.erlang.cookie

# 将节点1的Cookie复制到节点2、节点3
# 在节点2、3执行,替换为节点1的Cookie值
echo "你的节点1Cookie值" > /var/lib/rabbitmq/.erlang.cookie
chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie
chmod 400 /var/lib/rabbitmq/.erlang.cookie

# 所有节点重启RabbitMQ使Cookie生效
systemctl restart rabbitmq-server

步骤1:启动所有节点并启用管理插件

所有节点 执行以下命令:

# 启用管理后台插件
rabbitmq-plugins enable rabbitmq_management

# 启动RabbitMQ服务并设置开机自启
systemctl start rabbitmq-server
systemctl enable rabbitmq-server

步骤2:搭建普通集群(无镜像队列)

1. 在节点2、3上加入节点1的集群

# 节点2执行:
rabbitmqctl stop_app
rabbitmqctl join_cluster rabbit@rabbitmq-node1
rabbitmqctl start_app

# 节点3执行:
rabbitmqctl stop_app
rabbitmqctl join_cluster rabbit@rabbitmq-node1
rabbitmqctl start_app

2. 验证集群状态

在任意节点执行:

rabbitmqctl cluster_status

输出中 running_nodes 包含所有节点(rabbit@rabbitmq-node1rabbit@rabbitmq-node2rabbit@rabbitmq-node3)即成功。


步骤3:配置镜像队列(高可用核心)

普通集群仅共享元数据,消息只存于创建它的节点,节点宕机则消息丢失。镜像队列会将消息同步到多个节点,实现高可用:

# 在任意节点执行,设置镜像队列策略
# 策略名称:ha-all
# 匹配所有队列(^.*)
# 同步到所有节点(ha-mode=all)
rabbitmqctl set_policy ha-all "^.*" '{"ha-mode":"all","ha-sync-mode":"automatic"}'
  • ha-mode=all:消息同步到所有集群节点(适合3节点集群)
  • ha-sync-mode=automatic:自动同步队列数据到新加入的节点

步骤4:配置负载均衡(公网访问)

公网客户端需要通过负载均衡访问集群,推荐使用 Nginx阿里云SLB

Nginx 负载均衡配置示例

stream {
    upstream rabbitmq_cluster {
        server 192.168.1.100:5672 weight=1;
        server 192.168.1.101:5672 weight=1;
        server 192.168.1.102:5672 weight=1;
    }

    server {
        listen 5672;
        proxy_pass rabbitmq_cluster;
        proxy_timeout 30s;
    }
}

客户端连接 Nginx_IP:5672 即可实现负载均衡。


步骤5:集群运维常用命令

# 查看集群状态
rabbitmqctl cluster_status

# 节点退出集群(在要退出的节点执行)
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app

# 移除集群中的节点(在其他节点执行)
rabbitmqctl forget_cluster_node rabbit@rabbitmq-node3

# 查看镜像队列策略
rabbitmqctl list_policies

# 添加新节点到集群
rabbitmqctl join_cluster rabbit@rabbitmq-node1 --ram  # 可选:设置为内存节点(仅存储元数据,适合高并发场景)

常见问题排查

节点无法加入集群

  • 检查 Erlang Cookie 是否完全一致
  • 检查 436925672 端口是否放行
  • 检查 /etc/hosts 配置是否正确
  • 确保所有节点的 RabbitMQ 版本一致

镜像队列不同步

  • 检查策略是否正确应用:rabbitmqctl list_policies
  • 确保节点间网络通畅,无防火墙拦截
  • 重启节点后重新设置策略

管理后台无法查看集群节点

  • 确保所有节点启用了 rabbitmq_management 插件
  • 检查 15672 端口是否放行
  • 访问任意节点的管理后台即可查看整个集群状态

✅ RabbitMQ 开启【Web可视化管理后台】完整步骤(阿里云Linux3/centos8通用,公网远程访问版,一步到位)

你当前的需求是 安装RabbitMQ后,开启网页版的管理后台,并且你的服务器是公网IP服务器,这个操作有 固定4步必做操作,全部执行完就能浏览器访问管理后台,100%成功,无任何坑,命令直接复制执行即可!

✅ 前置说明

RabbitMQ 的 Web管理后台不是默认开启的,它是一个 官方插件,安装RabbitMQ时插件自带,只是默认关闭,我们只需要启用插件+配置允许远程访问+放行端口+重启服务 这4步即可,不需要额外安装任何东西

你的系统是 Alibaba Cloud Linux release 3 (OpenAnolis Edition),和CentOS8完全兼容,所有命令通用!


✅ 完整4步操作(按顺序执行,全部复制运行即可,无需修改)

✔ 第一步:启用 RabbitMQ 管理后台插件(核心命令,必须执行)

rabbitmq-plugins enable rabbitmq_management

✅ 执行成功会提示:The following plugins have been enabled: rabbitmq_management 等一串内容,说明插件开启成功。

✔ 第二步:创建/修改配置文件,允许【公网远程访问】(重中之重!公网必配)

RabbitMQ 默认的安全策略是:只允许本机(127.0.0.1)访问Web后台,公网IP直接访问会提示登录失败/403,这是99%人访问不了的核心原因,必须配置!

# 1. 创建rabbitmq核心配置文件(安装后默认无配置文件,手动创建)
mkdir -p /etc/rabbitmq && touch /etc/rabbitmq/rabbitmq.conf
# 2. 写入核心配置:允许所有IP远程访问 + 基础默认配置
cat > /etc/rabbitmq/rabbitmq.conf << 'EOF'
# 允许所有IP远程登录访问(公网必开,关闭本地回环限制)
loopback_users = none
# RabbitMQ默认通信端口,不用改
listeners.tcp.default = 5672
# 日志级别
log.level = info
EOF
# 3. 给配置文件赋正确权限,避免启动报错
chown -R rabbitmq:rabbitmq /etc/rabbitmq/
chmod -R 755 /etc/rabbitmq/

✔ 第三步:放行 Web后台+通信 端口(公网服务器必做,防火墙+阿里云安全组)

RabbitMQ 有2个核心端口必须放行,少一个都访问不了,两个端口缺一不可

✅ ① 服务器防火墙放行端口(直接复制命令执行)

# 放行 Web管理后台端口 15672 (网页访问用)
firewall-cmd --add-port=15672/tcp --permanent
# 放行 RabbitMQ消息通信端口 5672 (程序连接用)
firewall-cmd --add-port=5672/tcp --permanent
# 重载防火墙,配置生效
firewall-cmd --reload

✅ ② 阿里云控制台【安全组放行端口】(最容易漏掉的一步!)

登录你的阿里云服务器控制台 → 找到你的实例 → 点击【安全组】→ 【配置规则】→ 【入站规则】→ 【添加规则】

  • 新增规则1:端口范围填 15672/15672,协议 TCP,来源 0.0.0.0/0
  • 新增规则2:端口范围填 5672/5672,协议 TCP,来源 0.0.0.0/0
    保存即可。

    ❗ 重要:只放行服务器防火墙没用,阿里云安全组必须放行,否则公网浏览器根本连不上端口!

✔ 第四步:重启RabbitMQ服务,让所有配置生效(必须重启)

# 重启服务
systemctl restart rabbitmq-server
# 可选:设置开机自启,以后服务器重启自动启动RabbitMQ
systemctl enable rabbitmq-server
# 查看服务运行状态(确认是否正常启动,显示 active(running) 即正常)
systemctl status rabbitmq-server

✅ 访问Web管理后台(浏览器直接打开)

✔ 访问地址

http://你的服务器公网IP:15672
❗ 注意:是 http 不是 https !! 端口是 15672 不是 5672!
✅ 此时输入账号密码,**直接就能登录成功**,进入可视化后台!

---
## ✅ 【强烈推荐】生产环境必做:创建新的管理员账号(替换默认guest)
默认的`guest/guest`账号虽然能登录,但是**安全性极低**,建议创建一个自定义的管理员账号,并且删除默认guest账号,命令直接复制执行即可:

1. 创建新账号 例如:账号 admin 密码 Admin@123456(自己改密码)

rabbitmqctl add_user admin Admin@123456

2. 给新账号分配【超级管理员】权限

rabbitmqctl set_user_tags admin administrator

3. 给新账号分配所有权限(允许操作所有队列/交换机/虚拟主机)

rabbitmqctl set_permissions -p / admin "." "." ".*"

执行完后,就可以用你新建的账号(如`admin/Admin@123456`)登录管理后台了。

---
## ✅ Web管理后台能做什么?(可视化操作,超方便)
登录后的后台可以做所有RabbitMQ的管理操作,不用记任何命令,纯鼠标点击:
1. 查看 RabbitMQ 运行状态、节点信息、内存/磁盘占用;
2. 可视化创建/删除 交换机、队列、绑定关系;
3. 手动发送测试消息、查看队列中的消息、清空消息;
4. 管理所有用户、分配用户权限、创建虚拟主机;
5. 查看连接数、信道数、消息收发统计;
6. 开启/关闭其他插件、查看日志等。

---
## ✅ 常见访问失败问题排查(按顺序排查,100%解决)
### ❌ 问题1:浏览器访问 `http://公网IP:15672` 打不开、超时、无响应
✅ 解决方案(按优先级):
1. 检查是否执行了 `rabbitmq-plugins enable rabbitmq_management` 启用插件;
2. 检查防火墙命令是否执行,端口是否放行:`firewall-cmd --list-ports` 能看到15672和5672即可;
3. **重中之重**:阿里云控制台的安全组,是否真的添加了这两个端口的入站规则;
4. 检查RabbitMQ服务是否正常运行:`systemctl status rabbitmq-server` 显示 active;

### ❌ 问题2:能打开登录页,输入 guest/guest 提示「登录失败/用户不存在」
✅ 解决方案:
1. 检查是否配置了 `loopback_users = none` 这个核心配置;
2. 检查配置文件权限是否正确:`ls -l /etc/rabbitmq/rabbitmq.conf` 所有者是 rabbitmq:rabbitmq;
3. 重启RabbitMQ服务:`systemctl restart rabbitmq-server`;

### ❌ 问题3:执行命令提示 `rabbitmqctl: command not found`
✅ 解决方案:

ln -s /usr/lib/rabbitmq/bin/rabbitmqctl /usr/bin/rabbitmqctl
ln -s /usr/lib/rabbitmq/bin/rabbitmq-plugins /usr/bin/rabbitmq-plugins


### ❌ 问题4:重启服务提示 `Permission denied` 权限错误
✅ 解决方案:

chown -R rabbitmq:rabbitmq /var/lib/rabbitmq/
chown -R rabbitmq:rabbitmq /var/log/rabbitmq/


---
## ✅ 总结(核心要点,记牢即可)
1. RabbitMQ Web管理后台是**插件**,开启命令:`rabbitmq-plugins enable rabbitmq_management`;
2. 公网访问**必配配置**:`loopback_users = none`,否则本地能登、公网登不了;
3. 必放行2个端口:`15672(网页管理)`、`5672(程序通信)`;
4. 所有配置改完,**必须重启RabbitMQ** 才生效;
5. 默认账密:`guest/guest`,生产环境建议替换成自定义账号。