-
Notifications
You must be signed in to change notification settings - Fork 1.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Optimize SSE Transport Configuration to Prevent Duplicate Connections #2493
base: main
Are you sure you want to change the base?
Optimize SSE Transport Configuration to Prevent Duplicate Connections #2493
Conversation
1. **Duplicate SSE Connections Problem** - When both WebFlux and HTTP Client are available, `McpClientAutoConfiguration` loads both implementations - `SseWebFluxTransportAutoConfiguration` and `SseHttpClientTransportAutoConfiguration` create duplicate connections - Results in unnecessary resource consumption and potential performance issues 2. **Duplicate MCP Tools Creation** - Multiple identical MCP tools are created due to duplicate transport implementations - Affects system efficiency and resource utilization - May cause confusion in tool management and callbacks 1. **Transport Mode Configuration** ```java public enum SseTransportMode { WEBFLUX, // Default implementation HTTP_CLIENT } ``` 2. **Configuration Property** ```properties spring.ai.mcp.client.sse.transport-mode=WEBFLUX # Default # or spring.ai.mcp.client.sse.transport-mode=HTTP_CLIENT ``` 3. **Implementation Details** - Add transport mode selection in `McpSseClientProperties` - Use conditional loading to ensure single implementation - Optimize tool creation process - Maintain backward compatibility 1. Resource Efficiency - Single SSE connection per endpoint - Optimized tool initialization - Reduced memory footprint 2. Better Configuration Control - Explicit transport mode selection - Clear configuration options - IDE support with metadata 3. Improved Stability - Prevents duplicate connections - Streamlined tool management - Better error handling 1. Verify single transport initialization 2. Test tool creation and management 3. Validate configuration switching 4. Check backward compatibility - `McpClientAutoConfiguration.java` - `McpSseClientProperties.java` - `SseWebFluxTransportAutoConfiguration.java` - `SseHttpClientTransportAutoConfiguration.java` Labels: enhancement, optimization, configuration Signed-off-by: aliyun1024qjc <[email protected]>
4226795
to
1a52988
Compare
在版本 v1.0.0-M6, 我临时解决方案是在 application.properties 中添加以下内容,使其不加载 SseHttpClientTransportAutoConfiguration |
@SpringBootApplication(exclude = { |
@aliyun1024qjc The Even if both Could you clarify your configuration and how to reproduce this issue? |
@tzolov Thank you for your feedback! I've created a sample project to demonstrate the issue: Repository: https://github.com/aliyun1024qjc/spring-ai-bug-sse Issue DemonstrationThe repository contains a minimal setup that clearly shows both auto-configurations are activated simultaneously in certain scenarios, leading to duplicate SSE connections and tool registrations. Key Findings
EvidenceScenario 1: SYNC Mode
Scenario 2: ASYNC Mode
Root CauseThe issue is in How to Reproduce
My PR adds explicit transport mode configuration ( Would you like me to provide any additional information? |
How to Reproduce
My PR adds explicit transport mode configuration ( Would you like me to provide any additional information? |
Overview
This PR addresses the issue of duplicate SSE connections and MCP tools creation when both WebFlux and HTTP Client implementations are available.
Current Issues
Duplicate SSE Connections Problem
McpClientAutoConfiguration
loads both implementationsSseWebFluxTransportAutoConfiguration
andSseHttpClientTransportAutoConfiguration
create duplicate connectionsDuplicate MCP Tools Creation
Solution
Transport Mode Configuration
Configuration Property
Implementation Details
McpSseClientProperties
Benefits
Resource Efficiency
Better Configuration Control
Improved Stability
Testing Done
Related Files
McpClientAutoConfiguration.java
McpSseClientProperties.java
SseWebFluxTransportAutoConfiguration.java
SseHttpClientTransportAutoConfiguration.java
additional-spring-configuration-metadata.json
Additional Notes