A notification that something important has happened, but requiring the consumer to query the producer for additional information explicitly.

Examples:

  • DeliveryConfirmed
  • PaycheckGenerated
  • CampaignPublished
{
    "type": "paycheck-generated",
    "event-id": "537ec7c2-d1a1-2005-8654-96aee1116b72",
    "delivery-id": "05011927-a328-4860-a106-737b2929db4e",
    "timestamp": 1615726445,
    "payload": {
        "employee-id": "456123",
        "link": "/paychecks/456123/2021/01"
    }
}

Should not carry all information possible. When needed, consumers should request needed extra data separately.

Passing less data in the message improves security (less data travels through the network, additional authorization to access the data) and concurrency (querying the data explicitly allows getting the up-to-date state of the system and mitigate asynchronous cons of communication when information may become stale before subscriber receives the message; also allows to implement pessimistic locking to limit concurrent consumers that can process the message).