清朝云资源网

作者: 清朝云

  • Docker 搭建 kms 服务器激活 Windows


    共计 830 个字符,预计需要花费 3 分钟才能阅读完成。

    今天一大早发现自己的 windows 激活快要过期了,之前是用的下面这款别人的激活工具。

    Docker 搭建 kms 服务器激活 Windows

    />

    需要的话评论区说一声,不需要的话可以看接下来自己搭建。

    一、运行 Docker 容器

    docker run -d -p 1688:1688 --restart=always --name vlmcsd mikolatero/vlmcsd

    随便在一台机器上运行都可以,我是在本地虚拟机运行的。

    二、激活 Windows

    由于我把快过期的产品秘钥给卸载了,所以现在是这样的。

    Docker 搭建 kms 服务器激活 Windows

    />

    此时我的 window 没有安装秘钥,所以需要先进行安装才能进行操作。

    1. 安装产品秘钥
    slmgr /ipk xxxx

    部分列表

    GVLK 系统版本
    TX9XD-98N7V-6WMQ6-BX7FG-H8Q99 Windows 10 家庭版
    W269N-WFGWX-YVC9B-4J6C9-T83GX Windows 10 专业版
    6TP4R-GNPTD-KYYHQ-7B7DP-J447Y Windows 10 专业教育版
    NW6C2-QMPVW-D7KKK-3GKT6-VCFB2 Windows 10 教育版
    YC6KT-GKW9T-YTKYR-T4X34-R7VHC Windows Server 2008 R2 标准版
    N69G4-B89J2-4G8F4-WWYCC-J464C Windows Server 2019 Standard

    更多GVLK在微软官网
    https://docs.microsoft.com/zh-cn/windows-server/get-started/kmsclientkeys

    Docker 搭建 kms 服务器激活 Windows

    />

    1. 设置 kms 服务器
    slmgr /skms 服务器ip

    直接更换ip回车即可。

    Docker 搭建 kms 服务器激活 Windows

    />

    1. 设置自动激活
    slmgr /ato

    输入命令后稍等几秒中,发现 windows 已经激活。

    Docker 搭建 kms 服务器激活 Windows

    />

    此时再查看系统的激活页面页面查看,也是激活状态。

    Docker 搭建 kms 服务器激活 Windows

    />

    到这里激活就已经完成了。

    1. 查看激活过期时间
    slmgr.vbs –xpr

    Docker 搭建 kms 服务器激活 Windows

    />

    只有半年的时间,如果需要自动续订则刚刚运行的 docker 容器不能停止。当然,如果停止了,再重新操作一遍就行了,只不过不需要重新安装密钥了。

    提醒:本文发布于842天前,文中所关联的信息可能已发生改变,请知悉!

    Tips:清朝云网络工作室

  • 03月09日,星期日, 每天60秒读懂全世界!

    百度热搜新闻

    新闻来源:百度热搜榜

    1. 不要再叫女神节女王节了 三八妇女节不是什么女神节也不叫什么女王节,这个节日得来不易,请勿娱乐,也勿消费!

    2. 受贿超8亿的正部级老虎被两高点名 3月8日上午,十四届全国人大三次会议第二次全体会议在人民大会堂举行。受贿超8亿元的正部级“老虎”孙志刚被写入两高报告。

    3. 2025国家立法抢鲜看 3月8日提请十四届全国人大三次会议审议的全国人大常委会工作报告,透露2025年度国家立法“发力点”。你最关注哪些立法?

    4. 宇树科技王兴兴:这个世界太卷了 宇树科技CEO王兴兴表示:这个世界太卷了,不努力就会马上被别人反超。

    5. 《哪吒2》让新加坡发行方惊到了 当地时间6日,《哪吒之魔童闹海》在新加坡33家电影院全面上映。据悉,目前该影片的排片量在新加坡所有正在上映的电影中居首位。

    6. 上海迪士尼三月竟然改名字

    7. 女子离婚要求带走全部嫁妆 近日,河南一女子在离婚时要求带走全部嫁妆,法院仅认定电视和四床被子属于她。因结婚长达十多年,陪嫁未超彩礼且部分已毁损灭失。

    8. 雷军给女同事准备了特别礼物 3月8日,雷军给女同事准备了特别礼物并发布视频称:“工厂的同事工作的时候都特别酷,我给她们拍了几段视频,带大家看看。

    9. 百姓如何少花钱看好病 医疗健康事关民生福祉,每年两会,不少代表委员就“如何进一步方便群众看上病、看好病、少花钱”积极建言献策。

    10. 张惠妹演唱会冻出鼻涕:到底几度啊 3月7日晚,在杭州演唱会上,张惠妹被结结实实地冷到了。抵达现场开唱的张惠妹在唱了几首歌之后发出了天问:“现在到底几度啊?”

    —- 百度热搜新闻 End —-

    知乎新闻

    新闻来源:知乎日榜

    标题: 细嘴杓鹬已宣告灭绝,几个月来全网还没什么讨论,为什么这种鸟不能复制「朱鹮奇迹」?
    链接: https://daily.zhihu.com/story/9779540
    ———————-
    标题: 兴凯湖面积超过鄱阳湖,为什么中国第一大淡水湖是鄱阳湖?
    链接: https://daily.zhihu.com/story/9779529
    ———————-
    标题: 《西游记》中,唐僧师徒离开祭赛国后,为什么没有去本钵国,反而去了荆棘岭呢?
    链接: https://daily.zhihu.com/story/9779533
    ———————-
    标题: 很多海鲜不用任何调料直接吃就很好吃,那为什么感觉古代似乎吃海鲜的并不多?
    链接: https://daily.zhihu.com/story/9779537
    ———————-

    —- 知乎新闻 End —-

    IT之家新闻

    新闻来源:ITHome之家科技新闻

    标题: 电影《哪吒 2》4 月 4 日日本上映,全球票房已破 147 亿排名第七
    发布时间: 2025-03-08T13:25:05.053
    新闻简介: 电影《哪吒之魔童闹海》官宣将于 4 月 4 日日本上映,3 月 14 日超前观看。据灯塔专业版实时数据,这部春节档大热影片的全球票房已经突破 147 亿元,暂列榜单第七位。
    ———————-
    标题: 华为神秘新机 JUY-AL00 入网:后置 50MP 主摄、搭载鸿蒙系统
    发布时间: 2025-03-08T17:11:26.13
    新闻简介: 华为新机JUY-AL00已入网,配备50MP主摄和鸿蒙系统,支持4G网络及双卡双待。搭载6.67寸720P LCD屏幕,前置800万自拍摄像头,配备6480毫安时电池。更多详情,敬请期待!#华为新机# #鸿蒙系统#
    ———————-
    标题: 11 年前诺基亚 X 产品线被砍的安卓机“Nokia XL 2”曝光,Lumia 930 同款金属中框
    发布时间: 2025-03-08T15:46:02.317
    新闻简介: 消息源 @猫猫落泪 投稿,其展示了一款 11 年前(2014 年前后)隶属诺基亚 X 产品线的“诺基亚 XL 2”手机,配备5英寸720P面板,外形设计与Lumia 930相似。该机运行基于安卓AOSP的“诺基亚X软件平台”,暗示诺基亚在被微软收购前,曾试图将X产品线转型为中高端安卓手机。#诺基亚# #安卓手机#
    ———————-
    标题: 3・8 妇女节“曾经很火但消失的女性手机”引热议,缺乏核心技术成退场主因
    发布时间: 2025-03-08T14:54:47.9
    新闻简介: #曾经很火但消失的女性手机#今天是 3 月 8 日妇女节,新浪新知回顾“曾经很火但消失的女性手机”,如 TCL 宝石手机等。分析认为其因核心技术和功能性不足没落,如今满足女性需求且无“女性手机”标签的产品更吸睛。
    ———————-
    标题: 消息称小米 16 Pro 今年 10 月登场:配 3D 打印金属中框、正评估是否新增独立按键
    发布时间: 2025-03-08T14:43:47.87
    新闻简介: 据博主爆料,小米16 Pro或于10月发布,采用3D打印金属中框,有望减轻机身重量并提升散热水平。同时,该机是否配备独立按键仍在斟酌中。小米15 Pro去年发布,搭载骁龙8至尊版,性能强劲。 #小米16Pro #3D打印中框
    ———————-
    标题: 极氪 007 GT 纯电猎装车更多官图公布,计划二季度上市
    发布时间: 2025-03-08T09:39:50.377
    新闻简介: 极氪汽车昨日公布了极氪 007 GT 纯电猎装车更多官图,该车基于极氪 007 打造,也是继极氪 001 之后旗下第二款猎装车,将于今年第二季度上市。
    ———————-
    标题: 小爱同学、超级小爱无法控制智能家居设备,小米技术人员正紧急排查处理中
    发布时间: 2025-03-08T18:59:45.297
    新闻简介: 小米员工回复称,小爱出现无法控制智能家居设备情况(问题现象:控制智能设备回复操作失败、没有找到设备等),目前技术人员正在紧急排查和处理。
    ———————-
    标题: 林肯 Z、冒险家两款车型推出“一口价”,18.88 万元起
    发布时间: 2025-03-08T14:15:51.273
    新闻简介: 林肯Z和林肯冒险家两款车型现已上线“一口价”,限时均为18.88万元起(通过金融机构贷款可用18.88万元起的金额购买)。
    ———————-
    标题: 消息称华为组建医疗卫生军团,推动医疗大模型临床应用
    发布时间: 2025-03-08T08:28:28.533
    新闻简介: 据《科创板日报》报道,华为正式组建医疗卫生军团。据悉,医疗卫生军团将重点构建 AI 辅助诊断解决方案体系,推动医疗大模型在临床场景的应用。
    ———————-
    标题: 时速近 200 公里!一司机驾驶小米 SU7 Ultra 深夜飙车,警方通报称车主李某某已到案
    发布时间: 2025-03-08T23:39:10.643
    新闻简介: 潍坊交警公布的视频画面显示,一名司机驾驶小米 SU7 Ultra 在城市道路上行驶并不断加速,时速近 200km/h。
    ———————-
    标题: 国补后 14499 元起,苹果 2025 款 M4 Max / M3 Ultra 芯片 Mac Studio 开启预售
    发布时间: 2025-03-08T20:51:43.923
    新闻简介: 苹果旗下 M4 Max / M3 Ultra 芯片的 Mac Studio 现已开启预售,该机国行 16499 元起,京东国补后 14499 元起,将于 3 月 12 日发售。
    ———————-
    标题: 索尼集团高层调整,陶琳成为首位女性首席财务官
    发布时间: 2025-03-08T09:16:02.713
    新闻简介: 林涛成为索尼集团首位女性CFO,不仅是对她个人能力的肯定,也体现了索尼对多元化和未来增长的重视。她的任命为集团注入了新的活力,同时也为其他女性领导者树立了榜样。
    ———————-

    —- IT之家新闻 End —-

  • 使用 nginx 防止域名恶意解析


    共计 643 个字符,预计需要花费 2 分钟才能阅读完成。

    查看百度统计的入口页面,发现有个奇怪的域名。

    使用 nginx 防止域名恶意解析

    />

    好家伙,直接解析到了我的网站上,同时发现直接输入 ip 也能访问博客。受不了,于是着手处理。

    开始想到使用 nginx 的 default_server。

    server {
      listen    80 default_server;
      server_name _;
      return    444;
    }

    但是我的服务器这样配置不知道为什么不生效,如果 server_name 设置为 ip 就能匹配到,我觉得原因肯定就是没有匹配到。

    突然想到 server_name 如果能匹配所有的字符,那么不管 ip 还是外部域名不就都会被拦截了吗?反正域名精确匹配优先,匹配到就直接进行反向代理了,没有配置的域名或者 ip 都走这个默认配置。

    server {
      listen 80 default_server;
      server_name ~.*$;
      return 444;
    }

    这样配置以后,发现 http 确实都不能访问,但是 https 还是可以访问的,此时需要这样配置就可以解决。

    server {
      listen 443 default_server;
      server_name ~.*$;
      ssl on;
      ssl_certificate  /etc/nginx/conf.d/cert/www.qcyqq.com.cer;
      ssl_certificate_key /etc/nginx/conf.d/cert/www.qcyqq.com.key;
      return 444
    }
    server {
      listen 80 default_server;
      server_name ~.*$;
      return 444;
    }

    使用 nginx 防止域名恶意解析

    提醒:本文发布于835天前,文中所关联的信息可能已发生改变,请知悉!

    />

    Tips:清朝云网络工作室

  • 解决 code-server 不显示图片问题


    共计 645 个字符,预计需要花费 2 分钟才能阅读完成。

    很多时候喜欢在服务器上的 code-server 进行开发,但是发现自己搭建的不能打开图片。

    解决 code-server 不显示图片问题

    />

    起初以为原因是 code-server 是 vscode 的 web 版本,并不支持显示。但是后来看见一个网站 github1s.com 可以打开图片,后来搜索关键字并没有找到相关教程,猜测是没有开启 ssl 的缘故。

    于是开始制作证书,不懂的话可以参考我之前的文章 v3版 ssl 证书制作和 nginx 配置证书。这里介绍一种更简单的方式,当然这是使用 docker 制作,如果不了解 docker 的话,还是参考那篇文章制作。

    制作证书

    如果安装 v1 版本的证书,仍然会提示不安全的链接,所以需要 v3 版的证书,制作v3版证书需要指定使用者可选名称,传域名或者 ip 都可以。

    docker run --rm -it -v `pwd`/ssl:/ssl soulteary/certs-maker "--CERT_DNS=hz.com"

    配置证书和反向代理

    制作好证书以后,需要在 nginx 配置证书,具体还是可以参考 v3版 ssl 证书制作和 nginx 配置证书

    然乎继续配置反向代理,访问域名反向代理到 code-server。

    解决 code-server 不显示图片问题

    />

    配置 hosts

    由于域名实际并不是我们的,需要在本地配置解析到搭建 code-server 的机器上。

    解决 code-server 不显示图片问题

    />

    安装证书

    就算 nginx 配置了证书,浏览器还是会提示不安全的链接,这是因为我们制作的证书并不被信任,需要将证书下载并在本地进行安装。

    解决 code-server 不显示图片问题

    />

    双击下载好的证书进行安装,然后储存到受信任的根证书颁发机构,然后清除一下缓存,再打开就提示安全的链接啦,图片也可以查看。

    解决 code-server 不显示图片问题

    提醒:本文发布于831天前,文中所关联的信息可能已发生改变,请知悉!

    />

    Tips:清朝云网络工作室

  • k8s双向证书认证实战-创建基于rbac认证的角色并绑定用户


    共计 2559 个字符,预计需要花费 7 分钟才能阅读完成。

    一、认证管理

    kubernetes集群安全的关键点在于如何识别并认证客户端身份,它提供了3种客户端身份认证方式:

    1. HTTP Base认证

    通过用户名+密码的方式进行认证。

    这种方式是把“用户名:密码”用BASE64算法进行编码后的字符串放在HTTP请求中的Header的Authorization域里面发送给服务端。服务端收到后进行解码,获取用户名和密码,然后进行用户身份认证的过程。

    2. HTTP Token认证

    通过一个Token来识别合法用户。

    这种认证方式是用一个很长的难以被模仿的字符串–Token来表明客户端身份的一种方式。每个Token对应一个用户名,当客户端发起API调用请求的时候,需要在HTTP的Header中放入Token,API Server接受到Token后会和服务器中保存的Token进行比对,然后进行用户身份认证的过程。

    3. HTTPS证书认证

    基于CA根证书签名的双向数字证书认证方式。

    这种认证方式是安全性最高的一种方式,但是同时也是操作起来最麻烦的一种方式。

    k8s双向证书认证实战-创建基于rbac认证的角色并绑定用户

    />

    HTTPS认证大体分为3个过程:

    1. 证书申请和下发

    HTTPS通信双方的服务器向CA机构申请证书,CA机构下发根证书、服务端证书及私钥给申请者

    1. 客户端和服务端的双向认证
    • 客户端向服务器端发起请求,服务端下发自己的证书给客户端,客户端接收到证书后,通过私钥解密证书,在证书中获得服务端的公钥,客户端利用服务器端的公钥认证证书中的信息,如果一致,则认可这个服务器。
    • 客户端发送自己的证书给服务器端,服务端接收到证书后,通过私钥解密证书,在证书中获得客户端的公钥,并用该公钥认证证书信息,确认客户端是否合法
    1. 服务器端和客户端进行通信

    服务器端和客户端协商好加密方案后,客户端会产生一个随机的秘钥并加密,然后发送到服务器端。服务器端接收这个秘钥后,双方接下来通信的所有内容都通过该随机秘钥加密。

    二、创建用户证书

    1. 生成客户端私钥

    # 进入 k8s 存放证书的目录
    cd /etc/kubernetes/pki/
    # 生成私钥
    umask 077;openssl genrsa -out devman.key 2048

    2. 生成证书请求

    openssl req -new -key devman.key -out devman.csr -subj "/CN=devman/O=devgroup"

    申请的用户是devman,组是devgroup。

    3. 签属证书

    openssl x509 -req -in devman.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out devman.crt -days 3650

    三、配置集群上下文

    # 1. 设置集群(这一步不需要,使用默认的集群即可)
    # kubectl config set-cluster kubernetes --embed-certs=true --certificate-authority=/etc/kubernetes/pki/ca.crt --server=https://192.168.18.100:6443
    
    # 2. 创建一个用户 devman,并指定他的证书和私钥的位置。
    kubectl config set-credentials devman --embed-certs=true --client-certificate=/etc/kubernetes/pki/devman.crt --client-key=/etc/kubernetes/pki/devman.key
    
    # 3. 设置上下文(创建特定集群和用户的绑定关系,切换上下文相当于切换了用户和集群)
    kubectl config set-context devman@kubernetes --cluster=kubernetes --user=devman
    
    # 4. 创建 namespace
    kubectl create ns dev
    
    # 5. 切换到 devman 用户
    kubectl config use-context devman@kubernetes

    此时如果执行 kubectl get pods -n dev 会提示没有权限,这个是因为还没授权,接下来通过创建角色和角色绑定用户 devman 进行授权。

    四、创建角色和角色绑定

    1. 切换到admin账户

    kubectl config use-context kubernetes-admin@kubernetes

    2. 创建角色和角色绑定

    # 创建请求文件
    cat > dev-role.yaml<<EOF
    apiVersion: rbac.authorization.k8s.io/v1
    kind: Role
    metadata:
      name: dev-role
      namespace: dev
    rules:
      - apiGroups: [""] # 支持的API组列表,""空字符串,表示核心API群
        resources: ["pods"] # 支持的资源对象列表
        verbs: ["create","get","watch","list"]
    
    ---
    
    kind: RoleBinding
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: authorization-role-binding
      namespace: dev
    subjects:
      - kind: User
        name: devman
        apiGroup: rbac.authorization.k8s.io
    roleRef:
      kind: Role
      name: dev-role
      apiGroup: rbac.authorization.k8s.io
    EOF
    # 生成角色
    kubectl apply -f dev-role.yaml

    五、测试

    1. 切换到devman账户

    kubectl config use-context devman@kubernetes

    2. 创建并获取 pod

    # 创建nginx
    kubectl run nginx-pod --image="nginx" -n dev
    # 获取pod列表
    kubectl get pod -n dev
    # 获取default名称空间列表 -> 没有权限
    kubectl get pod
    #Error from server (Forbidden): pods is forbidden: User "devman" cannot list resource "pods" in API group "" in the namespace "default"

    提醒:本文发布于799天前,文中所关联的信息可能已发生改变,请知悉!

    Tips:清朝云网络工作室

  • 03月08日,星期六, 每天60秒读懂全世界!

    百度热搜新闻

    新闻来源:百度热搜榜

    1. 山东省委书记:发言时不要穿靴戴帽 3月6日,十四届全国人大三次会议山东代表团举行全体会议。省委书记提出,“各位代表发言时不要穿靴戴帽,时间控制在六分钟”。

    2. 台湾唯一称谓就是中国台湾省 3月7日,外交部长王毅谈台湾问题:台湾在联合国唯一称谓就是中国台湾省,台湾从来不是一个国家,过去不是,今后更绝无可能。

    3. 从这些关键词解读政府工作报告 6日下午,十四届全国人大三次会议举行经济主题记者会,主要经济部门的负责人回应了许多热点问题。就业、青少年身体健康……从这些关键词解读政府工作报告。

    4. 海尔总裁谈与雷军表情包:我也被逗笑 5日,雷军和周云杰同框亮相“代表通道”,海尔总裁周云杰表情包迅速走红网络。周云杰欣然接受网友的调侃,还称自己也被逗笑了。

    5. 省委书记问老乡:去年收入有多少 3月7日上午9时,十四届全国人大三次会议云南代表团举行开放团组会议。云南省委书记王宁在会中问老乡:去年收入有多少?

    6. 170人还没登机 飞机空着就飞走了 日前,一起航班乌龙事件致170名韩国旅客滞留菲律宾。他们原计划包机从菲律宾回国,到机场发现航班早已飞走,无奈滞留机场2天。

    7. 我从非洲带回一包米被王毅点名了 7日,外交部长王毅称,中非合作让非洲兄弟姐妹看得见,摸得着,有实惠。此前,一段“非洲农民托小伙将大米带回湖南”视频被热议。

    8. 有AI为何还要读书?这个回答获赞百万 近日,有学生问有AI为什么还要读书,武汉一数学老师的回答称:使唐僧成为唐僧的并不是那卷经书吗,而是取经的路。

    9. 中俄决定永久睦邻友好 3月7日,十四届全国人大三次会议举行记者会,王毅表示,无论国际环境如何变化,中俄友好的历史逻辑不变、内生动力不减。

    10. 俄方就对华关系表态 俄罗斯外交部发言人扎哈罗娃6日表示,俄中关系是国际事务中的重要稳定因素,双方为建立更加公正的世界秩序作出重大贡献。

    —- 百度热搜新闻 End —-

    知乎新闻

    新闻来源:知乎日榜

    标题: 水真的不能被压缩吗?若强行把水一直压缩,又会发生什么?
    链接: https://daily.zhihu.com/story/9779513
    ———————-
    标题: 摔炮为何一摔就响?是什么原理?
    链接: https://daily.zhihu.com/story/9779516
    ———————-
    标题: 世界上有多少个和弦?
    链接: https://daily.zhihu.com/story/9779523
    ———————-
    标题: 瞎扯 · 如何正确地吐槽
    链接: https://daily.zhihu.com/story/9779457
    ———————-

    —- 知乎新闻 End —-

    IT之家新闻

    新闻来源:ITHome之家科技新闻

    标题: 再补就真买得起了!苹果 M4 MacBook Air 16G 首发 7 折 5799 元 12 期免息
    发布时间: 2025-03-07T13:35:54.283
    新闻简介: 京东自营现已上线“苹果新品”政府补贴 + 教育优惠专区,MacBook、iPad 等新品均支持国补 + 12 期免息
    ———————-
    标题: 车评人袁启聪发布致歉声明:测评享界 S9 时得出失实结论
    发布时间: 2025-03-07T19:50:30.367
    新闻简介: “大家车言论”车评人袁启聪今日发布“致歉声明”,就去年8月发布的享界S9汽车评测视频造成的负面影响致歉。
    ———————-
    标题: 外交部长王毅:临近边界的缅甸北部地区的电诈园区已经全部清除
    发布时间: 2025-03-07T12:22:27.623
    新闻简介: 王毅外长还提到,“中国、泰国、缅甸、老挝四个国家,正在合力对泰缅边境地区的电诈进行集中打击。我们的任务就是,斩断伸向人民群众的黑手,切除网络电诈这颗毒瘤。”
    ———————-
    标题: 小米 SU7 Ultra 汽车设计手稿公布
    发布时间: 2025-03-07T10:22:33.497
    新闻简介: 小米 SU7 Ultra 于 2 月 27 日发布上市,包括 5 款配色,标准版售价 52.99 万元,纽北限量版售价 81.49 万元。
    ———————-
    标题: 雷军:小米 SU7 Ultra 小定车主 90% 以上都是传统豪车转过来的,其中 56E 用户占一半多
    发布时间: 2025-03-07T09:15:01.98
    新闻简介: 雷军昨日在北京会议中心接受采访时表示,小米 SU7 Ultra 的定价为 52.99 万元,已经属于豪车领域,当时公司认为能卖 1 万辆就是很了不起。“我们万万没有想到,发布后的三天时间,我们的销售锁单就超过了一万辆,提前完成了全年任务。”
    ———————-
    标题: 苹果 2025 款 M4 MacBook Air 跑分揭晓
    发布时间: 2025-03-07T08:52:19.567
    新闻简介: 2025款MacBook Air凭借M4芯片的强劲性能,再次刷新了轻薄笔记本的标准。无论是多核还是单核性能,M4都带来了显著提升,同时支持多屏显示功能,进一步提升了用户体验。苹果自研芯片的持续优化,再次证明了其在硬件创新上的领先地位。
    ———————-
    标题: 郭明錤:小米 16 Pro 将首次采用 3D 打印的手机中框,进一步减轻重量并提升散热性能
    发布时间: 2025-03-07T10:32:47.107
    新闻简介: 他指出,用 3D 打印生产手机中框的好处在于其镂空设计,从而可以在不牺牲手机中框结构强度的前提下进一步减轻机身重量并提升散热性能。
    ———————-
    标题: 苹果称 2025 款 M4 MacBook Air 比英特尔机型快 23 倍,但测试方法令人咋舌
    发布时间: 2025-03-07T06:38:58.907
    新闻简介: 苹果官方宣称这款设备相比最后一代(2020 款)搭载英特尔处理器的机型最高提速 23 倍,但小字注释中隐藏着关键限定条件。
    ———————-
    标题: 消息称苹果 iPhone 17 全系标配 LTPO 灵动岛屏幕、高密度钢壳异形电池
    发布时间: 2025-03-07T14:39:43.503
    新闻简介: 据博主@数码闲聊站透露,苹果iPhone 17系列将全系标配LTPO灵动岛屏幕和高密度钢壳异形电池,刷新率可能为90Hz或120Hz,但具体细节待发布确认。#iPhone17 #LTPO屏幕
    ———————-
    标题: 5 个人三小时复刻开源版 Manus,邀请码也不需要
    发布时间: 2025-03-07T15:27:29.073
    新闻简介: 5人团队3小时复刻开源版OpenManus,无需邀请码。其实现依赖MetaGPT,也为Manus“套壳风波”提供新视角。关键在于生产力提升。#开源版Manus# #OpenManus# #Manus#
    ———————-
    标题: 中美将合拍《猫和老鼠:星盘奇缘》大电影
    发布时间: 2025-03-07T17:07:02.737
    新闻简介: 电影《猫和老鼠:星盘奇缘》立项备案,备案单位为中国电影股份有限公司、华纳兄弟(美),张钢编剧。#中美合拍猫和老鼠#
    ———————-
    标题: 比亚迪官宣仰望 U7 豪华轿车即将上市,提供纯电及混动版本
    发布时间: 2025-03-07T09:06:44.93
    新闻简介: 比亚迪今日宣布,前所未有的云辇-Z 现已完成研发测试,即将跟随仰望 U7 上市与各位相见。
    ———————-

    —- IT之家新闻 End —-

  • 03月08日,星期六, 每天60秒读懂全世界!

    百度热搜新闻

    新闻来源:百度热搜榜

    1. 山东省委书记:发言时不要穿靴戴帽 3月6日,十四届全国人大三次会议山东代表团举行全体会议。省委书记提出,“各位代表发言时不要穿靴戴帽,时间控制在六分钟”。

    2. 台湾唯一称谓就是中国台湾省 3月7日,外交部长王毅谈台湾问题:台湾在联合国唯一称谓就是中国台湾省,台湾从来不是一个国家,过去不是,今后更绝无可能。

    3. 从这些关键词解读政府工作报告 6日下午,十四届全国人大三次会议举行经济主题记者会,主要经济部门的负责人回应了许多热点问题。就业、青少年身体健康……从这些关键词解读政府工作报告。

    4. 海尔总裁谈与雷军表情包:我也被逗笑 5日,雷军和周云杰同框亮相“代表通道”,海尔总裁周云杰表情包迅速走红网络。周云杰欣然接受网友的调侃,还称自己也被逗笑了。

    5. 省委书记问老乡:去年收入有多少 3月7日上午9时,十四届全国人大三次会议云南代表团举行开放团组会议。云南省委书记王宁在会中问老乡:去年收入有多少?

    6. 170人还没登机 飞机空着就飞走了 日前,一起航班乌龙事件致170名韩国旅客滞留菲律宾。他们原计划包机从菲律宾回国,到机场发现航班早已飞走,无奈滞留机场2天。

    7. 我从非洲带回一包米被王毅点名了 7日,外交部长王毅称,中非合作让非洲兄弟姐妹看得见,摸得着,有实惠。此前,一段“非洲农民托小伙将大米带回湖南”视频被热议。

    8. 有AI为何还要读书?这个回答获赞百万 近日,有学生问有AI为什么还要读书,武汉一数学老师的回答称:使唐僧成为唐僧的并不是那卷经书吗,而是取经的路。

    9. 中俄决定永久睦邻友好 3月7日,十四届全国人大三次会议举行记者会,王毅表示,无论国际环境如何变化,中俄友好的历史逻辑不变、内生动力不减。

    10. 俄方就对华关系表态 俄罗斯外交部发言人扎哈罗娃6日表示,俄中关系是国际事务中的重要稳定因素,双方为建立更加公正的世界秩序作出重大贡献。

    —- 百度热搜新闻 End —-

    知乎新闻

    新闻来源:知乎日榜

    标题: 水真的不能被压缩吗?若强行把水一直压缩,又会发生什么?
    链接: https://daily.zhihu.com/story/9779513
    ———————-
    标题: 摔炮为何一摔就响?是什么原理?
    链接: https://daily.zhihu.com/story/9779516
    ———————-
    标题: 世界上有多少个和弦?
    链接: https://daily.zhihu.com/story/9779523
    ———————-
    标题: 瞎扯 · 如何正确地吐槽
    链接: https://daily.zhihu.com/story/9779457
    ———————-

    —- 知乎新闻 End —-

    IT之家新闻

    新闻来源:ITHome之家科技新闻

    标题: 再补就真买得起了!苹果 M4 MacBook Air 16G 首发 7 折 5799 元 12 期免息
    发布时间: 2025-03-07T13:35:54.283
    新闻简介: 京东自营现已上线“苹果新品”政府补贴 + 教育优惠专区,MacBook、iPad 等新品均支持国补 + 12 期免息
    ———————-
    标题: 车评人袁启聪发布致歉声明:测评享界 S9 时得出失实结论
    发布时间: 2025-03-07T19:50:30.367
    新闻简介: “大家车言论”车评人袁启聪今日发布“致歉声明”,就去年8月发布的享界S9汽车评测视频造成的负面影响致歉。
    ———————-
    标题: 外交部长王毅:临近边界的缅甸北部地区的电诈园区已经全部清除
    发布时间: 2025-03-07T12:22:27.623
    新闻简介: 王毅外长还提到,“中国、泰国、缅甸、老挝四个国家,正在合力对泰缅边境地区的电诈进行集中打击。我们的任务就是,斩断伸向人民群众的黑手,切除网络电诈这颗毒瘤。”
    ———————-
    标题: 小米 SU7 Ultra 汽车设计手稿公布
    发布时间: 2025-03-07T10:22:33.497
    新闻简介: 小米 SU7 Ultra 于 2 月 27 日发布上市,包括 5 款配色,标准版售价 52.99 万元,纽北限量版售价 81.49 万元。
    ———————-
    标题: 雷军:小米 SU7 Ultra 小定车主 90% 以上都是传统豪车转过来的,其中 56E 用户占一半多
    发布时间: 2025-03-07T09:15:01.98
    新闻简介: 雷军昨日在北京会议中心接受采访时表示,小米 SU7 Ultra 的定价为 52.99 万元,已经属于豪车领域,当时公司认为能卖 1 万辆就是很了不起。“我们万万没有想到,发布后的三天时间,我们的销售锁单就超过了一万辆,提前完成了全年任务。”
    ———————-
    标题: 苹果 2025 款 M4 MacBook Air 跑分揭晓
    发布时间: 2025-03-07T08:52:19.567
    新闻简介: 2025款MacBook Air凭借M4芯片的强劲性能,再次刷新了轻薄笔记本的标准。无论是多核还是单核性能,M4都带来了显著提升,同时支持多屏显示功能,进一步提升了用户体验。苹果自研芯片的持续优化,再次证明了其在硬件创新上的领先地位。
    ———————-
    标题: 郭明錤:小米 16 Pro 将首次采用 3D 打印的手机中框,进一步减轻重量并提升散热性能
    发布时间: 2025-03-07T10:32:47.107
    新闻简介: 他指出,用 3D 打印生产手机中框的好处在于其镂空设计,从而可以在不牺牲手机中框结构强度的前提下进一步减轻机身重量并提升散热性能。
    ———————-
    标题: 苹果称 2025 款 M4 MacBook Air 比英特尔机型快 23 倍,但测试方法令人咋舌
    发布时间: 2025-03-07T06:38:58.907
    新闻简介: 苹果官方宣称这款设备相比最后一代(2020 款)搭载英特尔处理器的机型最高提速 23 倍,但小字注释中隐藏着关键限定条件。
    ———————-
    标题: 消息称苹果 iPhone 17 全系标配 LTPO 灵动岛屏幕、高密度钢壳异形电池
    发布时间: 2025-03-07T14:39:43.503
    新闻简介: 据博主@数码闲聊站透露,苹果iPhone 17系列将全系标配LTPO灵动岛屏幕和高密度钢壳异形电池,刷新率可能为90Hz或120Hz,但具体细节待发布确认。#iPhone17 #LTPO屏幕
    ———————-
    标题: 5 个人三小时复刻开源版 Manus,邀请码也不需要
    发布时间: 2025-03-07T15:27:29.073
    新闻简介: 5人团队3小时复刻开源版OpenManus,无需邀请码。其实现依赖MetaGPT,也为Manus“套壳风波”提供新视角。关键在于生产力提升。#开源版Manus# #OpenManus# #Manus#
    ———————-
    标题: 中美将合拍《猫和老鼠:星盘奇缘》大电影
    发布时间: 2025-03-07T17:07:02.737
    新闻简介: 电影《猫和老鼠:星盘奇缘》立项备案,备案单位为中国电影股份有限公司、华纳兄弟(美),张钢编剧。#中美合拍猫和老鼠#
    ———————-
    标题: 比亚迪官宣仰望 U7 豪华轿车即将上市,提供纯电及混动版本
    发布时间: 2025-03-07T09:06:44.93
    新闻简介: 比亚迪今日宣布,前所未有的云辇-Z 现已完成研发测试,即将跟随仰望 U7 上市与各位相见。
    ———————-

    —- IT之家新闻 End —-

  • k8s 手动管理 ServiceAccount 的 Secret


    共计 701 个字符,预计需要花费 2 分钟才能阅读完成。

    v1.22 之前的 Kubernetes 版本会自动创建凭据访问 Kubernetes API。 这种更老的机制基于先创建令牌 Secret,然后将其挂载到正运行的 Pod 中。

    而更新的版本的 K8s 则不会直接创建,使用kubectl describe sa xx命令可以看见 Tokens 的值为 none,此时需要进行手动创建 Sercet。

    假设现在有一个名为 test 的 serviceAccount,所处的命名空间是 dev,则进行如下操作即可获取到 test 用户的 token

    # 设置 serviceAccount 环境变量
    export serviceAccount=test
    # 设置命名空间环境变量
    export namespace=dev
    
    # 创建通用文件
    cat > sa.yaml<<EOF
    apiVersion: v1
    kind: Secret
    metadata:
      name: sa-token
      namespace: default
      annotations:
        kubernetes.io/service-account.name: sa
    type: kubernetes.io/service-account-token
    EOF
    # 修改文件名称和内容
    mv sa.yaml sa-${serviceAccount}.yaml && \
    sed -i "s/sa/${serviceAccount}/g" sa-${serviceAccount}.yaml && \
    sed -i "s/default/${namespace}/g" sa-${serviceAccount}.yaml
    
    # 创建 Secret
    kubectl apply -f sa-${serviceAccount}.yaml

    查看生成的 token,如下图:

    k8s 手动管理 ServiceAccount 的 Secret

    提醒:本文发布于798天前,文中所关联的信息可能已发生改变,请知悉!

    />

    Tips:清朝云网络工作室

  • Shell 脚本备份多个服务器目录数据


    共计 1584 个字符,预计需要花费 4 分钟才能阅读完成。

    比较重要的数据最好还是经常备份,以免数据丢失后悔莫及。对于有快照的服务器,可以利用快照进行备份,对于没有快照的,可以利用 rsync 备份到本地。

    以下脚本可以方便地进行备份,修改配置后定时运行即可:

    #!/bin/bash
    
    # 日志统一重定向
    # 将所有输出重定向到 /tmp/backup.log,包括错误信息
    exec >> /tmp/backup.log 2>&1
    
    # 定义要排除的多个文件/目录(默认的排除项)
    global_exclude_dirs=("*.git" "tmp")
    
    # 定义主机的配置信息
    hosts=(
        # 每个主机配置:用户名, 主机IP, ssh端口, ssh密码, 远程目录, 本地目录, 排除的目录
        "root,172.21.9.126,22,test,/home/docker,/back/126,exclude_dirs",
        "root,172.21.9.127,22,test2,/home/docker,/back/127,exclude_dirs"
    )
    
    # 获取当前时间并格式化为 YYYY-MM-DD HH:MM:SS 格式
    log_time() {
        date +"%Y-%m-%d %H:%M:%S"
    }
    
    # 记录备份开始时间
    echo "$(log_time) 备份脚本开始运行"
    
    # 从配置数组中读取每台主机的备份信息并执行操作
    for host_info in "${hosts[@]}"; do
        # 解析主机配置
        IFS=',' read -r username host_ip ssh_port password remote_dir local_dir exclude_dirs <<< "$host_info"
    
        # 设置日志文件
        log_file="$local_dir/backup.log"
    
        # 确保日志目录存在
        mkdir -p "$(dirname "$log_file")"
    
        # 记录当前主机的备份开始时间
        echo "$(log_time) 主机 $host_ip 开始备份"
        echo "$(log_time) 主机 $host_ip 开始备份" >> "$log_file"
    
        # 如果指定了特定的排除目录,则使用它们,否则使用全局排除目录
        if [ -z "$exclude_dirs" ]; then
            exclude_dirs="${global_exclude_dirs[*]}"
        fi
    
        # 构建排除的参数
        exclude_params=""
        IFS=',' read -r -a exclude_array <<< "$exclude_dirs"
        for exclude_dir in "${exclude_array[@]}"; do
            exclude_params+=" --exclude=$exclude_dir"
        done
    
        # 执行增量备份,修改了目标路径,使得远程目录本身被备份到本地
        echo "$(log_time) 执行备份 $host_ip:$remote_dir 到本地 $local_dir" >> "$log_file"
        sshpass -p "$password" rsync -avz --delete $exclude_params -e "ssh -p $ssh_port" "$username@$host_ip:$remote_dir" "$local_dir/" >> "$log_file" 2>&1
    
        # 备份完成
        echo "$(log_time) 主机 $host_ip 备份完成" >> "$log_file"
        echo "$(log_time) 主机 $host_ip 备份完成"
    done
    
    # 记录备份执行结束时间
    echo "$(log_time) 备份脚本结束运行"

    使用该脚本可以对所有服务器一次性备份,也可以指定服务器进行备份,输入参数即可,参数按关键词匹配:

    # 只备份 172.21.9.126
    bash backup.sh 126
    # 备份 172.21.9.126 和 172.21.9.127
    bash backup.sh 126 127
    # 或者
    bash backup.sh 12

    Tips:清朝云网络工作室

  • Java 作为客户端 grpc 使用


    共计 6062 个字符,预计需要花费 16 分钟才能阅读完成。

    1. 引入依赖以及插件

    依赖包如下:

    <!--  处理 .proto 文件并生成 Java 类 -->
    <dependency>
        <groupId>io.grpc</groupId>
        <artifactId>grpc-protobuf</artifactId>
        <version>1.57.2</version>
    </dependency>
    
    <!-- 生成 gRPC 客户端和服务器端的 Stub 代码 -->
    <dependency>
        <groupId>io.grpc</groupId>
        <artifactId>grpc-stub</artifactId>
        <version>1.57.2</version>
    </dependency>
    
    <!-- 负责 gRPC 的底层 HTTP/2 网络通信-->
    <dependency>
        <groupId>io.grpc</groupId>
        <artifactId>grpc-netty-shaded</artifactId>
        <version>1.57.2</version>
    </dependency>

    maven 插件:

    <plugins>
        <!-- protobuf 插件,需要时打开即可 -->
        <plugin>
            <groupId>org.xolstice.maven.plugins</groupId>
            <artifactId>protobuf-maven-plugin</artifactId>
            <version>0.6.1</version>
            <configuration>
                <protocArtifact>com.google.protobuf:protoc:3.5.1-1:exe:${os.detected.classifier}</protocArtifact>
                <pluginId>grpc-java</pluginId>
                <pluginArtifact>io.grpc:protoc-gen-grpc-java:1.14.0:exe:${os.detected.classifier}</pluginArtifact>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>compile</goal>
                        <goal>compile-custom</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
    
    <extensions>
        <extension>
            <groupId>kr.motd.maven</groupId>
            <artifactId>os-maven-plugin</artifactId>
            <version>1.7.1</version>
        </extension>
    </extensions>

    Java 作为客户端 grpc 使用

    />

    • compile 负责生成 Protobuf 消息类,用于数据序列化和反序列化。

      • XXX.java(Protobuf 消息类):对应 .proto 文件中的 message 定义,作为数据传输对象 (DTO)。
      • XXXOrBuilder.java(接口):用于支持 Protobuf 生成的类的 Builder 模式。
    • compile-custom 作用是调用 protoc-gen-grpcjava 插件,生成 gRPC 相关的 Java 代码。

      • XXXGrpc.java(gRPC 服务类):包含 gRPC 服务器和客户端的存根 (stub)。
      • XXXGrpc.XxxBlockingStub(同步调用的客户端存根)
      • XXXGrpc.XxxFutureStub(异步调用的客户端存根)
      • XXXGrpc.XxxStub(非阻塞调用的客户端存根)
      • XXXGrpc.XXXImplBase(服务器端基类,服务端需要继承该类并实现具体逻辑)

    2. 准备proto文件

    power.proto

    syntax = "proto3";
    
    option java_multiple_files = false;
    option java_package = "com.unipower.robot.server.component.grpc.power";
    
    package powerManagement;
    
    import "google/protobuf/empty.proto";
    
    // 设备设置项
    message DeviceSetting {
      string device = 1;    // 设备名称
      bool status = 2;      // 状态
      bool necessary = 3;   // 是否必要
    }
    
    // 设备电源控制请求
    message DevicePowerControlRequest {
    
      // 设备控制指令。
      repeated DeviceSetting settings = 1;
    }
    
    // 设备电源控制响应
    message DevicePowerControlResponse {
    
      // 状态码。
      // 成功:200;失败:500。
      int32 code = 1;
    
      // 操作结果消息。
      // 成功:操作成功;失败:操作失败,失败原因
      string message = 2;
    }
    
    message AppLayerPowerState {
      // 电池数据
      float voltage = 1;
      float current = 2;
      float rsoc = 3;
      float nominalCapacity = 4;
      uint32 cycleCount = 5;
      // ----
    
      // N1数据
      bool shutdownSignal = 6;
      bool buzzer = 7;
      bool motor = 8;
      // ----
    
      // N2数据
      bool appLayerCamera = 9;
      bool radar = 10;
      // ----
    
      // 数据采集时间戳
      uint64 timestamp = 11;
    
      // 可变部分
      string status = 12;
    }
    
    // L1E AppLayerPowerState.status JSON format
    // "sideCharging": bool // 是否通过侧边充电中
    // "bottomCharging": bool // 是否通过底部充电中
    // "bottomChargeEnabled": bool // 底部充电开关状态
    // "SC": bool // SC电源开关状态
    // "controlBoardFan": bool // 控制板散热风扇开关状态
    // "appBoardFan": bool // 应用板散热风扇开关状态
    // "wiperFan": bool // 雨刷风扇开关状态
    // "emergencyStopSignal": bool // 急停信号
    // "alarmLight": bool // 告警灯开关状态
    
    // 电源管理服务定义
    service PowerManagementService {
      // 控制设备电源状态
      rpc SetDevicePowerState (DevicePowerControlRequest) returns (DevicePowerControlResponse);
    
      // 获取电源状态状态
      rpc GetAppLayerPowerStateOnce (google.protobuf.Empty) returns (AppLayerPowerState);
      rpc GetAppLayerPowerStateStream (google.protobuf.Empty) returns (stream AppLayerPowerState);
    }

    然后将 proto 文件放在 src/main/proto 目录下即可。

    如果 proto 文件比较稳定,可以用插件编译后,将 target 目录下插件生成的代码直接拷贝到项目中,以免每次启动或者打包都重新编译 proto 文件。

    3. 配置以及使用

    配置 gRPC 客户端的连接。

    GrpcClientConfig.java

    @Configuration
    public class GrpcClientConfig {
    
        @Value("${power.grpcAddress}")
        private String powerGrpcAddress;
    
        @Value("${power.grpcPort}")
        private int powerGrpcPort;
    
        // 心跳超时时间,单位s
        private static final int KEEP_ALIVE_TIME_OUT = 10;
    
        // 最大尝试重连次数
        private static final int RETRY_TIMES = 3;
    
        // 阻塞调用超时时间,单位s
        private static final int BLOCKING_REQUEST_TIME_OUT = 30;
    
        @Bean
        public ManagedChannel powerChannel() {
            return ManagedChannelBuilder.forAddress(powerGrpcAddress, powerGrpcPort)
                    .usePlaintext()
                    .keepAliveTime(KEEP_ALIVE_TIME_OUT, TimeUnit.SECONDS)
                    .enableRetry()
                    .maxRetryAttempts(RETRY_TIMES)
                    .build();
        }
    
        /**
         * 同步阻塞的存根
         * @param powerChannel
         * @return
         */
        @Bean
        public PowerManagementServiceGrpc.PowerManagementServiceBlockingStub powerManagementServiceBlockingStub(ManagedChannel powerChannel) {
            return PowerManagementServiceGrpc.newBlockingStub(powerChannel)
                    .withDeadlineAfter(BLOCKING_REQUEST_TIME_OUT, TimeUnit.SECONDS);
        }
    
        /**
         * 异步非阻塞的存根
         * @param powerChannel
         * @return
         */
        @Bean
        public PowerManagementServiceGrpc.PowerManagementServiceStub powerManagementServiceStub(ManagedChannel powerChannel) {
            return PowerManagementServiceGrpc.newStub(powerChannel);
        }
    }

    RobotPowerClient.java

    @Slf4j
    @Component
    public class RobotPowerClient {
        @Autowired
        PowerManagementServiceGrpc.PowerManagementServiceBlockingStub powerManagementServiceBlockingStub;
    
        @Autowired
        PowerManagementServiceGrpc.PowerManagementServiceStub asyncPowerManagementServiceStub;
    
        /**
         * 设置各设备的电源状态
         * @param deviceSettings
         * @return
         */
        public boolean applyDeviceSettings(Power.DeviceSetting... deviceSettings){
            log.debug("调用 grpc 接口设置设备状态参数:{}", deviceSettings);
            Power.DevicePowerControlResponse response = powerManagementServiceBlockingStub.setDevicePowerState(
                    Power.DevicePowerControlRequest.newBuilder()
                            .addAllSettings(Arrays.asList(deviceSettings))
                            .build()
            );
            log.debug("调用 grpc 接口设置设备状态结果:{}", response);
            return response.getCode() == ErrorCode.OK.getCode();
        }
    
        /**
         * 流式获取电源状态信息
         * @param callback
         */
        public void getAppLayerPowerStateStream(Consumer<Power.AppLayerPowerState> callback){
            asyncPowerManagementServiceStub.getAppLayerPowerStateStream(Empty.newBuilder().build(), new StreamObserver<Power.AppLayerPowerState>() {
    
                @Override
                public void onNext(Power.AppLayerPowerState appLayerPowerState) {
                    // 调用传入的回调方法
                    if (callback != null) {
                        callback.accept(appLayerPowerState);
                    }
                }
    
                @Override
                public void onError(Throwable throwable) {
                    log.error("流式获取电源状态信息异常", throwable);
                    retry();
                }
    
                @Override
                public void onCompleted() {
                    log.error("服务端终止上送电源状态");
                    retry();
                }
    
                private void retry() {
                    log.info("尝试重新启动流式获取电源状态信息...");
                    try {
                        Thread.sleep(3000);
                    } catch (InterruptedException e) {
                        log.error(e.getMessage(), e);
                        Thread.currentThread().interrupt();
                    }
                    getAppLayerPowerStateStream(callback);
                }
            });
        }
    
    }

    4. 可能存在的问题

    1. 长连接无感知连接断开问题解决

    该问题出现在 grpc 客户端调用,服务端流式返回。如果未设置超时时间,即使服务端网络断开,客户端仍无法感知。

    解决方案是配置 keepalive,可以让客户端知道服务端不可达,从而进行重试或断开连接,详见 GrpcClientConfig.java

    1. 超时时间设置

    阻塞式grpc调用,需要配置超时时间,使用 withDeadlineAfter 配置超时时间,详见 GrpcClientConfig.java

    1. gRPC自带重试机制失败后的处理

    即使 grpc 配置重试,重试指定次数后抛出异常,此后不再重试。

    解决方案是业务层配置重试兜底,详见 RobotPowerClient.java

    1. 网络断开再重连数据一次性收到所有返回

    作为服务端来说,推送数据即使网络断开了,由于 grpc 基于 tcp,重试机制会一直尝试发送没有送达的数据包。所以当网络恢复,会有大量堆积的数据推送到客户端。

    解决方案是服务端配置 keepalive,,一旦发现客户端不可达,立即关闭连接,等待客户端再次发起请求。

    Tips:清朝云网络工作室