Skip to content

WS1: Settle the AMQP transport and insulate the public Event Hubs surface #7253

Description

@j7nw4r

Summary

The public Event Hubs surface embeds azure-core-amqp, which is unreleased and mid migration from uAMQP to a Rust implementation. Five public headers include azure/core/amqp/internal/*, the client sources still branch on ENABLE_UAMQP and ENABLE_RUST_AMQP, and the public EventData model exposes AmqpMessage and AmqpValue.

This workstream settles the transport and insulates the public surface. The first item, the transport decision, is the gate for #7254, because link rebuild and token refresh both land in transport-conditional code. Make that decision first and on its own. The other four items are surface cleanup and do not block the reliability work. Severity tags follow the key in #7252.

Motivation

Event Hubs is the only consumer of azure-core-amqp, so the AMQP layer is part of the GA surface in practice. That package is at 1.0.0-beta.12 (Unreleased). In .NET the transport is fully internal, and the public API listing exposes no transport type (sdk/eventhub/Azure.Messaging.EventHubs/api/Azure.Messaging.EventHubs.netstandard2.0.cs).

The C++ client branches on the transport in the send path (src/producer_client.cpp:95-111), the receiver setup (src/partition_client.cpp:107-177), and client close (src/consumer_client.cpp:56-67). Two transports mean two behavior sets under one version number.

Five public headers include _internal AMQP headers: inc/azure/messaging/eventhubs/consumer_client.hpp:12, producer_client.hpp:11, partition_client.hpp:9, eventhubs_exception.hpp:6, and processor.hpp:11. The _internal namespace carries no stability promise, yet it sits in the GA contract. The public EventData model also binds the azure-core-amqp model types into that contract (inc/azure/messaging/eventhubs/models/event_data.hpp:5-6).

This class of break is only possible before 1.0.0.

Proposal

  • Decide the GA transport: ship on the Rust AMQP implementation, or ship on uAMQP. Record the decision in this issue. [GA blocker]
  • Remove ENABLE_UAMQP and ENABLE_RUST_AMQP conditional behavior from the shipped client code paths (src/producer_client.cpp:95-111, src/partition_client.cpp:107-177, src/consumer_client.cpp:56-67). [GA blocker]
  • Remove every azure/core/amqp/internal/* include from the public headers listed above. Move the AMQP members behind a pimpl or a factory boundary. [GA blocker]
  • Decide the EventData model contract: wrap AmqpMessage and AmqpValue, or GA the azure-core-amqp model types together with Event Hubs (inc/azure/messaging/eventhubs/models/event_data.hpp:5-6). [GA blocker]
  • Release azure-core-amqp 1.0.0, or make the library fully internal to the Event Hubs package. [GA blocker]

Validation

  • No public Event Hubs header includes a path under azure/core/amqp/internal/.
  • No shipped client source branches on the transport macro.
  • The chosen transport builds across the full CI matrix.

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions