AZURE SERVICE BUS → STACKIT RABBITMQ

Azure Service Bus naar STACKIT RabbitMQ

Service Bus gaat als replatforming naar STACKIT RabbitMQ: één RabbitMQ-instance bevat de queues en exchanges, en clients stappen over van de Service Bus SDK naar een AMQP 0-9-1-client. StackToIT schrijft de instance, somt elke instelling van queues en topics op die niet wordt overgenomen en noemt de Service Bus-functies die RabbitMQ anders afhandelt.

De stappen in volgorde

  1. 1. Entiteiten en functies inventariseren

    Maak een lijst van namespaces, queues, topics, subscriptions en hun regels. Noteer per entiteit sessies, duplicate detection, dead-lettering, levensduur van berichten en leveringslimieten. Deze instellingen bepalen hoeveel code verandert.

  2. 2. De Terraform beoordelen

    Het assessment maakt van elke namespace, met de bijbehorende queues en topics, één eenheid en laat zien wat het concept overneemt en wat niet.

  3. 3. De RabbitMQ-instance aanmaken

    Stel het project, het plan, de versie en de clients in die mogen verbinden. De toegangslijst vervangt het standaardbereik, dus u somt uw clients zelf op.

  4. 4. De topologie opzetten

    Configureer queues, exchanges en bindings in de instance, vanuit de applicatie of vanuit deploymentscripts (praktijk). Het concept maakt alleen de instance aan en noemt elke instelling van queues en topics als niet overgenomen.

  5. 5. De clients omschakelen

    Producers en consumers gaan werken met een AMQP 0-9-1-clientbibliotheek, een nieuwe host, een TLS-instelling en de inloggegevens van de instance.

  6. 6. Leegmaken en overschakelen

    Laat consumers de Azure-queues leegmaken, richt producers op RabbitMQ en houd de namespace aan tot het laatste bericht is verwerkt. Dit is een werkwijze uit de praktijk, geen stap die de run voor u plant.

Een namespace met queues en een topic, omgezet

Een kleine omgeving die voor deze pagina is opgesteld en op 4 november 2026 door StackToIT is beoordeeld. Links: de Azure-invoer. Rechts: het resourceblok van de STACKIT-Terraform die de engine schreef; de beoordelingsopmerkingen erboven in het bestand zijn hier weggelaten.

Voorbeeldinvoermain.tf
resource "azurerm_servicebus_namespace" "orders" {
  name                = "sb-orders-gwc"
  location            = azurerm_resource_group.msg.location
  resource_group_name = azurerm_resource_group.msg.name
  sku                 = "Premium"
  capacity            = 1
  premium_messaging_partitions = 1
}

resource "azurerm_servicebus_queue" "invoices" {
  name                                 = "invoices"
  namespace_id                         = azurerm_servicebus_namespace.orders.id
  max_delivery_count                   = 5
  lock_duration                        = "PT1M"
  requires_duplicate_detection         = true
  dead_lettering_on_message_expiration = true
  default_message_ttl                  = "P7D"
}

resource "azurerm_servicebus_queue" "sessions" {
  name                  = "fulfilment-sessions"
  namespace_id          = azurerm_servicebus_namespace.orders.id
  requires_session      = true
  max_delivery_count    = 10
}

resource "azurerm_servicebus_topic" "events" {
  name                  = "order-events"
  namespace_id          = azurerm_servicebus_namespace.orders.id
  default_message_ttl   = "P1D"
}
STACKIT-Terraform van StackToITterraform/messaging.tf
resource "stackit_rabbitmq_instance" "messaging" {
  project_id = var.project_id
  name       = "messaging"
  plan_name  = var.rabbitmq_plan_name
  version    = var.rabbitmq_version
  parameters = {
    sgw_acl = join(",", var.rabbitmq_allowed_cidrs)
  }
}
  • Eén instance voor de hele namespace

    De queues en het topic worden geen Terraform-resources. De namespace wordt één stackit_rabbitmq_instance; sku = Premium, capacity en de messagingpartities staan als niet overgenomen vermeld, en de plannaam en de versie zijn variabelen zonder standaardwaarde.

  • De toegangslijst heeft geen standaardwaarde

    De variabele voor de toegestane CIDR's weigert een lege lijst, omdat het standaardbereik van STACKIT de adressen van alle STACKIT-klanten toelaat, zoals de engine aangeeft.

  • De versie vraagt om controle

    De variabeletekst legt vast dat de servicecatalogus en de lifecyclepagina van STACKIT het niet eens zijn over de aangeboden RabbitMQ-versie, dus is er geen standaardwaarde ingesteld. Bevestig de versie voor uw regio voordat u apply uitvoert. Vanaf november 2026 vermeldt de lifecyclepagina 4.0 (uitgebracht in april 2025, einde van de ondersteuning nog aan te kondigen), 3.13 (einde van de ondersteuning in september 2025) en 3.10 (einde van de ondersteuning in maart 2025). Geen van de STACKIT RabbitMQ-pagina's die voor deze gids zijn geraadpleegd, noemt de protocollen die een instance accepteert; test uw AMQP 0-9-1- of AMQP 1.0-client dus tegen een echte instance.

Wat het concept niet overneemt

De regels die de engine boven de instance schreef voor de namespace, de twee queues en het topic, gevolgd door de twee functiewaarschuwingen, zoals het bestand ze bevat.

Beoordelingsopmerkingenterraform/messaging.tf
# NOT CARRIED (azurerm_servicebus_namespace.orders): capacity = 1, name = sb-orders-gwc, premium_messaging_partitions = 1, sku = Premium — configure its queues and topics as queues and exchanges in the RabbitMQ instance; none of the namespace's settings is generated.
# NOT CARRIED (azurerm_servicebus_queue.invoices): dead_lettering_on_message_expiration = true, default_message_ttl = P7D, lock_duration = PT1M, max_delivery_count = 5, name = invoices, namespace_id, requires_duplicate_detection = true — a setting of azurerm_servicebus_namespace.orders: configure its queues and topics as queues and exchanges in the RabbitMQ instance; none of the namespace's settings is generated.
# NOT CARRIED (azurerm_servicebus_queue.sessions): max_delivery_count = 10, name = fulfilment-sessions, namespace_id, requires_session = true — a setting of azurerm_servicebus_namespace.orders: configure its queues and topics as queues and exchanges in the RabbitMQ instance; none of the namespace's settings is generated.
# NOT CARRIED (azurerm_servicebus_topic.events): default_message_ttl = P1D, name = order-events, namespace_id — a setting of azurerm_servicebus_namespace.orders: configure its queues and topics as queues and exchanges in the RabbitMQ instance; none of the namespace's settings is generated.
# azurerm_servicebus_namespace.orders: WARNING sb-sessions: Queues use sessions (ordered, grouped processing); RabbitMQ has no session concept, so ordering per key needs consistent-hash exchanges or single-active consumers.
# azurerm_servicebus_namespace.orders: WARNING sb-duplicate-detection: Duplicate detection is enabled; RabbitMQ has no built-in deduplication, so consumers must be idempotent.

Service Bus-functies en hun RabbitMQ-antwoord

Overgenomen uit de run en de redenen daarvan. De rechterkolom noemt wat nog te beslissen is; het beslissingsregister wijst de openstaande instellingen toe aan de Identity Architect, de Network Architect en de Platform Architect.

Service Bus-functieRabbitMQ-aanpakBeslissing
QueueEen RabbitMQ-queue die u in de instance configureertQueuenamen en argumenten
Topic met subscriptionsEen exchange met voor elke abonnee een gebonden queueExchangetype en bindings
Dead-letteringEen dead-letter exchange, ingesteld als queueargumentWelke queues er een nodig hebben
Levensduur van berichten, leveringslimietQueueargumenten; voor de lockduur bestaat geen equivalent, het dichtstbijzijnde is de parameter consumer_timeoutDe beperking accepteren of in de consumer bouwen
SessiesGeen sessieconcept: consistent-hash exchanges of single-active consumersOntwerp voor volgorde per key
Duplicate detectionGeen ingebouwde deduplicatie: consumers moeten idempotent zijnIdempotentie in de consumers
Filterregel van een subscriptionNiet beoordeeld door deze build; een architect bepaalt het doelBindingkeys, headers of een filter aan de kant van de consumer
Niveau van de namespaceEen RabbitMQ-plan; een beslissing over de dimensioneringPlangrootte, versie, toegangslijst

De sessiesqueue en de instelling voor duplicate detection in de voorbeeldinvoer leveren de twee waarschuwingen hierboven op; de run laat elk van deze instellingen open voor een medewerker.

Een resource die deze build niet beoordeelt

Een subscriptionregel heeft geen vermelding in de assessmentcatalogus van deze build. De run legt die vast als handmatige eenheid met zekerheidsniveau LOW en schrijft er niets voor. Links: de invoer. Rechts: de assessmentvelden zoals de run ze schreef.

Voorbeeldinvoermain.tf
resource "azurerm_servicebus_subscription_rule" "shipping_only" {
  name            = "eu-only"
  subscription_id = azurerm_servicebus_subscription.shipping.id
  filter_type     = "SqlFilter"
  sql_filter      = "region = 'EU'"
}
StackToIT-assessmentassessment.json
{
  "id": "azurerm_servicebus_subscription_rule.shipping_only",
  "result": {
    "class": "MANUAL_REVIEW",
    "confidence": "LOW",
    "reason": "azurerm_servicebus_subscription_rule is not in the knowledge base catalogue; an architect has to decide the target. Nothing of this resource is assessed or drafted (unknown source type).",
    "coverage": "UNKNOWN_SOURCE_TYPE"
  }
}
  • Er is nog een eigenaar nodig

    Het bestand met handmatige stappen noemt de regel onder stappen zonder eigenaarsrol, omdat het assessment de eenheid geen categorie geeft. Wijs er zelf een toe.

  • Lees het filter, niet alleen de naam

    Het SQL-filter bepaalt welke berichten een subscription ontvangt. Op RabbitMQ verhuist die logica naar bindings of naar de consumer.

Beslissingen die de architect neemt

  • Plan, versie en toegangslijst

    De run vraagt om een RabbitMQ-plan, een versie en de CIDR's van de clients. Geen ervan heeft een standaardwaarde.

  • Volgorde en duplicaten

    Als een queue sessies of duplicate detection vereist, verandert het applicatieontwerp. Beslis dat voordat het eerste bericht verhuist.

  • Berichten onderweg

    Het bestand voor dataverplaatsing van deze run is als niet van toepassing gemarkeerd: de bron bevat geen database, cache of objectopslag en een queue- of topicdienst wordt niet als stateful gelezen. Berichten onderweg maakt u zelf leeg.

  • Back-ups en herstel

    STACKIT documenteert automatische back-ups van de RabbitMQ-dienst: elke 4 uur een volledige back-up, 14 dagen bewaard. Controleer of dat past bij uw herstelbehoeften.

  • Plugins die u mogelijk nodig hebt

    De documentatie noemt plugins die u via het parameterbestand kunt inschakelen, waaronder consistent hash exchange, shovel en federation.

Vragen over deze migratie

Kan dezelfde clientbibliotheek met beide brokers verbinden?

Niet met de Service Bus SDK zoals die nu is. Microsoft noemt AMQP 1.0 het primaire protocol van Service Bus en meldt dat u daarmee applicaties kunt schrijven die werken met Service Bus en met brokers zoals RabbitMQ. De run plant een overstap naar een AMQP 0-9-1-client. Welke route werkt, hangt af van de RabbitMQ-versie die in uw regio wordt aangeboden en van de Service Bus-functies die uw code gebruikt; test dit dus tegen de instance.

Maakt StackToIT de queues en exchanges aan?

Nee. Het concept maakt één RabbitMQ-instance aan. U configureert daarin zelf queues en exchanges, en elke queuenaam en instelling verschijnt als aantekening dat die niet is overgenomen.

Hoe vervang ik sessies?

RabbitMQ kent geen sessieconcept. De run verwijst naar consistent-hash exchanges of single-active consumers voor volgorde per key, en beide vergen een ontwerpbeslissing.

Wat gebeurt er met de berichten die nog in de queues staan?

De tool verplaatst geen data. Maak de Azure-queues leeg met de bestaande consumers, of publiceer bewust opnieuw, en houd de namespace aan tot het laatste bericht is verwerkt.

Bronnen

Uw volgende stap: STACKIT.

Vertel ons over uw omgeving, dan laten wij zien wat StackToIT daarvoor oplevert: doelarchitectuur, Terraform-artefacten en een gestructureerd migratieplan.

Laat uw gegevens achter, onze specialisten nemen contact met u op.

Liever zelf een e-mail sturen? connect@stacktoit.com

Wij gebruiken uw gegevens alleen om dit verzoek te beantwoorden en een mogelijke pilot te bespreken. Privacyverklaring