Spring AI Alibaba + Nacos 构建 A2A 分布式智能体
一、Spring AI Alibaba在本专栏上一篇文章中介绍了Python AgentScope完整实现A2A智能体服务的注册、集群部署、Nacos服务发现与客户端负载调用能力解决了多智能体框架不统一、智能体无法高效协同的问题。过程如下图所示文章地址基于A2A AgentScope Nacos 构建分布式高可用异构 Agent 方案https://mp.weixin.qq.com/s/QAyTbcti_N-hinRvr2iHrw但在企业真实落地场景中绝大多数核心业务系统、微服务架构均基于Java技术栈构建。如果AI智能体仅能在Python侧独立运行无法与Java业务体系打通会形成新的技术孤岛无法真正融入企业微服务生态。因此本篇内容将聚焦Java生态上基于Spring AI Alibaba快速搭建Java版A2A服务端与客户端实现Java智能体注册至Nacos、并实现客户端远程调用。Spring AI Alibaba是阿里开源的Spring AI生态扩展旨在帮助Java开发者更便捷地构建AI应用。在最新的版本中Spring AI Alibaba已经全面拥抱A2A协议提供了开箱即用的Starter组件•spring-ai-alibaba-starter-a2a-server用于快速将Agent包装为标准的A2A服务端。•spring-ai-alibaba-starter-a2a-client用于在Spring环境中作为客户端发起A2A协议调用。•spring-ai-alibaba-starter-a2a-registry深度集成Nacos实现A2A AgentCard的自动注册与发现。这意味着Java开发者无需手动处理A2A协议底层的JSON-RPC转换和HTTP路由只需通过简单的配置和注解就能让Spring Boot微服务具备Agent互联能力。核心技术栈版本延续上篇规范保证前后实验兼容性• Nacos3.2.0最低3.0支持AI注册中心能力• Spring Boot3.4.0• Spring AI Alibaba1.0.0.4• 模型服务ModelScopeQwen3.5系列开源模型开始前请提前安装好Nacos服务 安装过程可参考官方文档https://nacos.io/docs/latest/quickstart/quick-start/二、A2A 服务端实现首先我们新建一个Spring Boot项目将Java端的天气助手Agent封装为A2A服务并注册到Nacos。2.1 项目依赖pom引入WebFlux、Spring AI Alibaba A2A Server、Registry以及OpenAI模型依赖?xml version1.0 encodingUTF-8?project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd modelVersion4.0.0/modelVersion parent groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-parent/artifactId version3.4.0/version relativePath/ /parent groupIdcom.example/groupId artifactIda2a-demo/artifactId version0.0.1-SNAPSHOT/version namea2a-demo/name descriptiona2a-demo/description properties java.version17/java.version project.build.sourceEncodingUTF-8/project.build.sourceEncoding project.reporting.outputEncodingUTF-8/project.reporting.outputEncoding !-- Spring AI Alibaba版本1.0.0.4及以上 -- spring.ai.alibaba.version1.0.0.4/spring.ai.alibaba.version /properties dependencies dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-webflux/artifactId /dependency dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-test/artifactId scopetest/scope /dependency !-- 引入A2A Server starter -- dependency groupIdcom.alibaba.cloud.ai/groupId artifactIdspring-ai-alibaba-starter-a2a-server/artifactId version${spring.ai.alibaba.version}/version /dependency !-- 引入A2A Nacos 注册中心 -- dependency groupIdcom.alibaba.cloud.ai/groupId artifactIdspring-ai-alibaba-starter-a2a-registry/artifactId version${spring.ai.alibaba.version}/version /dependency !-- 引入OpenAI -- dependency groupIdorg.springframework.ai/groupId artifactIdspring-ai-starter-model-openai/artifactId version1.0.1/version /dependency /dependencies build plugins plugin groupIdorg.apache.maven.plugins/groupId artifactIdmaven-compiler-plugin/artifactId version3.8.1/version configuration source17/source target17/target encodingUTF-8/encoding /configuration /plugin plugin groupIdorg.springframework.boot/groupId artifactIdspring-boot-maven-plugin/artifactId configuration mainClasscom.example.a2ademo.A2aDemoApplication/mainClass skiptrue/skip /configuration executions execution idrepackage/id goals goalrepackage/goal /goals /execution /executions /plugin /plugins /build/project2.2 配置文件指定模型连接信息、Nacos注册中心以及Agent元数据server: port: 8085spring: application: name: a2a-server-example ai: openai: base-url: https://api-inference.modelscope.cn api-key: ms-xxx ## 替换为你的key chat: options: model: Qwen/Qwen3.5-35B-A3B alibaba: a2a: # 配置Nacos信息 nacos: server-addr: ${NACOS_ADDRESS:localhost:8848} username: ${NACOS_USERNAME:nacos} password: ${NACOS_PASSWORD:123456} server: version: 1.0.1 card: # 配置Agent URL url: http://localhost:8085/a2a这里a2a.server.card.url非常关键它定义了该Agent在A2A协议下暴露的地址。启动时框架会自动构建AgentCard并注册至Nacos中。2.3 构建测试工具使用Tool注解定义一个简单的天气伪工具供智能体调用以测试工具调用能力Componentpublic class WeatherTools { Tool(description 查看某个地区的最新天气情况) public String weather(String local) { if (StringUtils.isBlank(local)){ return 参数local 不可为空; } return local 地区的最新天气为多云转晴30-35摄氏度。; }}2.4 构建 ReactAgent 智能体通过ReactAgent将大模型与工具整合构造智能体Configurationpublic class RootAgentConfiguration { Bean public ListToolCallback tools(WeatherTools tools) { return new ArrayListToolCallback(List.of(ToolCallbacks.from(tools))); } Bean Primary public BaseAgent rootAgent(OpenAiChatModel chatModel, ListToolCallback tools) throws GraphStateException { return ReactAgent.builder() .name(xiaobichao) .description(小毕超天气助手) .model(chatModel) .instruction(你叫小毕超是一个天气智能助手) .inputKey(input) .tools(tools) .build(); }}2.5 启动服务端启动Spring Boot项目观察Nacos注册情况可以看到名为 xiaobichao 的智能体已自动注册点进详情可以看到注册的URL等信息与配置一致至此A2A服务端已经就绪。它与上一篇用AgentScope编写的Python服务端在协议层面完全互通可以被任意支持A2A的客户端调用。三、A2A 客户端实现并调用测试接下来我们创建一个新的Spring Boot客户端项目通过Nacos发现刚才的xiaobichao服务并进行流式调用。3.1 项目依赖客户端pom需要引入spring-ai-alibaba-starter-a2a-client和spring-ai-alibaba-starter-a2a-registry?xml version1.0 encodingUTF-8?project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd modelVersion4.0.0/modelVersion parent groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-parent/artifactId version3.4.0/version relativePath/ /parent groupIdcom.example/groupId artifactIda2a-demo/artifactId version0.0.1-SNAPSHOT/version namea2a-demo/name descriptiona2a-demo/description properties java.version17/java.version project.build.sourceEncodingUTF-8/project.build.sourceEncoding project.reporting.outputEncodingUTF-8/project.reporting.outputEncoding !-- Spring AI Alibaba版本1.0.0.4及以上 -- spring.ai.alibaba.version1.0.0.4/spring.ai.alibaba.version /properties dependencies dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-webflux/artifactId /dependency dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-test/artifactId scopetest/scope /dependency !-- 引入A2A Client starter -- dependency groupIdcom.alibaba.cloud.ai/groupId artifactIdspring-ai-alibaba-starter-a2a-client/artifactId version${spring.ai.alibaba.version}/version /dependency !-- 引入A2A Nacos 注册中心 -- dependency groupIdcom.alibaba.cloud.ai/groupId artifactIdspring-ai-alibaba-starter-a2a-registry/artifactId version${spring.ai.alibaba.version}/version /dependency /dependencies build plugins plugin groupIdorg.apache.maven.plugins/groupId artifactIdmaven-compiler-plugin/artifactId version3.8.1/version configuration source17/source target17/target encodingUTF-8/encoding /configuration /plugin plugin groupIdorg.springframework.boot/groupId artifactIdspring-boot-maven-plugin/artifactId configuration mainClasscom.example.a2ademo.A2aDemoApplication/mainClass skiptrue/skip /configuration executions execution idrepackage/id goals goalrepackage/goal /goals /execution /executions /plugin /plugins /build/project3.2 配置文件application.yml 只要指定Nacos地址server: port: 8086spring: application: name: a2a-client-example ai: alibaba: a2a: nacos: # 开启从Nacos中自动发现Agent discovery: enabled: true server-addr: ${NACOS_ADDRESS:localhost:8848} username: ${NACOS_USERNAME:nacos} password: ${NACOS_PASSWORD:123456}3.3 构建远程智能体代理创建一个A2aRemoteAgent用于代理远程智能体。Configurationpublic class RootAgentConfiguration { Bean public BaseAgent rootAgent(AgentCardProvider agentCardProvider) throws GraphStateException { return A2aRemoteAgent.builder() .agentCardProvider(agentCardProvider) .name(xiaobichao).description(小毕超天气智能助手).build(); }}AgentCardProvider会自动根据name从Nacos中查找对应的AgentCard并建立通信通道。整个过程开发者无需关心远程服务地址和协议细节。3.4 构建测试接口RestControllerRequestMapping(/)public class TestController { private final BaseAgent rootAgent; public TestController(BaseAgent rootAgent) { this.rootAgent rootAgent; } GetMapping(value stream, produces MediaType.TEXT_EVENT_STREAM_VALUE) public FluxServerSentEventString stream(RequestParam(question) String question) throws GraphStateException, GraphRunnerException { return rootAgent.stream(Map.of(input, List.of(new UserMessage(question)))) .mapNotNull(output - { System.out.println(stream agent invoke : output.toString()); if (output.isSTART() || output.isEND()) { return null; } if (output instanceof StreamingOutput) { String chunk ((StreamingOutput) output).chunk(); return ServerSentEvent.Stringbuilder() .data(chunk) .build(); } return null; }); }}启动服务3.5 远程调用测试学AI大模型的正确顺序千万不要搞错了2026年AI风口已来各行各业的AI渗透肉眼可见超多公司要么转型做AI相关产品要么高薪挖AI技术人才机遇直接摆在眼前有往AI方向发展或者本身有后端编程基础的朋友直接冲AI大模型应用开发转岗超合适就算暂时不打算转岗了解大模型、RAG、Prompt、Agent这些热门概念能上手做简单项目也绝对是求职加分王给大家整理了超全最新的AI大模型应用开发学习清单和资料手把手帮你快速入门学习路线:✅大模型基础认知—大模型核心原理、发展历程、主流模型GPT、文心一言等特点解析✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑✅开发基础能力—Python进阶、API接口调用、大模型开发框架LangChain等实操✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经以上6大模块看似清晰好上手实则每个部分都有扎实的核心内容需要吃透我把大模型的学习全流程已经整理好了抓住AI时代风口轻松解锁职业新可能希望大家都能把握机遇实现薪资/职业跃迁这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】