[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"sysconfig-fetch":3,"theme-fetch":23,"friends":318,"article:nacos-service-discovery-api":478,"stats-fetch":506},{"basic":4,"upload":17,"oauth":20},{"author":5,"author_avatar":6,"author_desc":7,"blog_url":8,"cravatar_url":9,"description":10,"emojis":11,"favicon":11,"icp":12,"keywords":13,"meting_api":14,"police_record":11,"subtitle":15,"title":16},"星辰","https:\u002F\u002Fblog.strarry.top\u002Fuploads\u002Fsite\u002F2026\u002F07\u002F20260712161111_dszm8ofv.jpg","前景可待 未来可期","https:\u002F\u002Fblog.strarry.top","https:\u002F\u002Fcravatar.cn\u002Favatar\u002F%s?s=200&d=robohash","星辰の笔记，分享Java、Python、Spring Cloud、Vue前端、ES6等编程实战教程与技术笔记，记录从校园到职场的成长历程，融合技术开发与人文思考。","","冀ICP备2025110107号","博客,技术,编程,Java,Vue,星辰","https:\u002F\u002Fmeting.strarry.top\u002Fapi","StrarryBLOG","星辰の笔记",{"local_path":18,"max_file_size":19},".\u002Fuploads","5",{"github.enabled":21,"google.enabled":21,"microsoft.enabled":21,"oidc.enabled":21,"qq.enabled":22,"wechat.enabled":21},"false","true",{"slug":24,"name":25,"version":26,"author":27,"description":28,"license":29,"repo":30,"is_active":31,"config":32,"menus":154},"default","默认主题","1.0.0","Talen","StarryBlog 默认主题","MIT","https:\u002F\u002Fgithub.com\u002Ftalen8\u002FStarryBlog",true,{"font":11,"slogan":33,"home_url":34,"screenshot":35,"about_story":36,"author_desc":11,"description":10,"established":37,"home_layout":38,"wechat_name":11,"about_unions":39,"announcement":49,"author_email":50,"author_photo":11,"footer_links":51,"moments_size":55,"typing_texts":56,"about_profile":63,"footer_social":87,"wechat_qrcode":11,"about_creation":103,"about_describe":110,"about_versions":111,"sidebar_social":120,"about_motto_sub":132,"about_socialize":133,"message_content":11,"about_exhibition":11,"about_motto_main":138,"background_image":143,"donation_methods":144,"theme_dark_start":150,"about_personality":151,"theme_light_start":152,"about_describe_tips":153},"Code | Think | Share | Repeat","https:\u002F\u002Fstrarry.top","https:\u002F\u002Fblog.strarry.top\u002Fuploads\u002Fsiteshot.jpg","欢迎来到我的个人博客！这里是我分享技术、记录生活、积累知识的小天地。希望这些内容能对你有所帮助。如果你有任何想法或建议，欢迎随时与我交流！","2025-07-20","waterfall",[40,43,46],{"url":41,"name":42},"https:\u002F\u002Fbf.zzxworld.com","BlogFinder",{"url":44,"name":45},"https:\u002F\u002Fstoreweb.cn","个站商店",{"url":47,"name":48},"https:\u002F\u002Fwww.boyouquan.com","博友圈","欢迎来到我的博客\u003Cbr>\u003Cstrong>记录技术、生活与思考\u003C\u002Fstrong>\u003Cbr>\u003Cspan style=\"color:#e03131\">内容持续更新中\u003C\u002Fspan>\u003Cbr>\u003Ca href=\"\u002Fabout\">了解更多\u003C\u002Fa>","1628773490@qq.com",[52],{"url":53,"name":54},"\u002Fsubscribe","订阅",30,[57,59,61],{"value":58},"是微风，是晚霞，是心跳，是无可替代",{"value":60},"先努力让自己发光，对的人才能迎着光而来",{"value":62},"我走的很慢，但从不放弃",[64,67,71,75,79,83],{"color":65,"label":66,"value":5},"#43a6c6","姓名",{"color":68,"label":69,"value":70},"#c69043","生于","2002",{"color":72,"label":73,"value":74},"#d44040","故乡","中国",{"color":76,"label":77,"value":78},"#b04fe6","职业","全栈开发者",{"color":80,"label":81,"value":82},"#43c66f","兴趣","编程与创作",{"color":84,"label":85,"value":86},"#c643b3","梦想","创造价值",[88,93,96,100],{"url":89,"icon":90,"name":91,"position":92},"1","ri-mail-line","Email","left",{"url":89,"icon":94,"name":95,"position":92},"ri-twitter-x-line","X",{"url":89,"icon":97,"name":98,"position":99},"ri-github-line","GitHub","right",{"url":89,"icon":101,"name":102,"position":99},"ri-bilibili-line","Bilibili",[104,107],{"url":105,"name":106},"https:\u002F\u002Fjuejin.cn","掘金",{"url":108,"name":109},"https:\u002F\u002Fzhihu.com","知乎","持续学习的终身践行者，用代码和文字构建小小世界。在这里记录技术洞见、思考碎片和生活灵感。保持好奇，步履不停。",[112,114,117],{"name":113,"version":26},"StarryBLOG",{"name":115,"version":116},"Vue","3.5.34",{"name":118,"version":119},"Go","1.23",[121,123,124,127,129],{"url":122,"icon":97,"name":98},"https:\u002F\u002Fgithub.com\u002Fsongyuesheng",{"url":89,"icon":90,"name":91},{"url":89,"icon":125,"name":126},"ri-qq-line","QQ",{"url":89,"icon":101,"name":128},"BiliBili",{"url":89,"icon":130,"name":131},"ri-tiktok-line","抖音","用代码和文字记录生活，分享知识。",[134,136],{"url":135,"name":98},"https:\u002F\u002Fgithub.com",{"url":137,"name":91},"mailto:contact@example.com",[139,141],{"value":140},"前景可待，",{"value":142},"未来可期。","\u002Fuploads\u002Fbackgrounds\u002Fa0e2d9d2-ee81-4eba-aece-67d4bb4c6997.png",[145,148],{"name":146,"qrcode":11,"description":147},"微信","扫一扫，支持作者",{"name":149,"qrcode":11,"description":147},"支付宝","22:00","INFJ-A","06:00","开发者 · 创作者 · 终身学习者",{"aggregate":155,"footer":177,"navigation":260},[156],{"id":157,"title":158,"url":11,"icon":11,"sort":159,"is_enabled":31,"children":160},10,"个站",1,[161,166,172],{"id":162,"title":163,"url":164,"icon":11,"sort":159,"is_enabled":31,"children":165},11,"关于博主","\u002Fabout",[],{"id":167,"title":168,"url":169,"icon":11,"sort":170,"is_enabled":31,"children":171},29,"友情链接","\u002Ffriend",2,[],{"id":55,"title":173,"url":174,"icon":11,"sort":175,"is_enabled":31,"children":176},"网站统计","\u002Fstatistics",3,[],[178,203,212,226,250],{"id":179,"title":180,"url":11,"icon":11,"sort":159,"is_enabled":31,"children":181},12,"导航",[182,187,192,197],{"id":183,"title":184,"url":185,"icon":11,"sort":159,"is_enabled":31,"children":186},13,"文章归档","\u002Farchive",[],{"id":188,"title":189,"url":190,"icon":11,"sort":170,"is_enabled":31,"children":191},14,"文章分类","\u002Fcategories",[],{"id":193,"title":194,"url":195,"icon":11,"sort":175,"is_enabled":31,"children":196},15,"文章标签","\u002Ftags",[],{"id":198,"title":199,"url":200,"icon":11,"sort":201,"is_enabled":31,"children":202},16,"即时动态","\u002Fmoment",4,[],{"id":204,"title":205,"url":11,"icon":11,"sort":170,"is_enabled":31,"children":206},17,"直达",[207],{"id":208,"title":209,"url":210,"icon":11,"sort":159,"is_enabled":31,"children":211},18,"申请友链","\u002Ffriend#apply",[],{"id":213,"title":214,"url":11,"icon":11,"sort":175,"is_enabled":31,"children":215},19,"服务",[216,221],{"id":217,"title":218,"url":219,"icon":11,"sort":159,"is_enabled":31,"children":220},20,"服务状态","\u002Fstatus",[],{"id":222,"title":223,"url":224,"icon":11,"sort":170,"is_enabled":31,"children":225},21,"反馈投诉","\u002Ffeedback",[],{"id":227,"title":228,"url":11,"icon":11,"sort":201,"is_enabled":31,"children":229},22,"协议",[230,235,240,245],{"id":231,"title":232,"url":233,"icon":11,"sort":159,"is_enabled":31,"children":234},23,"Cookies","\u002Fcookies",[],{"id":236,"title":237,"url":238,"icon":11,"sort":170,"is_enabled":31,"children":239},24,"隐私协议","\u002Fprivacy",[],{"id":241,"title":242,"url":243,"icon":11,"sort":175,"is_enabled":31,"children":244},25,"版权协议","\u002Fcopyright",[],{"id":246,"title":247,"url":248,"icon":11,"sort":201,"is_enabled":31,"children":249},26,"提问须知","\u002Fask",[],{"id":251,"title":252,"url":11,"icon":11,"sort":253,"is_enabled":31,"children":254},27,"支持",5,[255],{"id":256,"title":257,"url":258,"icon":11,"sort":159,"is_enabled":31,"children":259},28,"腾讯云","https:\u002F\u002Fcloud.tencent.com",[],[261,264,267,270,282,285,290,303],{"id":159,"title":262,"url":185,"icon":11,"sort":159,"is_enabled":31,"children":263},"归档",[],{"id":170,"title":265,"url":190,"icon":11,"sort":170,"is_enabled":31,"children":266},"分类",[],{"id":175,"title":268,"url":195,"icon":11,"sort":175,"is_enabled":31,"children":269},"标签",[],{"id":201,"title":271,"url":11,"icon":11,"sort":201,"is_enabled":31,"children":272},"友链",[273,277],{"id":274,"title":275,"url":169,"icon":11,"sort":253,"is_enabled":31,"children":276},34,"友链展示",[],{"id":278,"title":279,"url":280,"icon":11,"sort":253,"is_enabled":31,"children":281},35,"朋友动态","\u002Ffcircle",[],{"id":253,"title":283,"url":200,"icon":11,"sort":253,"is_enabled":31,"children":284},"动态",[],{"id":286,"title":287,"url":288,"icon":11,"sort":286,"is_enabled":31,"children":289},6,"留言","\u002Fmessage",[],{"id":291,"title":292,"url":164,"icon":11,"sort":291,"is_enabled":31,"children":293},7,"关于",[294,298],{"id":295,"title":296,"url":164,"icon":11,"sort":253,"is_enabled":31,"children":297},36,"关于站长",[],{"id":299,"title":300,"url":301,"icon":11,"sort":253,"is_enabled":31,"children":302},37,"我的设备","\u002Fdevices",[],{"id":304,"title":305,"url":11,"icon":11,"sort":306,"is_enabled":31,"children":307},31,"工具",8,[308,313],{"id":309,"title":310,"url":311,"icon":11,"sort":253,"is_enabled":31,"children":312},32,"成长记录工具","https:\u002F\u002Fbecomingme.cn\u002F",[],{"id":314,"title":315,"url":316,"icon":11,"sort":253,"is_enabled":31,"children":317},33,"布丁简历","https:\u002F\u002Fresume.strarry.top",[],[319],{"type_id":159,"type_name":320,"type_sort":159,"friends":321},"默认分组",[322,329,335,341,347,353,359,365,371,377,383,389,395,401,407,413,419,425,432,438,444,450,456,461,466,472],{"id":227,"name":323,"url":324,"description":325,"avatar":326,"screenshot":327,"sort":227,"is_invalid":328},"yunsen2025 的小窝","https:\u002F\u002Fwww.yunsen2025.top","计算机爱好者","https:\u002F\u002Fimg.alicdn.com\u002Fbao\u002Fuploaded\u002Fi4\u002FO1CN01TWOpM42DSyY5nC0hM_!!0-mtopupload.jpg","https:\u002F\u002Fs0.wp.com\u002Fmshots\u002Fv1\u002Fhttps:\u002F\u002Fwww.yunsen2025.top\u002F?w=400&h=300",false,{"id":193,"name":330,"url":331,"description":332,"avatar":333,"screenshot":334,"sort":193,"is_invalid":328},"undefim blog","https:\u002F\u002Fundefi.me","Crafting my own path, forever undefined!","https:\u002F\u002Fundefi.me\u002Fupload\u002Fb2cc1237-c3cf-44ef-a6b9-a83528b74f9f.png","https:\u002F\u002Fs0.wp.com\u002Fmshots\u002Fv1\u002Fhttps:\u002F\u002Fundefi.me\u002F?w=400&h=300",{"id":162,"name":336,"url":337,"description":338,"avatar":339,"screenshot":340,"sort":157,"is_invalid":328},"百里博客","https:\u002F\u002Fblog.my0811.cn","一个高中生的博客","https:\u002F\u002Fblog.my0811.cn\u002Ffavicon.ico","https:\u002F\u002Fs0.wp.com\u002Fmshots\u002Fv1\u002Fhttps:\u002F\u002Fblog.my0811.cn\u002F?w=400&h=300",{"id":179,"name":342,"url":343,"description":344,"avatar":345,"screenshot":346,"sort":157,"is_invalid":328},"流月小站","https:\u002F\u002Fblog.flowmoon.cn\u002F","且听风吟，静待花开","https:\u002F\u002Fcdn.liuyue.net\u002Fassets\u002Fimg\u002Favatar.jpg","https:\u002F\u002Fs0.wp.com\u002Fmshots\u002Fv1\u002Fhttps:\u002F\u002Fblog.flowmoon.cn\u002F?w=400&h=300",{"id":183,"name":348,"url":349,"description":350,"avatar":351,"screenshot":352,"sort":157,"is_invalid":328},"叶子のBlog","https:\u002F\u002Fblog.goshujin.top\u002F","叶子のBlog 是一个专注于分享前端开发、网络技术、服务器搭建、科技热点与生活感悟的个人博客，作者为垂叶叶叶","https:\u002F\u002Fq2.qlogo.cn\u002Fheadimg_dl?dst_uin=319213657&spec=0","https:\u002F\u002Fs0.wp.com\u002Fmshots\u002Fv1\u002Fhttps:\u002F\u002Fblog.goshujin.top\u002F?w=400&h=300",{"id":188,"name":354,"url":355,"description":356,"avatar":357,"screenshot":358,"sort":157,"is_invalid":328},"鈴奈咲桜","https:\u002F\u002Fblog.sakura.ink","愛することを忘れないで","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F91101909?v=4","https:\u002F\u002Fs0.wp.com\u002Fmshots\u002Fv1\u002Fhttps:\u002F\u002Fblog.sakura.ink\u002F?w=400&h=300",{"id":198,"name":360,"url":361,"description":362,"avatar":363,"screenshot":364,"sort":157,"is_invalid":328},"fishcpy的小破站","https:\u002F\u002Fblog.fis.ink","非淡泊无以明志，非宁静无以致远","https:\u002F\u002Fwww.fis.ink\u002Fimg\u002Flogo.png","https:\u002F\u002Fs0.wp.com\u002Fmshots\u002Fv1\u002Fhttps:\u002F\u002Fblog.fis.ink\u002F?w=400&h=300",{"id":208,"name":366,"url":367,"description":368,"avatar":369,"screenshot":370,"sort":157,"is_invalid":328},"Hyde Blog","https:\u002F\u002Fteek.seasir.top","人心中的成见是一座大山","https:\u002F\u002Fteek.seasir.top\u002Ffavicon.ico","https:\u002F\u002Fs0.wp.com\u002Fmshots\u002Fv1\u002Fhttps:\u002F\u002Fteek.seasir.top\u002F?w=400&h=300",{"id":217,"name":372,"url":373,"description":374,"avatar":375,"screenshot":376,"sort":157,"is_invalid":328},"Codfish Blog","https:\u002F\u002Fcodfish.top","🐟🐟🐟","https:\u002F\u002Fcodfish.top\u002Ffavicon\u002F1.jpg","https:\u002F\u002Fs0.wp.com\u002Fmshots\u002Fv1\u002Fhttps:\u002F\u002Fcodfish.top\u002F?w=400&h=300",{"id":222,"name":378,"url":379,"description":380,"avatar":381,"screenshot":382,"sort":157,"is_invalid":328},"ZLA 小站","https:\u002F\u002Fzla.pub\u002F","ZL Asica 的个人博客，记录旅行与生活，也分享前端\u002F全栈\u002FHCI 开发笔记、TypeScript\u002FReact\u002FNext.js 及更多实战、以及个人开源项目的技术剖析与复盘。","https:\u002F\u002Fadmin.strarry.top\u002Fuploads\u002F友情链接A\u002F2026\u002F08\u002F20260808095402_k4hojuka.png","https:\u002F\u002Fs0.wp.com\u002Fmshots\u002Fv1\u002Fhttps:\u002F\u002Fzla.pub\u002F?w=400&h=300",{"id":236,"name":384,"url":385,"description":386,"avatar":387,"screenshot":388,"sort":157,"is_invalid":328},"张洪Heo","https:\u002F\u002Fblog.zhheo.com\u002F","分享设计与科技生活","https:\u002F\u002Fimg.zhheo.com\u002Fi\u002F67d8fa75943e4.webp","https:\u002F\u002Fs0.wp.com\u002Fmshots\u002Fv1\u002Fhttps:\u002F\u002Fblog.zhheo.com\u002F?w=400&h=300",{"id":246,"name":390,"url":391,"description":392,"avatar":393,"screenshot":394,"sort":157,"is_invalid":328},"小改学习志","https:\u002F\u002Fwww.haoyu233.com","孩儿立志出乡关，学不成名誓不还。","https:\u002F\u002Fcn.cravatar.com\u002Favatar\u002F14e584196d31262ea144ab4d75d4c083?s=600&r=g","https:\u002F\u002Fs0.wp.com\u002Fmshots\u002Fv1\u002Fhttps:\u002F\u002Fwww.haoyu233.com\u002F?w=400&h=300",{"id":251,"name":396,"url":397,"description":398,"avatar":399,"screenshot":400,"sort":157,"is_invalid":328},"Wer Blog","https:\u002F\u002Fblog.isyyo.com","The only way to do great is to love what you do","https:\u002F\u002Fblog.isyyo.com\u002Ffavicon\u002Flogo.png","https:\u002F\u002Fs0.wp.com\u002Fmshots\u002Fv1\u002Fhttps:\u002F\u002Fblog.isyyo.com\u002F?w=400&h=300",{"id":256,"name":402,"url":403,"description":404,"avatar":405,"screenshot":406,"sort":157,"is_invalid":328},"MIFENG BLOG","https:\u002F\u002Fblog.imbee.top\u002F","路漫漫其修远兮，吾将上下而求索","https:\u002F\u002Fcdn.mfawa.top\u002Fimage\u002Flogo.svg","https:\u002F\u002Fs0.wp.com\u002Fmshots\u002Fv1\u002Fhttps:\u002F\u002Fblog.imbee.top\u002F?w=400&h=300",{"id":167,"name":408,"url":409,"description":410,"avatar":411,"screenshot":412,"sort":157,"is_invalid":328},"TNTの博客","https:\u002F\u002Fblog.tnto.fun\u002F","萝卜青菜，各有所爱","https:\u002F\u002Fpic.xn--kiv.fun\u002Fuploads\u002F2025\u002F08\u002F13\u002F13\u002F689c2986e86c4.png","https:\u002F\u002Fs0.wp.com\u002Fmshots\u002Fv1\u002Fhttps:\u002F\u002Fblog.tnto.fun\u002F?w=400&h=300",{"id":55,"name":414,"url":415,"description":416,"avatar":417,"screenshot":418,"sort":157,"is_invalid":328},"清羽飞扬","https:\u002F\u002Fblog.liushen.fun\u002F","柳影曳曳，清酒孤灯，扬笔撒墨，心境如霜","https:\u002F\u002Fblog.liushen.fun\u002Finfo\u002Favatar.ico","https:\u002F\u002Fblog.liushen.fun\u002Finfo\u002Fsiteshot.jpg",{"id":304,"name":420,"url":421,"description":422,"avatar":423,"screenshot":424,"sort":157,"is_invalid":328},"默小班","https:\u002F\u002Fwww.memxb.top\u002F","一个初中生的小站点。","https:\u002F\u002Fwmimg.com\u002Fi\u002F780\u002F2025\u002F07\u002F68677fe53c2d1.png","https:\u002F\u002Fs0.wp.com\u002Fmshots\u002Fv1\u002Fhttps:\u002F\u002Fwww.memxb.top\u002F?w=400&h=300",{"id":426,"name":427,"url":428,"description":429,"avatar":430,"screenshot":431,"sort":426,"is_invalid":328},9,"二叉树树","https:\u002F\u002F2x.nz\u002F","分享网络技术、服务器部署、内网穿透、静态网站搭建......","https:\u002F\u002Fq1.qlogo.cn\u002Fg?b=qq&nk=2726730791&s=640","https:\u002F\u002Fs0.wp.com\u002Fmshots\u002Fv1\u002Fhttps:\u002F\u002F2x.nz\u002F?w=400&h=300",{"id":291,"name":433,"url":434,"description":435,"avatar":436,"screenshot":437,"sort":291,"is_invalid":328},"小张的个人博客","http:\u002F\u002Fmrzym.top\u002F","一个初级前端开发者的博客","http:\u002F\u002Fimg.mrzym.top\u002FFsjKJtHwnWCvmbk9V4MWcZrSKhm-","\r\nhttps:\u002F\u002Fs0.wp.com\u002Fmshots\u002Fv1\u002Fhttp:\u002F\u002Fmrzym.top\u002F?w=400&h=300",{"id":286,"name":439,"url":440,"description":441,"avatar":442,"screenshot":443,"sort":286,"is_invalid":328},"吐司气泡","https:\u002F\u002Fblog.toastbubble.top\u002F","这里有多的吐司快来品鉴","https:\u002F\u002Fblog.toastbubble.top\u002Favatar.webp","https:\u002F\u002Fs0.wp.com\u002Fmshots\u002Fv1\u002Fhttps:\u002F\u002Fblog.toastbubble.top\u002F?w=400&h=300",{"id":253,"name":445,"url":446,"description":447,"avatar":448,"screenshot":449,"sort":253,"is_invalid":328},"尘の个人博客","https:\u002F\u002Fblog.mcxiaochen.top\u002F","一个高中生 UP 搭的博客 QwQ","https:\u002F\u002Fblog.mcxiaochen.top\u002Ffavicon.ico","https:\u002F\u002Fs0.wp.com\u002Fmshots\u002Fv1\u002Fhttps:\u002F\u002Fblog.mcxiaochen.top\u002F?w=400&h=300",{"id":309,"name":451,"url":452,"description":453,"avatar":454,"screenshot":455,"sort":253,"is_invalid":328},"mccsjs","https:\u002F\u002Fhexo.seln.cn\u002F","点一盏灯，等一个迷路的夜🍁🍁🍁","https:\u002F\u002Fadmin.strarry.top\u002Fuploads\u002F友情链接A\u002F2026\u002F08\u002F20260804093219_moc2g0tx.png","https:\u002F\u002Fhexo.seln.cn\u002Fimg\u002Fa.jpg",{"id":314,"name":457,"url":458,"description":7,"avatar":459,"screenshot":460,"sort":253,"is_invalid":328},"爱吃猫的鱼","https:\u002F\u002Fblog.talen.top","https:\u002F\u002Fimage.talen.top\u002F20251229184705_wgsva7g9.png","https:\u002F\u002Fimage.talen.top\u002F20260413160405_7w8hvvun.png",{"id":201,"name":462,"url":463,"description":462,"avatar":464,"screenshot":465,"sort":201,"is_invalid":328},"小笨蛋技术网","http:\u002F\u002F200655.xyz","https:\u002F\u002Fcdn.200655.xyz\u002Flogo\u002Fhead\u002Fxbd.png","https:\u002F\u002Fs0.wp.com\u002Fmshots\u002Fv1\u002Fhttp:\u002F\u002F200655.xyz\u002F?w=400&h=300",{"id":175,"name":467,"url":468,"description":469,"avatar":470,"screenshot":471,"sort":175,"is_invalid":328},"SDWL-博客","https:\u002F\u002Fblog.iokb.cn\u002F","Good Luck To You!","https:\u002F\u002Fblog.iokb.cn\u002Fzb_users\u002Fupload\u002F2022\u002F03\u002F202203091646757255754905.jpg","https:\u002F\u002Fs0.wp.com\u002Fmshots\u002Fv1\u002Fhttps:\u002F\u002Fblog.iokb.cn\u002F?w=400&h=300",{"id":170,"name":473,"url":474,"description":475,"avatar":476,"screenshot":477,"sort":170,"is_invalid":328},"无影大侠的小站","https:\u002F\u002Fblog.skyshadow.fun\u002F","在互联网留下一个脚印","https:\u002F\u002Fweavatar.com\u002Favatar\u002F7388ea4765a319d5f83fea61c3236384?s=1000","https:\u002F\u002Fs0.wp.com\u002Fmshots\u002Fv1\u002Fhttps:\u002F\u002Fblog.skyshadow.fun\u002F?w=400&h=300",{"id":286,"title":479,"slug":480,"content":481,"summary":482,"ai_summary":483,"cover":484,"location":11,"is_top":328,"is_essence":328,"is_outdated":328,"view_count":485,"comment_count":486,"url":487,"publish_time":488,"update_time":489,"category":490,"tags":493,"prev":500,"next":503},"深入回顾Nacos服务发现：三大核心API与实战应用","nacos-service-discovery-api","本篇是Spring Cloud Alibaba微服务系列第三篇，主要关于Nacos的服务发现机制。笔者将实践应用三大核心API：`@EnableDiscoveryClient`、`DiscoveryClient`和`NacosDiscoveryClient`，并通过完整代码示例展示如何在实际项目中应用它们。\n\n## 一、三大核心API详解\n\n### 1. @EnableDiscoveryClient - 服务发现开关\n\n**作用**：声明当前应用需要启用服务发现功能\n\n**位置**：Spring Boot启动类\n\n~~~java\npackage top.strarry.product;\n\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.autoconfigure.SpringBootApplication;\nimport org.springframework.cloud.client.discovery.EnableDiscoveryClient;\n\n@EnableDiscoveryClient\n@SpringBootApplication\npublic class ProductApplication {\n    public static void main(String[] args) {\n        SpringApplication.run(ProductApplication.class, args);\n    }\n}\n~~~\n\n**注意事项**：\n\n- Spring Cloud 2020版本后**无需显式添加**（在编写启动类的时候并没有加上注解，但服务成功启动。总结就是有依赖就行）\n- 保留注解可提高代码可读性\n- 支持自定义服务注册行为：\n\n~~~java\n@EnableDiscoveryClient(autoRegister = false) \u002F\u002F 禁用自动注册\n~~~\n\n### 2. DiscoveryClient - 通用服务发现接口\n\n**核心方法**：\n\n- `List\u003CString> getServices()`：获取所有注册服务名称\n- `List\u003CServiceInstance> getInstances(String serviceId)`：获取指定服务的实例列表\n\n~~~java\n@SpringBootTest\npublic class DiscoveryTest {\n\n    @Autowired\n    DiscoveryClient discoveryClient;\n    \n    @Test\n    void discoveryClientTest() {\n        List\u003CString> services = discoveryClient.getServices();\n        for (String serviceName : services) {\n            System.out.println(\\\"service\\\" + serviceName);\n            List\u003CServiceInstance> instances = discoveryClient.getInstances(serviceName);\n            \u002F\u002F获取ip+port\n            for (ServiceInstance instance : instances) {\n                System.out.println(instance.getHost() + \\\":\\\" + instance.getPort());\n            }\n        }\n    }\n}\n~~~\n\n### 3. NacosDiscoveryClient - 增强功能实现\n\n**特有功能**：\n\n- 获取服务的健康状态\n- 查询集群信息\n- 基于元数据的复杂查询\n- 服务订阅机制\n\n~~~java\n@SpringBootTest\npublic class DiscoveryTest {\n    \n\t@Autowired\n    NacosDiscoveryClient nacosDiscoveryClient;\n\n\t@Test\n    public void nacosDiscoveryClientTest() {\n        List\u003CString> services = nacosDiscoveryClient.getServices();\n        for (String service : services) {\n            System.out.println(\\\"service = \\\" + service);\n            List\u003CServiceInstance> instances = nacosDiscoveryClient.getInstances(service);\n            for (ServiceInstance instance : instances) {\n                System.out.println(\\\"instance.getHost() = \\\" + instance.getHost());\n                System.out.println(\\\"instance.getPort() = \\\" + instance.getPort());\n            }\n        }\n    }\n}\n~~~\n**二者运行结果均一致：**\n![1.png](https:\u002F\u002Fblog.strarry.top\u002Farticles\u002F07f77e5372051403aa2dcdd18d4ce058.png)\n\n## 二、远程调用\n\n### 1.编写Order订单实体类\n\n~~~java\n@Data\npublic class Order {\n    private Long id;\n    private BigDecimal totalAmount;\n    private Long userId;\n    private String nickname;\n    private String address;\n    private List\u003CProduct> productList;\n}\n~~~\n\n### 2.编写Product商品实体类\n\n~~~java\n@Data\npublic class Product {\n    private Long id;\n    private BigDecimal price;\n    private String productName;\n    private int num;\n}\n~~~\n\n### 3.编写创建订单接口\n\n~~~java\n@RestController\npublic class OrderController {\n\n    @Autowired\n    OrderService orderService;\n\n    @GetMapping(\\\"\u002Fcreate\\\")\n    public Order createOrder(@RequestParam(\\\"userId\\\") Long userId,\n                             @RequestParam(\\\"productId\\\") Long productId) {\n        Order order = orderService.createOrder(userId, productId);\n        return order;\n    }\n}\n\n~~~\n\n### 4.编写创建订单服务接口\n\n~~~java\n@Service\npublic interface OrderService {\n\n    Order createOrder(Long productId, Long userId);\n}\n~~~\n\n### 5.编写创建订单服务实现类\n\n~~~java\n@Service\npublic class OrderServiceImpl implements OrderService {\n    @Override\n    public Order createOrder(Long userId, Long productId) {\n        Order order = new Order();\n        order.setId(1L);\n        \u002F\u002FTODO 总金额\n        order.setTotalAmount(new BigDecimal(\\\"0\\\"));\n        order.setUserId(userId);\n        order.setNickName(\\\"张三\\\");\n        order.setAddress(\\\"北京\\\");\n        \u002F\u002FTODO 远程查询商品列表\n        order.setProductList(null);\n        return order;\n    }\n}\n~~~\n\n### 6.编写商品接口\n\n~~~java\n@RestController\npublic class ProductController {\n\n    @Autowired\n    ProductService productService;\n\n    @GetMapping(\\\"\u002Fproduct\u002F{id}\\\")\n    public Product getProduct(@PathVariable(\\\"id\\\") Long productId) {\n        Product product = productService.getProductById(productId);\n        return product;\n    }\n}\n~~~\n\n### 7.编写商品服务接口\n\n~~~java\n@Service\npublic interface ProductService {\n    Product getProductById(Long productId);\n}\n~~~\n\n### 8.编写商品服务实现类\n\n~~~java\n@Service\npublic class ProductServiceImpl implements ProductService {\n    @Override\n    public Product getProductById(Long productId) {\n        Product product = new Product();\n        product.setId(productId);\n        product.setPrice(new BigDecimal(\\\"99\\\"));\n        product.setProductName(\\\"苹果\\\");\n        product.setNum(2);\n        return product;\n    }\n}\n~~~\n\n### 9.测试接口\n\n测试商品接口：http:\u002F\u002Flocalhost:9000\u002Fproduct\u002F2，返回如下：\n\n~~~json\n{\n  \\\"id\\\": 2,\n  \\\"price\\\": 99,\n  \\\"productName\\\": \\\"苹果\\\",\n  \\\"num\\\": 2\n}\n~~~\n\n测试订单接口：http:\u002F\u002Flocalhost:8000\u002Fcreate?userId=2&productId=23，返回如下：\n\n~~~json\n{\n  \\\"id\\\": 1,\n  \\\"totalAmount\\\": 198,\n  \\\"userId\\\": 23,\n  \\\"nickname\\\": \\\"zhangsan\\\",\n  \\\"address\\\": \\\"hebei\\\",\n  \\\"productList\\\": [\n    {\n      \\\"id\\\": 2,\n      \\\"price\\\": 99,\n      \\\"productName\\\": \\\"苹果\\\",\n      \\\"num\\\": 2\n    }\n  ]\n}\n~~~\n\n## 三、远程调用\n\n### 1.常见的远程调用对比\n\n| 方式             | 优点                       | 缺点             | 适用场景            |\n| :--------------- | :------------------------- | :--------------- | :------------------ |\n| **RestTemplate** | 灵活可控，简单直接         | 需要手动拼接URL  | 简单调用，快速原型  |\n| **OpenFeign**    | 声明式编程，自动生成实现类 | 学习曲线较陡     | 标准RESTful接口调用 |\n| **WebClient**    | 响应式非阻塞，高性能       | 异步编程模型复杂 | 高并发，响应式系统  |\n\n### 2.实现订单的远程调用\n\n#### ①将RestTemplate注册到spring容器\n\n~~~java\n@Configuration\npublic class OrderConfig {\n    @Bean\n    public RestTemplate restTemplate() {\n        return new RestTemplate();\n    }\n}\n~~~\n\n#### ②编写订单的远程调用实现类\n\n~~~java\n@Slf4j\n@Service\npublic class OrderServiceImpl implements OrderService {   \n    @Autowired\n    DiscoveryClient discoveryClient;\n    @Autowired\n    RestTemplate restTemplate;\n\n\t@Override\n    public Order createOrder(Long productId, Long userId) {\n        Product productFromRemot = getProductFromRemote(productId);\n\n        Order order = new Order();\n        \u002F\u002FTODO 总金额\n        order.setTotalAmount(productFromRemot.getPrice().multiply(new BigDecimal(productFromRemot.getNum())));\n        order.setId(1L);\n        order.setUserId(userId);\n        order.setNickname(\\\"zhangsan\\\");\n        order.setAddress(\\\"hebei\\\");\n        \u002F\u002FTODO 远程查询商品列表\n        order.setProductList(Arrays.asList(productFromRemot ));\n\n        return order;\n    }\n\n\t\u002F\u002F1.发送请求\n    private Product getProductFromRemote(Long productId) {\n        \u002F\u002F1、获取商品服务所在的所有机器IP+Port\n        List\u003CServiceInstance> instances = discoveryClient.getInstances(\\\"service-product\\\");\n        ServiceInstance serviceInstance = instances.get(0);\n        \u002F\u002F2.拼接远程url\n        String url =  \\\"http:\u002F\u002F\\\"+serviceInstance.getHost()+\\\":\\\"+ serviceInstance.getPort()+\\\"\u002Fproduct\u002F\\\"+productId;\n        log.info(\\\"远程请求路径:{}\\\",url);\n        \u002F\u002F3.发送远程请求\n        Product forObject = restTemplate.getForObject(url, Product.class);\n        return forObject;\n    }\n}\n~~~\n\n### 3.测试接口\n\n测试远程调用：http:\u002F\u002Flocalhost:8000\u002Fcreate?userId=2&productId=1，返回内容如下：\n\n~~~json\n{\n  \\\"id\\\": 1,\n  \\\"totalAmount\\\": 198,\n  \\\"userId\\\": 23,\n  \\\"nickname\\\": \\\"zhangsan\\\",\n  \\\"address\\\": \\\"hebei\\\",\n  \\\"productList\\\": [\n    {\n      \\\"id\\\": 2,\n      \\\"price\\\": 99,\n      \\\"productName\\\": \\\"苹果\\\",\n      \\\"num\\\": 2\n    }\n  ]\n}\n~~~\n\n控制台打印出远程调用所拼接的URL地址信息：\n\n\n![2.png](https:\u002F\u002Fblog.strarry.top\u002Farticles\u002Fc6dd7c7fa485712a0252f831ca573ebb.png)\n## 四、总结\n\n本次我们深入探讨了Nacos服务发现的三大核心API：\n\n1. **`@EnableDiscoveryClient`** - 服务发现的开关\n   - 声明式启用服务发现\n   - 支持自定义注册行为\n   - 新版本可自动启用\n2. **`DiscoveryClient`** - 通用服务发现接口\n   - 获取服务列表和实例信息\n   - 与Spring Cloud标准集成\n   - 支持元数据查询\n3. **`NacosDiscoveryClient`** - 增强实现\n   - 获取Nacos特有信息\n   - 支持服务订阅机制\n   - 提供高级查询能力\n\n**下一步回顾**：\n\n[Nacos配置中心]\n\n[OpenFeign声明式调用]","本文以作者视角介绍Spring Cloud Alibaba微服务系列第三篇，实践Nacos服务发现三大核心API，通过完整代码示例展示其应用，并实现基于DiscoveryClient的远程调用，覆盖核心功能与操作要点。","这篇文章围绕Spring Cloud Alibaba微服务中的Nacos服务发现机制展开，重点讲解了三大核心API：`@EnableDiscoveryClient`作为服务发现开关，`DiscoveryClient`提供通用服务查询能力，以及`NacosDiscoveryClient`带来的增强功能。通过完整代码示例，文章展示了如何用这些API获取服务实例并实现基于RestTemplate的远程调用，同时对比了RestTemplate、OpenFeign、WebClient的适用场景。整体内容实践性强，适合需要快速掌握Nacos服务发现的开发者参考阅读。","https:\u002F\u002Fblog.strarry.top\u002Fuploads\u002Fcovers\u002F2026\u002F05\u002F7fb9fb0fa88dcc24b42e461471ad13d2.png",92,0,"\u002Fposts\u002Fnacos-service-discovery-api","2025-08-01 20:48:30","2025-08-01 20:52:11",{"id":170,"name":491,"url":492},"技术教程","\u002Fcategory\u002Fcat-189",[494,497],{"id":170,"name":495,"url":496},"Spring Cloud","\u002Ftag\u002Ftag-31",{"id":175,"name":498,"url":499},"Nacos","\u002Ftag\u002Ftag-32",{"title":501,"url":502},"Spring Cloud + Nacos：构建下一代微服务架构","\u002Fposts\u002Fspring-cloud-nacos-microservice",{"title":504,"url":505},"Spring Cloud 核心组件实战：Nacos配置中心与OpenFeign基础使用","\u002Fposts\u002Fspring-cloud-nacos-config-openfeign",{"total_words":507,"total_visitors":508,"total_page_views":509,"online_users":486,"today_visitors":159,"today_pageviews":159,"yesterday_visitors":208,"yesterday_pageviews":222,"month_pageviews":299,"total_articles":204,"total_comments":286,"total_friends":246,"total_moments":170,"total_categories":175,"total_tags":193},"95k",512,2135]