Skip to content

Add Queued A2A protocol adapter (A2A over RabbitMQ / Azure Service Bus)#5

Merged
rockfordlhotka merged 2 commits intomainfrom
feature/async-messaging
Mar 3, 2026
Merged

Add Queued A2A protocol adapter (A2A over RabbitMQ / Azure Service Bus)#5
rockfordlhotka merged 2 commits intomainfrom
feature/async-messaging

Conversation

@rockfordlhotka
Copy link
Member

Summary

  • Adds a new QueuedA2A protocol adapter so agents that communicate via async message brokers (RabbitMQ, Azure Service Bus) can register with the registry and be discovered by clients
  • New API surface: POST/GET /a2a/async/agents and GET /a2a/async/agents/{id}
  • The QueuedAgentCard extends the A2A agent card with a queueEndpoint object carrying broker connection details (technology, host, port, virtualHost, exchange, taskTopic, responseTopic for RabbitMQ; namespace and entityPath for Azure Service Bus)
  • ProtocolType stays A2A (wire format unchanged); TransportType.Amqp and TransportType.AzureServiceBus distinguish broker technologies — no domain layer changes required
  • All card fields round-trip faithfully through Endpoint.ProtocolMetadata (JSONB)
  • 16 integration tests covering both broker types, 400/401/404 error cases, and full field round-tripping
  • Full documentation in docs/protocol-queued-a2a.md and updated README.md

Test plan

  • dotnet build — clean (warnings pre-existing)
  • dotnet test — 125/125 pass (11 application + 114 API including 16 new QueuedA2A tests)
  • Registration with RabbitMQ card returns 201 with registry-assigned ID
  • Registration with Azure Service Bus card returns 201
  • Missing taskTopic returns 400
  • Unauthenticated registration returns 401
  • GET /a2a/async/agents/{id} returns card with full queueEndpoint
  • HTTP-only A2A agents are excluded from queued endpoint (404)
  • List endpoint filters out HTTP A2A agents
  • All fields (version, skills with original string IDs, I/O modes, all queue fields) round-trip without loss

🤖 Generated with Claude Code

rockfordlhotka and others added 2 commits March 2, 2026 21:49
Agents that communicate via RabbitMQ or Azure Service Bus (using the A2A
wire protocol over async messaging) can now register with the registry and
be discovered by clients.

New API surface:
  POST /a2a/async/agents    - register an agent with queue endpoint details
  GET  /a2a/async/agents    - list/discover queued agents (paginated)
  GET  /a2a/async/agents/{id} - retrieve a specific queued agent card

The QueuedAgentCard extends the A2A card with a queueEndpoint object that
carries broker connection details (technology, host, port, virtualHost,
exchange, taskTopic, responseTopic for RabbitMQ; namespace and entityPath
for Azure Service Bus). All fields round-trip faithfully through
Endpoint.ProtocolMetadata (JSONB). ProtocolType stays A2A; TransportType
.Amqp and .AzureServiceBus distinguish the broker technologies.

16 integration tests cover RabbitMQ and Azure Service Bus registration,
discovery, 400/401/404 error cases, and full field round-tripping.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Add docs/protocol-queued-a2a.md covering: broker technologies (RabbitMQ,
Azure Service Bus), the QueuedAgentCard model and queueEndpoint fields,
design decisions (why ProtocolType stays A2A, separate adapter rationale,
credentials-not-stored policy, skills round-trip), and registration flow
examples for both broker types with KEDA liveness patterns.

Update README:
- Add QueuedA2A to protocol support section with API surface summary
- Extend Queue-backed agents section to show both registration paths
- Add /a2a/async/agents rows to the API overview table
- Update auth section's public-endpoint list
- Update project structure to reflect QueuedA2A/ folders
- Add link to new docs page alongside A2A/MCP/ACP

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@rockfordlhotka rockfordlhotka merged commit d943e50 into main Mar 3, 2026
1 check passed
@rockfordlhotka rockfordlhotka deleted the feature/async-messaging branch March 3, 2026 03:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant