Ga naar inhoud

Service Bus: queues, topics en toegang

Het Integratieplatform biedt Azure Service Bus aan als gedeelde messagingservice. Je maakt geen eigen namespace aan. Je beschrijft de queues, topics en subscriptions die je workload nodig heeft in JSON-bestanden, opent een pull request, en het platform maakt ze aan, samen met de Entra ID-groepen die bepalen wie kan verzenden en ontvangen. Deze pagina is voor workload teams. Operators: zie Service Bus-automatisering (platformzijde).

Optioneel aanbod, per platform ingesteld

Of de gedeelde service Service Bus beschikbaar is, in welke omgevingen en met welke opties, hangt af van je platform. Namen, standaardwaarden en groepspatronen op deze pagina zijn de gebruikelijke waarden van het referentieontwerp. Vraag het aan je platformteam.

Hoe het werkt

Drie lagen werken samen (ADR-012):

Laag Wat het doet Wie het beheert
Gedeelde service De Service Bus-namespace (Premium) en zijn netwerk. Geen entiteiten. Platformteam
Spoke extension Geeft je spoke de rechten die hij nodig heeft op de namespace wanneer de spoke wordt gedeployd (Spoke extensions) Platformteam, samen met de spoke-deployment
Service Bus-automatisering Maakt je queues, topics en subscriptions aan vanuit JSON-bestanden, en de toegangsgroepen per entiteit Integration platform engineers, vanuit jouw pull requests
flowchart LR
    json["queues.json, topics.json,<br/>workload.json<br/>(your pull request)"] --> auto["Service Bus automation"]
    auto -->|"creates"| ent["Queues, topics,<br/>subscriptions"]
    auto -->|"creates"| grp["Entra ID groups<br/>per entity and role"]
    grp -->|"role assignment"| ent
    you["Your team"] -->|"adds managed identities<br/>to the groups"| grp
    app["Logic App, Function App,<br/>Container App"] -->|"Entra ID, private endpoint"| ent

De namespace is alleen bereikbaar via een private endpoint. Maak verbinding met Entra ID, niet met connection strings of keys.

Queues definiëren

Maak een bestand met precies de naam queues.json ergens onder je configuratiemap. Een bestand bevat één queue-object of een lijst met queue-objecten. Houd de bestandsnaam aan: de automatisering verzamelt elke queues.json (en topics.json) in de map en alle submappen, dus je kunt mappen indelen per workload, domein of omgeving. Dubbele definities van dezelfde queue in verschillende mappen moeten worden vermeden.

{
  "workload": "orders",
  "name": "intake",
  "max_delivery_count": 10
}
Veld Verplicht Standaard Betekenis
workload ja De workload die eigenaar is van de queue. Moet overeenkomen met een workloaddefinitie (zie hieronder).
name ja Naam van de queue. De queue in Azure heet sbq-<workload>-<name>.
max_delivery_count nee 10 Aantal leveringen voordat een bericht naar de dead-letter queue gaat
lock_duration nee PT1M Duur van de lock terwijl een receiver een bericht verwerkt (ISO 8601-duur)
max_size_in_megabytes nee 1024 Grootte van de queue
requires_session nee false Session-aware queue
requires_duplicate_detection nee false Duplicate detection, met duplicate_detection_history_time_window (standaard PT10M)
dead_lettering_on_message_expiration nee false Verlopen berichten naar de dead-letter queue verplaatsen
forward_dead_lettered_messages_to nee geen Dead-lettered berichten doorsturen naar een andere entiteit
default_message_ttl, auto_delete_on_idle, max_message_size_in_kilobytes, partitioning_enabled, express_enabled, batched_operations_enabled, status nee zie de module Meer Service Bus-eigenschappen, doorgegeven

Topics, subscriptions en rules definiëren

Een topic is eigendom van de workload die publiceert. Elke subscription noemt de workload die consumeert.

{
  "workload": "orders",
  "name": "order-created",
  "subscriptions": [
    {
      "workload": "billing",
      "name": "billing",
      "rules": [
        {
          "name": "only-eu",
          "filter_type": "SqlFilter",
          "sql_filter": "region = 'EU'"
        }
      ]
    }
  ]
}
Veld Opmerkingen
Topicvelden workload, name, support_ordering (standaard false), requires_duplicate_detection, max_size_in_megabytes (standaard 1024), en dezelfde doorgegeven eigenschappen als bij queues
Subscriptionvelden workload, name, max_delivery_count (standaard 10), dead_lettering_on_filter_evaluation_error (standaard true), lock_duration (standaard PT1M), requires_session, en meer
Rules name en filter_type. SqlFilter neemt sql_filter. CorrelationFilter neemt een correlation_filter-object (correlation_id, label, message_id, to, reply_to, session_id, content_type, properties). Een optionele action.

Namen in Azure: topic sbt-<workload>-<name>, subscription sbts-<subscription workload>-<subscription name>.

Een queue per subscription (standaard)

Voor elke subscription maakt de automatisering ook een queue aan met de naam sbq-<subscription workload>-<topic name>-<subscription name> en stuurt de subscription ernaar door. Je luistert naar die queue, niet naar de subscription. Dit is ADR-008. Het geeft je:

  • dead-lettering op een queue die alleen jouw workload beheert;
  • een retry van een mislukt bericht zonder het opnieuw naar de topic te sturen, zodat andere subscribers het niet twee keer ontvangen;
  • een eenvoudiger model: je hoeft alleen te weten hoe je uit een queue leest.

De queue erft zijn grootte- en duplicate-detection-instellingen van de topic. Het gedrag is een schakelaar van de automatisering (auto_generate_queue_for_topic_subscription, standaard true). Als het platformteam dit heeft uitgezet, lezen receivers in plaats daarvan uit de subscription.

De workload definiëren

Elke workload die in een bestand voorkomt heeft een workloaddefinitie (workload.json) nodig met de naam en de identities van zijn spoke, zodat de automatisering weet welke service principal en groepen ze moet gebruiken. Vraag je platformteam wie dit bestand onderhoudt en waar het staat. De velden die de automatisering leest zijn name, service_principal_object_id, owner_group_id, contributor_group_id en reader_group_id. Als een workload in een queue of topic wordt gebruikt maar geen definitie heeft, faalt het plan.

Wie wat mag: groepen

Voor elke entiteit maakt de automatisering Entra ID-groepen aan in de administrative unit van het platform. Jouw team is owner van de groepen (via de service principal van je spoke) en beheert het lidmaatschap.

Groep Aangemaakt voor Rol die ze krijgt Leden bij aanmaken
Sender-groep Elke queue en elke topic Azure Service Bus Data Sender op die entiteit Leeg. Jij voegt managed identities en service principals toe.
Receiver-groep Elke queue, en elke subscription die niet naar een queue wordt doorgestuurd Azure Service Bus Data Receiver op die entiteit Leeg. Jij voegt identities toe.
Operators-groep Eén keer per workload Sender- en receiver-rechten op elke entiteit van de workload, voor supportacties zoals een mislukt bericht met de hand opnieuw aanbieden De Owners- en Contributors-groepen van je workload-spoke

De namen volgen een patroon dat het platformteam instelt, met {workload} en {entity} als placeholders. Het referentie- patroon is integration-workload-{workload}-{entity}-sender en ...-receiver, waarbij de entiteit de Azure-naam van de queue of topic is, bijvoorbeeld sbq-orders-intake. Vraag je platformteam naar het patroon op jouw platform.

De Readers-groep van je spoke wordt ook toegevoegd aan de read-only groep van het platform voor de namespace, zodat readers de namespace in het portal kunnen zien.

Een applicatie toegang geven

  1. Zoek de groep voor de entiteit en rol (bijvoorbeeld de sender-groep van sbq-orders-intake). Je platformteam kan je de object-ID's geven (de automatisering geeft ze per workload als output).
  2. Voeg de managed identity van je Logic App, Function App of Container App toe aan de groep in Microsoft Entra ID.
  3. Wacht een paar minuten. Een groepswijziging heeft even tijd nodig om op de namespace van kracht te worden.
  4. Maak verbinding met de hostnaam van de namespace (<namespace>.servicebus.windows.net) en Entra ID-authenticatie.

Hiervoor heb je geen pull request nodig. Dat is het punt van het groepsmodel (ADR-005). Je hebt wel een firewallregel nodig als de verzender buiten je spoke staat of het verkeer nog niet is toegestaan (Firewallregels en IP-groepen).

Voeg geen identities toe aan de entiteitsrollen in het portal

Geef toegang via de groepen. Een roltoewijzing die iemand direct op een queue toevoegt, maakt geen deel uit van de code, en de volgende deployment kan die verwijderen of een toestand achterlaten die niemand kan reviewen.

Entiteiten wijzigen of verwijderen

Wijzig de JSON en open een pull request. Lees het plan van de pull request om te zien wat er gebeurt.

  • De meeste eigenschappen worden ter plekke gewijzigd.
  • Een queue, topic of subscription verwijderen verwijdert ook zijn groepen, en verwijdert de berichten erin.
  • Een naam wijzigen maakt een nieuwe entiteit aan en verwijdert de oude.
  • Partitioning van een draaiende namespace is een wijziging met data-impact. Vraag eerst het platformteam.

Hoe de pull request een wijziging wordt: Aanvragen en wijzigen.

Operationele opmerkingen voor workload teams

Onderwerp Wat je moet weten
Beschikbaarheid De Premium-namespace is standaard zone-redundant. Geo-disaster recovery is een optionele maatregel van het platform (Beschikbaarheid).
Doorvoer Messaging units worden handmatig door het platformteam geschaald. Schalen kan verbindingen even resetten, dus doe een retry in je client.
Dead letters Houd de groei van dead letters op je queues in de gaten. Alerting op de namespace is van het platform. Alerts op je applicatie zijn van jou.
Delen Meerdere workloads delen één namespace. Groepen op entiteitsniveau houden ze gescheiden: jouw groep geeft geen toegang tot de queue van een andere workload.