{"id":758,"date":"2026-04-15T11:35:43","date_gmt":"2026-04-15T11:35:43","guid":{"rendered":"https:\/\/www.devopsschool.com\/tutorials\/oracle-cloud-messaging-tutorial-architecture-pricing-use-cases-and-hands-on-guide-for-other-services\/"},"modified":"2026-04-15T11:35:43","modified_gmt":"2026-04-15T11:35:43","slug":"oracle-cloud-messaging-tutorial-architecture-pricing-use-cases-and-hands-on-guide-for-other-services","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/tutorials\/oracle-cloud-messaging-tutorial-architecture-pricing-use-cases-and-hands-on-guide-for-other-services\/","title":{"rendered":"Oracle Cloud Messaging Tutorial: Architecture, Pricing, Use Cases, and Hands-On Guide for Other Services"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Category<\/h2>\n\n\n\n<p>Other Services<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">1. Introduction<\/h2>\n\n\n\n<p>Oracle Cloud <strong>Messaging<\/strong> is best understood as Oracle Cloud Infrastructure (OCI) capabilities that let applications and teams <strong>send, receive, and distribute messages and events<\/strong> reliably\u2014so systems can be decoupled, scalable, and easier to operate.<\/p>\n\n\n\n<p>In simple terms, Messaging helps you <strong>notify people\/systems<\/strong> when something happens (pub\/sub), <strong>buffer work<\/strong> so services don\u2019t overload each other (queues), and <strong>stream events<\/strong> for near real-time processing (event streams).<\/p>\n\n\n\n<p>Technically, Oracle Cloud does not present a single monolithic product named \u201cMessaging\u201d in the way some clouds do. Instead, OCI messaging is delivered through multiple managed services\u2014most commonly:\n&#8211; <strong>OCI Notifications<\/strong> (pub\/sub notifications with topics and subscriptions)\n&#8211; <strong>OCI Streaming<\/strong> (event streaming; Kafka-like concepts)\n&#8211; <strong>OCI Queue<\/strong> (managed message queues)<\/p>\n\n\n\n<p>This tutorial uses <strong>\u201cMessaging\u201d<\/strong> as the umbrella service name (as provided in your input mapping) and focuses hands-on steps on <strong>OCI Notifications<\/strong> because it is the fastest way to implement a real, low-cost messaging workflow you can validate in minutes. Where relevant, the tutorial also explains when you should use Streaming or Queue instead.<\/p>\n\n\n\n<p><strong>What problem it solves:<\/strong> Messaging solves the core distributed-systems problem of <strong>coordination without tight coupling<\/strong>\u2014allowing services to communicate asynchronously, absorb spikes, fan out events to multiple consumers, and improve reliability when downstream systems are slow or temporarily unavailable.<\/p>\n\n\n\n<hr class=\"wp-block-separator\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">2. What is Messaging?<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Official purpose (OCI scope)<\/h3>\n\n\n\n<p>In Oracle Cloud, Messaging capabilities are designed to enable <strong>asynchronous communication<\/strong> between applications, microservices, cloud resources, and humans\/operators using managed primitives such as topics, streams, and queues.<\/p>\n\n\n\n<p>Because \u201cMessaging\u201d is a broad term in OCI, you should map your requirement to the right underlying service type:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Notifications<\/strong>: publish-subscribe notifications (fan-out) to email and other endpoints.<\/li>\n<li><strong>Queue<\/strong>: point-to-point work distribution with consumer processing.<\/li>\n<li><strong>Streaming<\/strong>: high-throughput event ingestion and multi-consumer stream processing.<\/li>\n<\/ul>\n\n\n\n<p>Always confirm current service names and scope in OCI documentation:\n&#8211; OCI Notifications docs: https:\/\/docs.oracle.com\/en-us\/iaas\/Content\/Notification\/home.htm<br\/>\n&#8211; OCI Streaming docs: https:\/\/docs.oracle.com\/en-us\/iaas\/Content\/Streaming\/home.htm<br\/>\n&#8211; OCI Queue docs (verify in official docs for your region): https:\/\/docs.oracle.com\/en-us\/iaas\/Content\/Queue\/home.htm (If this URL changes, locate \u201cQueue\u201d from the OCI docs index.)<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Core capabilities<\/h3>\n\n\n\n<p>Across these services, OCI Messaging commonly provides:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Asynchronous delivery<\/strong> (producer and consumer don\u2019t need to run at the same time)<\/li>\n<li><strong>Decoupling<\/strong> (producers don\u2019t need to know consumer details)<\/li>\n<li><strong>Fan-out<\/strong> (one message triggers many subscriptions\u2014Notifications)<\/li>\n<li><strong>Buffering and smoothing traffic<\/strong> (queues handle bursts\u2014Queue)<\/li>\n<li><strong>Replay and multi-consumer processing<\/strong> (streams\u2014Streaming)<\/li>\n<li><strong>Identity-first access control<\/strong> (OCI IAM policies)<\/li>\n<li><strong>Integrations with OCI services<\/strong> (Events, Monitoring, Functions, Logging, etc.; validate per service)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Major components (by service)<\/h3>\n\n\n\n<p><strong>OCI Notifications<\/strong>\n&#8211; <strong>Topic<\/strong>: a named channel to publish messages to\n&#8211; <strong>Subscription<\/strong>: endpoint subscribed to a topic (for example, email)\n&#8211; <strong>Message<\/strong>: payload published to a topic (often JSON or simple text)<\/p>\n\n\n\n<p><strong>OCI Streaming<\/strong>\n&#8211; <strong>Stream<\/strong>: append-only log of events\n&#8211; <strong>Partitions<\/strong>: parallelism\/sharding\n&#8211; <strong>Consumers\/consumer groups<\/strong>: read events for processing\n&#8211; <strong>Retention<\/strong>: time window for replay<\/p>\n\n\n\n<p><strong>OCI Queue<\/strong>\n&#8211; <strong>Queue<\/strong>: holds messages until consumed\n&#8211; <strong>Producers \/ consumers<\/strong>: send\/receive messages\n&#8211; <strong>(Common pattern)<\/strong> visibility timeouts and dead-letter behavior (verify exact OCI Queue feature set in official docs)<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Service type<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Managed cloud services<\/strong> (PaaS-style), accessed via Console, CLI, SDKs, and REST APIs.<\/li>\n<li>Messaging resources are typically <strong>regional<\/strong> (you choose an OCI region and create resources there). Exact behavior varies by service\u2014verify per service documentation.<\/li>\n<li>Resources are <strong>tenancy-scoped<\/strong> and <strong>compartment-scoped<\/strong> for organization and IAM control.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">How it fits into the Oracle Cloud ecosystem<\/h3>\n\n\n\n<p>Messaging is a foundational layer for event-driven OCI architectures:\n&#8211; <strong>OCI Events<\/strong> can route cloud events to <strong>Notifications<\/strong> (and sometimes to other targets).\n&#8211; <strong>OCI Functions<\/strong> can react to messages\/events (commonly via Events or via HTTPS endpoints).\n&#8211; <strong>OCI Monitoring\/Alarms<\/strong> can notify operators.\n&#8211; <strong>OCI Logging\/Audit<\/strong> provide governance trails for Messaging resource changes.\n&#8211; <strong>OCI Service Connector Hub<\/strong> can move data between services (for example, Streaming to Object Storage) depending on supported connectors (verify current connectors).<\/p>\n\n\n\n<hr class=\"wp-block-separator\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">3. Why use Messaging?<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Business reasons<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Faster delivery of features<\/strong>: teams can add consumers without changing producers.<\/li>\n<li><strong>Improved customer experience<\/strong>: systems remain responsive during spikes because workloads can be buffered.<\/li>\n<li><strong>Operational resilience<\/strong>: asynchronous patterns reduce blast radius from downstream outages.<\/li>\n<li><strong>Auditability and compliance<\/strong>: access controlled by IAM, changes captured by Audit logs.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Technical reasons<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Decouple microservices<\/strong>: publish events like <code>OrderCreated<\/code> without hard dependencies.<\/li>\n<li><strong>Event-driven design<\/strong>: react to events rather than poll databases.<\/li>\n<li><strong>Fan-out processing<\/strong>: one event triggers notifications to multiple teams\/systems.<\/li>\n<li><strong>Traffic smoothing<\/strong>: queues and streams absorb bursts.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Operational reasons<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Managed infrastructure<\/strong>: reduces the need to run Kafka\/RabbitMQ yourself.<\/li>\n<li><strong>Integration-friendly<\/strong>: works with OCI IAM, compartments, policies, and other OCI services.<\/li>\n<li><strong>Standard automation<\/strong>: provisioning via Terraform (Resource Manager) or OCI CLI.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Security\/compliance reasons<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>IAM-first control<\/strong>: compartment-level access policies reduce over-permissioning.<\/li>\n<li><strong>Encryption<\/strong>: OCI services generally encrypt data at rest; verify service-specific encryption and customer-managed keys support.<\/li>\n<li><strong>Audit trails<\/strong>: resource creation\/modification calls are logged in OCI Audit.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Scalability\/performance reasons<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Notifications<\/strong> scales fan-out to multiple subscriptions.<\/li>\n<li><strong>Streaming<\/strong> is designed for high-throughput event ingestion and multi-consumer reads.<\/li>\n<li><strong>Queue<\/strong> is intended for parallel worker patterns and back-pressure control.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">When teams should choose Messaging<\/h3>\n\n\n\n<p>Choose OCI Messaging capabilities when you need:\n&#8211; asynchronous processing,\n&#8211; event fan-out,\n&#8211; decoupling and resiliency,\n&#8211; real-time or near-real-time integration patterns,\n&#8211; operational notifications and alerting.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">When teams should not choose it<\/h3>\n\n\n\n<p>Avoid or reconsider if:\n&#8211; you require <strong>strict exactly-once<\/strong> semantics end-to-end (hard in distributed systems; verify what each OCI service guarantees),\n&#8211; you need <strong>ultra-low-latency<\/strong> synchronous RPC (use APIs\/GRPC instead),\n&#8211; your messages are extremely large (most messaging services have payload limits\u2014verify),\n&#8211; you need advanced routing features that are specific to self-managed brokers (e.g., complex AMQP headers\/exchanges); consider self-managed RabbitMQ\/Kafka if required.<\/p>\n\n\n\n<hr class=\"wp-block-separator\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">4. Where is Messaging used?<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Industries<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>SaaS and software<\/strong>: microservices, integrations, billing events<\/li>\n<li><strong>Fintech<\/strong>: transaction events, fraud pipelines (with careful compliance)<\/li>\n<li><strong>Retail\/e-commerce<\/strong>: orders, payments, shipping events<\/li>\n<li><strong>Media and IoT<\/strong>: telemetry ingestion and streaming analytics<\/li>\n<li><strong>Enterprise IT<\/strong>: operational notifications, job orchestration<\/li>\n<li><strong>Healthcare<\/strong>: event-driven workflows (ensure compliance requirements are met)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Team types<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Platform engineering and SRE (alerts and automation)<\/li>\n<li>DevOps teams (event-driven CI\/CD triggers, notifications)<\/li>\n<li>Backend developers (async workflows)<\/li>\n<li>Data engineering (streams for ETL\/ELT)<\/li>\n<li>Security operations (event pipelines to SIEM patterns\u2014verify supported connectors)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Workloads<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Microservices orchestration<\/li>\n<li>Background processing (image processing, report generation)<\/li>\n<li>Audit\/event pipelines<\/li>\n<li>User communication triggers (email notifications via a separate service; Messaging is typically the trigger mechanism)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Architectures<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Event-driven architectures (EDA)<\/li>\n<li>CQRS\/event sourcing patterns (commonly with streaming)<\/li>\n<li>Fan-out notification patterns<\/li>\n<li>Worker pool patterns (queues)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Real-world deployment contexts<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Production<\/strong>: high availability design, IAM policies, monitoring\/alerting, quotas, and cost controls.<\/li>\n<li><strong>Dev\/test<\/strong>: minimal topics\/queues, lower retention, and aggressive cleanup.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">5. Top Use Cases and Scenarios<\/h2>\n\n\n\n<p>Below are realistic OCI Messaging use cases. Each includes the problem, why Messaging fits, and a short scenario. (The recommended underlying OCI service is included to avoid ambiguity.)<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\n<p><strong>Operations alert fan-out (Notifications)<\/strong>\n   &#8211; <strong>Problem:<\/strong> Operators need fast alerts when alarms trigger.\n   &#8211; <strong>Why it fits:<\/strong> Publish once; deliver to multiple subscriptions (email endpoints).\n   &#8211; <strong>Scenario:<\/strong> OCI Monitoring alarm fires \u2192 publish to a Notifications topic \u2192 email on-call group.<\/p>\n<\/li>\n<li>\n<p><strong>Microservice event fan-out (Notifications or Streaming)<\/strong>\n   &#8211; <strong>Problem:<\/strong> Multiple services must react to an event without tight coupling.\n   &#8211; <strong>Why it fits:<\/strong> Pub\/sub supports multiple independent consumers.\n   &#8211; <strong>Scenario:<\/strong> <code>OrderCreated<\/code> published \u2192 billing service, inventory service, and analytics each react.<\/p>\n<\/li>\n<li>\n<p><strong>Background image processing pipeline (Queue)<\/strong>\n   &#8211; <strong>Problem:<\/strong> Web app must not block while processing images.\n   &#8211; <strong>Why it fits:<\/strong> Queue buffers tasks; worker fleet processes asynchronously.\n   &#8211; <strong>Scenario:<\/strong> Upload triggers enqueue <code>ResizeImage<\/code> job \u2192 workers consume \u2192 store output.<\/p>\n<\/li>\n<li>\n<p><strong>Clickstream ingestion (Streaming)<\/strong>\n   &#8211; <strong>Problem:<\/strong> High-volume event ingestion with replay.\n   &#8211; <strong>Why it fits:<\/strong> Streams provide ordered partitions and retention for multiple consumers.\n   &#8211; <strong>Scenario:<\/strong> App emits click events \u2192 Streaming \u2192 one consumer for near real-time metrics, another for batch storage.<\/p>\n<\/li>\n<li>\n<p><strong>Audit pipeline triggers (Streaming)<\/strong>\n   &#8211; <strong>Problem:<\/strong> Need to process security events reliably at scale.\n   &#8211; <strong>Why it fits:<\/strong> Streaming supports durable ingestion and multiple consumers.\n   &#8211; <strong>Scenario:<\/strong> Security events ingested to a stream \u2192 consumer enriches and forwards to storage\/SIEM.<\/p>\n<\/li>\n<li>\n<p><strong>Scheduled job orchestration (Queue)<\/strong>\n   &#8211; <strong>Problem:<\/strong> Run periodic tasks reliably and distribute load.\n   &#8211; <strong>Why it fits:<\/strong> Queue supports worker pooling.\n   &#8211; <strong>Scenario:<\/strong> Scheduler enqueues 10,000 tasks nightly \u2192 autoscaled workers consume.<\/p>\n<\/li>\n<li>\n<p><strong>Third-party webhook relay (Notifications to HTTPS endpoints)<\/strong>\n   &#8211; <strong>Problem:<\/strong> Multiple webhooks must be called on an event, with centralized control.\n   &#8211; <strong>Why it fits:<\/strong> Publish to a topic; subscribed HTTPS endpoints receive.\n   &#8211; <strong>Scenario:<\/strong> Payment success event \u2192 publish \u2192 notify CRM webhook + fulfillment webhook.<\/p>\n<\/li>\n<li>\n<p><strong>CI\/CD deployment notifications (Notifications)<\/strong>\n   &#8211; <strong>Problem:<\/strong> Teams need consistent deployment status updates.\n   &#8211; <strong>Why it fits:<\/strong> Simple pub\/sub notifications; easy integration from pipelines.\n   &#8211; <strong>Scenario:<\/strong> Pipeline publishes <code>DeploySuccess<\/code> \u2192 topic emails release channel.<\/p>\n<\/li>\n<li>\n<p><strong>IoT telemetry buffering (Streaming)<\/strong>\n   &#8211; <strong>Problem:<\/strong> Devices send telemetry bursts; consumers process later.\n   &#8211; <strong>Why it fits:<\/strong> Streams absorb bursts, keep data for replay.\n   &#8211; <strong>Scenario:<\/strong> Telemetry \u2192 stream \u2192 consumers for anomaly detection and cold storage.<\/p>\n<\/li>\n<li>\n<p><strong>Decouple database writes from API latency (Queue)<\/strong>\n   &#8211; <strong>Problem:<\/strong> API must respond quickly; DB writes are heavy.\n   &#8211; <strong>Why it fits:<\/strong> Enqueue work; async workers commit to DB.\n   &#8211; <strong>Scenario:<\/strong> API stores minimal record \u2192 queue message triggers enrichment and final write.<\/p>\n<\/li>\n<li>\n<p><strong>Fan-out compliance notifications (Notifications)<\/strong>\n   &#8211; <strong>Problem:<\/strong> Regulatory events must notify multiple stakeholders quickly.\n   &#8211; <strong>Why it fits:<\/strong> Central topic; controlled subscription list.\n   &#8211; <strong>Scenario:<\/strong> \u201cPolicy updated\u201d event \u2192 topic emails compliance + audit.<\/p>\n<\/li>\n<li>\n<p><strong>Multi-stage data pipeline (Streaming + Queue)<\/strong>\n   &#8211; <strong>Problem:<\/strong> Different processing stages have different throughput needs.\n   &#8211; <strong>Why it fits:<\/strong> Stream for ingestion; queue for discrete tasks at later stages.\n   &#8211; <strong>Scenario:<\/strong> Stream raw events \u2192 consumer validates \u2192 enqueue tasks for enrichment.<\/p>\n<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">6. Core Features<\/h2>\n\n\n\n<p>Because \u201cMessaging\u201d spans multiple OCI services, features are grouped by capability. Always verify the exact feature set in official docs for the specific OCI messaging service you plan to use.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">6.1 Topics and publish\/subscribe (OCI Notifications)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>What it does:<\/strong> Provides a <strong>topic<\/strong> you can publish messages to; <strong>subscriptions<\/strong> deliver them to endpoints.<\/li>\n<li><strong>Why it matters:<\/strong> Enables clean fan-out; producers don\u2019t manage subscriber lists.<\/li>\n<li><strong>Practical benefit:<\/strong> One publish can notify on-call email, an automation webhook, and a ticketing integration.<\/li>\n<li><strong>Limitations\/caveats:<\/strong> Delivery protocols and endpoint types vary by region and product updates. Verify current supported subscription protocols in OCI Notifications docs.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">6.2 Subscriptions (OCI Notifications)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>What it does:<\/strong> Associates an endpoint (for example, an email address) with a topic.<\/li>\n<li><strong>Why it matters:<\/strong> Decouples distribution list management from application code.<\/li>\n<li><strong>Practical benefit:<\/strong> Add\/remove recipients without redeploying services.<\/li>\n<li><strong>Limitations\/caveats:<\/strong> Some endpoints require confirmation\/handshake (common for email). Ensure you plan for subscription confirmation in automation.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">6.3 Event streaming with retention (OCI Streaming)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>What it does:<\/strong> Stores a <strong>stream of events<\/strong> for a configurable retention period so multiple consumers can read independently.<\/li>\n<li><strong>Why it matters:<\/strong> Supports replay and late-joining consumers; common in data engineering and event-driven apps.<\/li>\n<li><strong>Practical benefit:<\/strong> New analytics consumer can replay past events without impacting the producer.<\/li>\n<li><strong>Limitations\/caveats:<\/strong> Throughput, partitions, and retention settings affect cost and operations. Confirm limits for partitions and retention in your tenancy\/region.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">6.4 Partitioning and parallel consumption (OCI Streaming)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>What it does:<\/strong> Partitions allow parallel producers\/consumers and can preserve ordering per key within a partition.<\/li>\n<li><strong>Why it matters:<\/strong> Enables scalable consumption without a single bottleneck.<\/li>\n<li><strong>Practical benefit:<\/strong> Multiple consumer instances can process events concurrently.<\/li>\n<li><strong>Limitations\/caveats:<\/strong> Ordering guarantees are usually partition-scoped. Design keys carefully.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">6.5 Queue-based work distribution (OCI Queue)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>What it does:<\/strong> Provides point-to-point messaging so workers can pull tasks and process them.<\/li>\n<li><strong>Why it matters:<\/strong> Standard pattern for background jobs and asynchronous workflows.<\/li>\n<li><strong>Practical benefit:<\/strong> Scale workers horizontally; handle spikes without overloading downstream systems.<\/li>\n<li><strong>Limitations\/caveats:<\/strong> Confirm message visibility, retry, and dead-letter capabilities for OCI Queue in your region; don\u2019t assume Kafka-like semantics.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">6.6 IAM policies and compartment scoping (All OCI Messaging services)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>What it does:<\/strong> Controls who can create\/manage topics\/queues\/streams and publish\/consume messages.<\/li>\n<li><strong>Why it matters:<\/strong> Reduces accidental exposure and prevents unauthorized publishing\/consuming.<\/li>\n<li><strong>Practical benefit:<\/strong> Grant least-privilege access per environment (dev\/test\/prod compartments).<\/li>\n<li><strong>Limitations\/caveats:<\/strong> Misconfigured policies are the #1 cause of \u201cnot authorized\u201d errors.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">6.7 Encryption and secure access (All OCI Messaging services)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>What it does:<\/strong> OCI services generally support encryption at rest and TLS in transit. Some services may support customer-managed keys via OCI Vault (verify per service).<\/li>\n<li><strong>Why it matters:<\/strong> Protects data and meets compliance requirements.<\/li>\n<li><strong>Practical benefit:<\/strong> Safer handling of operational notifications and event payloads.<\/li>\n<li><strong>Limitations\/caveats:<\/strong> Don\u2019t put secrets into message payloads; treat messages as potentially widely distributed.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">6.8 Integration with OCI governance and observability (All)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>What it does:<\/strong> Works with OCI Audit (API calls), Monitoring (metrics), and Logging (service logs where supported).<\/li>\n<li><strong>Why it matters:<\/strong> Enables operational visibility and compliance trails.<\/li>\n<li><strong>Practical benefit:<\/strong> Troubleshoot why a publish failed, track subscription churn, and set alarms on error metrics.<\/li>\n<li><strong>Limitations\/caveats:<\/strong> Metrics\/log availability differs by service\u2014verify what\u2019s emitted and how long it\u2019s retained.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">7. Architecture and How It Works<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">7.1 High-level service architecture<\/h3>\n\n\n\n<p>At a conceptual level, Oracle Cloud Messaging follows standard asynchronous patterns:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Producers<\/strong> publish messages\/events.<\/li>\n<li>The <strong>Messaging service<\/strong> stores and\/or routes messages.<\/li>\n<li><strong>Consumers\/subscribers<\/strong> receive or pull messages.<\/li>\n<li><strong>IAM<\/strong> authorizes API calls.<\/li>\n<li><strong>Observability<\/strong> records changes, metrics, and sometimes delivery outcomes.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">7.2 Request\/data\/control flow (Notifications example)<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>An authenticated client (user, instance principal, or workload identity) calls Notifications <strong>PublishMessage<\/strong> against a topic.<\/li>\n<li>Notifications validates IAM permissions and topic state.<\/li>\n<li>Notifications routes the message to each subscription endpoint.<\/li>\n<li>Delivery success\/failure is tracked internally; metrics\/audit events are emitted depending on service capabilities.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">7.3 Integrations with related OCI services (common patterns)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>OCI Monitoring + Alarms \u2192 Notifications<\/strong> for alerting.<\/li>\n<li><strong>OCI Events \u2192 Notifications<\/strong> for routing resource events.<\/li>\n<li><strong>OCI Functions<\/strong> can be used as a consumer pattern (commonly via Events or HTTPS endpoints, depending on design).<\/li>\n<li><strong>OCI Logging and OCI Audit<\/strong> for governance and troubleshooting.<\/li>\n<\/ul>\n\n\n\n<p>Always confirm integration capabilities in official docs for your selected service(s):\n&#8211; OCI Events: https:\/\/docs.oracle.com\/en-us\/iaas\/Content\/Events\/home.htm<br\/>\n&#8211; OCI Monitoring: https:\/\/docs.oracle.com\/en-us\/iaas\/Content\/Monitoring\/home.htm<br\/>\n&#8211; OCI Audit: https:\/\/docs.oracle.com\/en-us\/iaas\/Content\/Audit\/home.htm  <\/p>\n\n\n\n<h3 class=\"wp-block-heading\">7.4 Dependency services<\/h3>\n\n\n\n<p>Messaging services depend on:\n&#8211; OCI Identity and Access Management (IAM) for authentication and authorization\n&#8211; OCI networking for endpoint communication (especially if using HTTPS subscriptions to private endpoints; verify supported patterns)\n&#8211; OCI region availability and service limits\/quotas<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">7.5 Security\/authentication model<\/h3>\n\n\n\n<p>Typical authentication choices:\n&#8211; <strong>User principals<\/strong> (Console, CLI using API keys, SSO)\n&#8211; <strong>Instance principals<\/strong> (OCI compute instance identity)\n&#8211; <strong>Workload identities<\/strong> (for OCI services that support it; verify for your runtime)<\/p>\n\n\n\n<p>Authorization is enforced via <strong>IAM policies<\/strong> scoped to <strong>compartments<\/strong>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">7.6 Networking model<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>For <strong>Notifications to email<\/strong>: OCI delivers externally (no VCN required).<\/li>\n<li>For <strong>HTTPS endpoints<\/strong>: your endpoint must be reachable per the subscription model you choose (public internet vs private connectivity patterns). Verify whether private endpoints are supported directly for the protocol you need.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">7.7 Monitoring\/logging\/governance considerations<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Use <strong>OCI Audit<\/strong> to track who created topics\/subscriptions and who changed IAM policies.<\/li>\n<li>Use <strong>OCI Monitoring metrics<\/strong> (service-specific) to alert on publish failures, delivery errors, or backlog growth (streams\/queues).<\/li>\n<li>Use consistent <strong>tags<\/strong> and <strong>naming conventions<\/strong> for environment separation.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">7.8 Diagrams<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">Simple Messaging architecture (Notifications)<\/h4>\n\n\n\n<pre><code class=\"language-mermaid\">flowchart LR\n  P[Producer\\n(OCI CLI \/ App)] --&gt;|Publish| T[Notifications Topic]\n  T --&gt; S1[Email Subscription]\n  T --&gt; S2[HTTPS Subscription\\n(Optional)]\n  IAM[(OCI IAM Policies)] -. Authorize .- P\n<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">Production-style event-driven architecture (mixed Messaging services)<\/h4>\n\n\n\n<pre><code class=\"language-mermaid\">flowchart TB\n  subgraph OCI_Region[Oracle Cloud (OCI Region)]\n    subgraph AppVCN[VCN \/ Subnets]\n      API[API Service\\n(Compute\/OKE)]\n      Worker[Worker Fleet\\n(Compute\/OKE)]\n    end\n\n    Events[OCI Events]\n    Notif[OCI Notifications\\nTopic]\n    Stream[OCI Streaming\\nStream]\n    Queue[OCI Queue\\nQueue]\n\n    Mon[OCI Monitoring + Alarms]\n    Audit[OCI Audit]\n    Log[OCI Logging]\n    Obj[Object Storage]\n    Fn[OCI Functions\\n(Optional)]\n  end\n\n  API --&gt;|Emit business event| Stream\n  Stream --&gt;|Consumer: enrichment| Worker\n  Worker --&gt;|Enqueue jobs| Queue\n  Queue --&gt;|Dequeue jobs| Worker\n  Events --&gt;|Resource events| Notif\n  Mon --&gt;|Alarm triggers| Notif\n  Notif --&gt;|Email\/Webhook| Ops[Ops Team \/ On-call]\n\n  API --&gt; Obj\n  Obj --&gt;|Object created event| Events\n\n  Audit -. API calls .- API\n  Audit -. resource changes .- Notif\n  Log -. logs .- API\n  Log -. logs .- Worker\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">8. Prerequisites<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Account\/tenancy requirements<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>An active <strong>Oracle Cloud (OCI) tenancy<\/strong> with access to the region where you will create Messaging resources.<\/li>\n<li>A user account (or federated identity) that can access the OCI Console.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Permissions \/ IAM roles<\/h3>\n\n\n\n<p>For hands-on Notifications work, you typically need permissions to:\n&#8211; create\/manage topics and subscriptions\n&#8211; publish messages<\/p>\n\n\n\n<p>OCI uses policy language. Exact verbs\/resources can differ; verify in the Notifications IAM policy reference:\n&#8211; Notifications IAM policies (verify current doc sections): https:\/\/docs.oracle.com\/en-us\/iaas\/Content\/Notification\/Concepts\/notificationoverview.htm<\/p>\n\n\n\n<p>A common pattern is to grant a group permissions in a compartment. Example (verify resource names in official docs before using in production):<\/p>\n\n\n\n<pre><code class=\"language-text\">Allow group &lt;group-name&gt; to manage ons-topics in compartment &lt;compartment-name&gt;\nAllow group &lt;group-name&gt; to manage ons-subscriptions in compartment &lt;compartment-name&gt;\nAllow group &lt;group-name&gt; to use ons-topics in compartment &lt;compartment-name&gt;\n<\/code><\/pre>\n\n\n\n<p>If the policy resource-types differ (OCI occasionally updates taxonomy), use the exact names from the IAM policy reference pages.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Billing requirements<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Messaging usage may incur charges depending on service, region, and delivery protocol. Ensure billing is enabled if you are outside Free Tier usage.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">CLI\/SDK\/tools needed<\/h3>\n\n\n\n<p>For the lab, you can use either:\n&#8211; <strong>OCI Console<\/strong> only (simplest), or\n&#8211; <strong>OCI CLI<\/strong> for publish\/verification automation.<\/p>\n\n\n\n<p>OCI CLI:\n&#8211; Docs: https:\/\/docs.oracle.com\/en-us\/iaas\/Content\/API\/SDKDocs\/cliinstall.htm<\/p>\n\n\n\n<p>Optional:\n&#8211; Python\/Java\/Go SDKs for deeper integration (not required for this beginner lab).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Region availability<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Not all OCI services and features are in every region. Confirm in the OCI region\/service availability pages and service documentation for Notifications\/Streaming\/Queue.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Quotas\/limits<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>OCI enforces service limits (topics, subscriptions, streams\/partitions, queue throughput, etc.).<\/li>\n<li>Check <strong>Service Limits<\/strong> in the OCI Console for your tenancy and region.<\/li>\n<li>Plan for quotas in production (especially if using Streaming partitions or large subscription counts).<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Prerequisite services<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>OCI IAM (always)<\/li>\n<li>For optional event-driven extensions: OCI Events, Object Storage, Monitoring<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">9. Pricing \/ Cost<\/h2>\n\n\n\n<p>Oracle Cloud Messaging cost depends on which underlying messaging service you use and how you use it.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Official pricing sources<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>OCI pricing overview \/ price list: https:\/\/www.oracle.com\/cloud\/price-list\/  <\/li>\n<li>OCI cost estimator: https:\/\/www.oracle.com\/cloud\/costestimator.html  <\/li>\n<\/ul>\n\n\n\n<p>Use the price list to locate entries for <strong>Notifications<\/strong>, <strong>Streaming<\/strong>, and <strong>Queue<\/strong> (and any protocol-specific delivery charges, if listed).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Pricing dimensions (typical)<\/h3>\n\n\n\n<p>Because Oracle pricing and SKUs can be region-specific and change over time, treat these as <strong>pricing dimensions to verify<\/strong>, not fixed prices:<\/p>\n\n\n\n<p><strong>OCI Notifications (common dimensions)<\/strong>\n&#8211; Number of publish requests \/ delivered notifications\n&#8211; Subscription endpoint delivery type (for example, SMS delivery\u2014if enabled\u2014may be priced differently)\n&#8211; API requests and message delivery volume (verify exact meters)<\/p>\n\n\n\n<p><strong>OCI Streaming (common dimensions)<\/strong>\n&#8211; Stream throughput and\/or partition-hours\n&#8211; Storage\/retention (GB-month)\n&#8211; Ingress\/egress (data volume)\n&#8211; API requests (verify meters)<\/p>\n\n\n\n<p><strong>OCI Queue (common dimensions)<\/strong>\n&#8211; Requests (send\/receive\/delete)\n&#8211; Data volume stored\/retained\n&#8211; Message retention \/ throughput tiers (verify meters)<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Free Tier<\/h3>\n\n\n\n<p>Oracle Cloud Free Tier often includes limited usage for certain services, but coverage changes. Verify current Free Tier eligibility and specific Messaging meters:\n&#8211; Free Tier page: https:\/\/www.oracle.com\/cloud\/free\/  <\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Cost drivers<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Message volume<\/strong> (publish rate, deliveries per message for fan-out)<\/li>\n<li><strong>Retention<\/strong> (streams and queues holding data longer)<\/li>\n<li><strong>Fan-out factor<\/strong> (one publish \u2192 N deliveries)<\/li>\n<li><strong>Cross-region traffic<\/strong> (if you design multi-region messaging; may add network cost)<\/li>\n<li><strong>Operational overhead<\/strong> (logging\/monitoring ingestion costs depending on your logging configuration)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Hidden or indirect costs<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Logging ingestion\/storage<\/strong> if you enable verbose logs across producers\/consumers.<\/li>\n<li><strong>Compute costs<\/strong> for workers\/consumers processing queue\/stream messages.<\/li>\n<li><strong>Data egress<\/strong> if messages trigger calls to external endpoints (HTTPS) or if consumers run outside OCI.<\/li>\n<li><strong>SMS\/telephony<\/strong> costs (if you use SMS subscriptions; verify pricing and availability).<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Network\/data transfer implications<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>OCI networking charges can apply for egress to the public internet or cross-region flows.<\/li>\n<li>Keep producers\/consumers in the same region where possible to reduce latency and cost.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">How to optimize cost<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Use <strong>Notifications<\/strong> for lightweight operational fan-out rather than building custom delivery logic.<\/li>\n<li>Minimize message payload size; store large data in Object Storage and send references.<\/li>\n<li>For Streaming, choose partitions and retention that match real needs (avoid \u201cjust in case\u201d over-retention).<\/li>\n<li>Use tags to attribute costs by environment\/team.<\/li>\n<li>Implement cleanup automation for dev\/test topics, streams, subscriptions, and queues.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Example low-cost starter estimate (non-numeric)<\/h3>\n\n\n\n<p>A low-cost starter setup typically includes:\n&#8211; 1 Notifications topic\n&#8211; 1\u20132 email subscriptions\n&#8211; Manual\/low-frequency publishes for testing\n&#8211; Minimal logs enabled<\/p>\n\n\n\n<p>Cost is often near-zero at small scale, but <strong>do not assume it is free<\/strong>\u2014verify Notifications meters in your region and whether email deliveries are charged.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Example production cost considerations<\/h3>\n\n\n\n<p>In production, costs typically come from:\n&#8211; high message volume and fan-out deliveries (Notifications),\n&#8211; sustained ingestion\/retention (Streaming),\n&#8211; heavy request rates and worker scaling (Queue + compute),\n&#8211; egress to external webhooks,\n&#8211; observability retention.<\/p>\n\n\n\n<p>For production planning, use the <strong>OCI cost estimator<\/strong> and validate against load tests.<\/p>\n\n\n\n<hr class=\"wp-block-separator\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">10. Step-by-Step Hands-On Tutorial<\/h2>\n\n\n\n<p>This lab implements a real, beginner-friendly Messaging workflow using <strong>OCI Notifications<\/strong> (part of OCI Messaging capabilities): create a topic, subscribe an email endpoint, publish a message, validate delivery, and clean up.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Objective<\/h3>\n\n\n\n<p>Create an Oracle Cloud Messaging workflow where you can publish a message to a <strong>Notifications topic<\/strong> and receive it via <strong>email subscription<\/strong>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Lab Overview<\/h3>\n\n\n\n<p>You will:\n1. Create (or choose) an OCI compartment for the lab.\n2. Create a Notifications topic.\n3. Create an email subscription and confirm it.\n4. Publish messages (Console and optional CLI).\n5. Validate message delivery and view audit events.\n6. Clean up to avoid ongoing resources.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 1: Prepare a compartment and IAM access<\/h3>\n\n\n\n<p><strong>Goal:<\/strong> Ensure you have a compartment and permissions to manage Notifications resources.<\/p>\n\n\n\n<p><strong>Console actions<\/strong>\n1. Sign in to the OCI Console.\n2. Navigate to <strong>Identity &amp; Security \u2192 Compartments<\/strong>.\n3. Create a compartment (example name): <code>messaging-lab<\/code>\n   &#8211; Parent compartment: your root compartment (or another allowed parent)\n   &#8211; Note the compartment <strong>OCID<\/strong> (optional)<\/p>\n\n\n\n<p><strong>Expected outcome<\/strong>\n&#8211; A compartment exists for isolating Messaging lab resources.<\/p>\n\n\n\n<p><strong>Permissions check<\/strong>\nIf you cannot create resources later, you likely need an administrator (or policy admin) to grant you access. The person managing policies can add a policy like (verify exact resource types in current docs):<\/p>\n\n\n\n<pre><code class=\"language-text\">Allow group &lt;your-group&gt; to manage ons-topics in compartment messaging-lab\nAllow group &lt;your-group&gt; to manage ons-subscriptions in compartment messaging-lab\n<\/code><\/pre>\n\n\n\n<p>If you are an administrator in a sandbox tenancy, you can create this policy yourself under:\n&#8211; <strong>Identity &amp; Security \u2192 Policies<\/strong><\/p>\n\n\n\n<p><strong>Verification<\/strong>\n&#8211; You can open the compartment and see it listed.\n&#8211; You can navigate to Notifications without authorization errors.<\/p>\n\n\n\n<hr class=\"wp-block-separator\" \/>\n\n\n\n<h3 class=\"wp-block-heading\">Step 2: Create a Notifications topic (Messaging channel)<\/h3>\n\n\n\n<p><strong>Goal:<\/strong> Create the topic that producers will publish to.<\/p>\n\n\n\n<p><strong>Console actions<\/strong>\n1. Navigate to <strong>Developer Services<\/strong> (or search) \u2192 <strong>Notifications<\/strong>.\n2. Choose the region you want (top-right region selector).\n3. Select compartment: <code>messaging-lab<\/code>\n4. Click <strong>Create Topic<\/strong>\n5. Enter:\n   &#8211; Name: <code>lab-topic<\/code>\n   &#8211; Description: <code>Messaging lab topic<\/code>\n6. Create<\/p>\n\n\n\n<p><strong>Expected outcome<\/strong>\n&#8211; Topic <code>lab-topic<\/code> exists and has a Topic OCID.<\/p>\n\n\n\n<p><strong>Verification<\/strong>\n&#8211; Open the topic details page.\n&#8211; Confirm the topic is in <strong>Active<\/strong> state.<\/p>\n\n\n\n<hr class=\"wp-block-separator\" \/>\n\n\n\n<h3 class=\"wp-block-heading\">Step 3: Create an email subscription and confirm it<\/h3>\n\n\n\n<p><strong>Goal:<\/strong> Subscribe your email address to receive messages.<\/p>\n\n\n\n<p><strong>Console actions<\/strong>\n1. In the topic <code>lab-topic<\/code>, go to <strong>Subscriptions<\/strong>.\n2. Click <strong>Create Subscription<\/strong>\n3. Select protocol:\n   &#8211; Choose <strong>Email<\/strong>\n4. Enter your email address.\n5. Create subscription.<\/p>\n\n\n\n<p><strong>Expected outcome<\/strong>\n&#8211; Subscription is created and will be pending confirmation until you confirm.<\/p>\n\n\n\n<p><strong>Verification<\/strong>\n1. Check your email inbox for a subscription confirmation email from OCI.\n2. Open it and click the confirmation link.<\/p>\n\n\n\n<p>After confirming:\n&#8211; Return to the OCI Console and refresh subscriptions.\n&#8211; Subscription state should show <strong>Active<\/strong> (or equivalent).<\/p>\n\n\n\n<p><strong>Common issue<\/strong>\n&#8211; If you don\u2019t receive the email, check spam\/quarantine rules and confirm your organization allows external automated emails.<\/p>\n\n\n\n<hr class=\"wp-block-separator\" \/>\n\n\n\n<h3 class=\"wp-block-heading\">Step 4: Publish a message from the OCI Console<\/h3>\n\n\n\n<p><strong>Goal:<\/strong> Send a real message through Oracle Cloud Messaging (Notifications) and receive it.<\/p>\n\n\n\n<p><strong>Console actions<\/strong>\n1. Open the topic <code>lab-topic<\/code>.\n2. Click <strong>Publish Message<\/strong>\n3. Enter:\n   &#8211; Title: <code>Hello from Oracle Cloud Messaging<\/code>\n   &#8211; Body: <code>This is a test message sent via OCI Notifications.<\/code>\n4. Publish.<\/p>\n\n\n\n<p><strong>Expected outcome<\/strong>\n&#8211; Console confirms the publish request succeeded.\n&#8211; You receive an email with the title\/body (format may vary).<\/p>\n\n\n\n<p><strong>Verification<\/strong>\n&#8211; Confirm email is received.\n&#8211; Confirm message content is correct.\n&#8211; If not received within a few minutes, go to Troubleshooting.<\/p>\n\n\n\n<hr class=\"wp-block-separator\" \/>\n\n\n\n<h3 class=\"wp-block-heading\">Step 5 (Optional): Publish a message using OCI CLI<\/h3>\n\n\n\n<p>This step is optional but useful for automation and repeatability.<\/p>\n\n\n\n<p><strong>Prerequisites<\/strong>\n&#8211; OCI CLI installed and configured:\n  &#8211; https:\/\/docs.oracle.com\/en-us\/iaas\/Content\/API\/SDKDocs\/cliinstall.htm\n&#8211; You have the Topic OCID from Step 2.<\/p>\n\n\n\n<p><strong>Command<\/strong>\nReplace <code>&lt;topic_ocid&gt;<\/code>:<\/p>\n\n\n\n<pre><code class=\"language-bash\">oci ons message publish \\\n  --topic-id \"&lt;topic_ocid&gt;\" \\\n  --title \"CLI publish test\" \\\n  --body \"Published from OCI CLI to verify automation.\"\n<\/code><\/pre>\n\n\n\n<p><strong>Expected outcome<\/strong>\n&#8211; CLI returns a response indicating the message publish request was accepted.\n&#8211; You receive the email.<\/p>\n\n\n\n<p><strong>Verification<\/strong>\n&#8211; Email arrives with the expected content.<\/p>\n\n\n\n<p><strong>Common errors<\/strong>\n&#8211; <code>NotAuthorizedOrNotFound<\/code>: usually IAM policy or wrong compartment\/region.\n&#8211; CLI profile points to a different region than where the topic exists. Set region in your CLI config or pass <code>--region<\/code>.<\/p>\n\n\n\n<hr class=\"wp-block-separator\" \/>\n\n\n\n<h3 class=\"wp-block-heading\">Step 6 (Optional but recommended): Verify governance with OCI Audit<\/h3>\n\n\n\n<p><strong>Goal:<\/strong> Confirm that Messaging-related actions are recorded for compliance.<\/p>\n\n\n\n<p><strong>Console approach<\/strong>\n1. Navigate to <strong>Identity &amp; Security \u2192 Audit<\/strong> (or search \u201cAudit\u201d).\n2. Filter by compartment: <code>messaging-lab<\/code>\n3. Look for events related to Notifications:\n   &#8211; CreateTopic\n   &#8211; CreateSubscription\n   &#8211; PublishMessage (names vary; verify exact event names shown)<\/p>\n\n\n\n<p><strong>Expected outcome<\/strong>\n&#8211; You can see audit records showing who created resources and published messages.<\/p>\n\n\n\n<p><strong>CLI approach (optional)<\/strong>\nAudit querying varies by time window and filters. If you use CLI, consult:\n&#8211; https:\/\/docs.oracle.com\/en-us\/iaas\/Content\/Audit\/Concepts\/auditoverview.htm<\/p>\n\n\n\n<hr class=\"wp-block-separator\" \/>\n\n\n\n<h3 class=\"wp-block-heading\">Validation<\/h3>\n\n\n\n<p>Use this checklist:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>[ ] Topic <code>lab-topic<\/code> is Active in compartment <code>messaging-lab<\/code><\/li>\n<li>[ ] Email subscription is Active (confirmed)<\/li>\n<li>[ ] Publishing from Console results in an email delivery<\/li>\n<li>[ ] (Optional) Publishing from CLI results in an email delivery<\/li>\n<li>[ ] Audit shows resource creation events<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator\" \/>\n\n\n\n<h3 class=\"wp-block-heading\">Troubleshooting<\/h3>\n\n\n\n<p><strong>Problem: Subscription stuck in pending confirmation<\/strong>\n&#8211; Cause: Confirmation email not clicked or blocked.\n&#8211; Fix: Resend subscription (delete and recreate), check spam\/quarantine, confirm mailbox rules allow it.<\/p>\n\n\n\n<p><strong>Problem: No email received after publish<\/strong>\n&#8211; Cause: Subscription not active, wrong email, inbox filtering.\n&#8211; Fix: Verify subscription state is Active; publish again; check spam.<\/p>\n\n\n\n<p><strong>Problem: <code>NotAuthorizedOrNotFound<\/code> when publishing<\/strong>\n&#8211; Cause: IAM policy missing or topic OCID is wrong\/region mismatch.\n&#8211; Fix:\n  &#8211; Confirm you\u2019re in the same <strong>region<\/strong> as the topic.\n  &#8211; Confirm policies allow publishing\/managing Notifications resources in the compartment.\n  &#8211; Verify OCID.<\/p>\n\n\n\n<p><strong>Problem: CLI works in one region but Console is in another<\/strong>\n&#8211; Cause: OCI is region-scoped and Messaging resources are created in a region.\n&#8211; Fix: Align region in Console and CLI config.<\/p>\n\n\n\n<p><strong>Problem: \u201cToo many requests\u201d \/ rate limiting<\/strong>\n&#8211; Cause: Service limits or API throttling.\n&#8211; Fix: Reduce publish frequency; request limit increase in OCI Service Limits for production workloads.<\/p>\n\n\n\n<hr class=\"wp-block-separator\" \/>\n\n\n\n<h3 class=\"wp-block-heading\">Cleanup<\/h3>\n\n\n\n<p>To avoid lingering resources:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Delete the subscription:\n   &#8211; Topic <code>lab-topic<\/code> \u2192 Subscriptions \u2192 select subscription \u2192 <strong>Delete<\/strong><\/li>\n<li>Delete the topic:\n   &#8211; Topic details \u2192 <strong>Delete Topic<\/strong><\/li>\n<li>(Optional) Delete compartment <code>messaging-lab<\/code> once empty:\n   &#8211; Identity &amp; Security \u2192 Compartments \u2192 <code>messaging-lab<\/code> \u2192 <strong>Delete<\/strong><\/li>\n<\/ol>\n\n\n\n<p><strong>Expected outcome<\/strong>\n&#8211; No Notifications topics\/subscriptions remain from the lab.<\/p>\n\n\n\n<hr class=\"wp-block-separator\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">11. Best Practices<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Architecture best practices<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Choose the right underlying OCI Messaging service:<\/li>\n<li><strong>Notifications<\/strong> for fan-out alerts and lightweight pub\/sub.<\/li>\n<li><strong>Queue<\/strong> for worker\/job distribution.<\/li>\n<li><strong>Streaming<\/strong> for high-throughput event pipelines and replay.<\/li>\n<li>Keep message payloads small; store large objects in Object Storage and pass references (object name\/URL\/OCID).<\/li>\n<li>Design for idempotency: consumers should safely handle duplicate messages (a common reality in distributed systems).<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">IAM\/security best practices<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Use <strong>least privilege<\/strong> policies scoped to compartments (separate dev\/test\/prod).<\/li>\n<li>Use groups\/roles rather than granting permissions to individual users.<\/li>\n<li>Prefer workload identities (instance principals) over embedding API keys on servers where possible.<\/li>\n<li>Tag resources and policies to make reviews easier.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Cost best practices<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Minimize fan-out when not needed (one topic per team vs one per event type can change delivery volume).<\/li>\n<li>Set retention and partition counts (Streaming) based on measured demand.<\/li>\n<li>Clean up dev\/test topics, subscriptions, streams, and queues automatically.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Performance best practices<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>For Streaming, choose partitions based on parallelism requirements and expected throughput (verify OCI Streaming scaling model).<\/li>\n<li>Avoid synchronous dependencies: don\u2019t block API requests on downstream consumer processing; publish and return.<\/li>\n<li>Batch work where supported (queues\/streams) to reduce request overhead (verify batch APIs).<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Reliability best practices<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Use retries with exponential backoff for producer publish operations.<\/li>\n<li>Design consumers to be stateless and horizontally scalable.<\/li>\n<li>Use dead-letter or failure handling patterns (especially with Queue); confirm OCI Queue\u2019s recommended pattern.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Operations best practices<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Monitor:<\/li>\n<li>publish error rates,<\/li>\n<li>delivery failures (Notifications),<\/li>\n<li>lag\/backlog (Streaming\/Queue),<\/li>\n<li>consumer error rates and retry volume.<\/li>\n<li>Use Audit to track changes to topics\/subscriptions\/policies.<\/li>\n<li>Establish runbooks: \u201cmessage not delivered\u201d, \u201cconsumer lagging\u201d, \u201cpermission denied\u201d.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Governance\/tagging\/naming best practices<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Use consistent naming:<\/li>\n<li><code>env-app-purpose<\/code> (e.g., <code>prod-checkout-order-events<\/code>)<\/li>\n<li>Use tags:<\/li>\n<li><code>CostCenter<\/code>, <code>Owner<\/code>, <code>Environment<\/code>, <code>DataSensitivity<\/code><\/li>\n<li>Maintain an inventory of topics\/streams\/queues and owners to avoid orphaned resources.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">12. Security Considerations<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Identity and access model<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>OCI Messaging services rely on <strong>OCI IAM<\/strong> policies.<\/li>\n<li>Compartment boundaries are your primary isolation mechanism.<\/li>\n<li>Separate duties:<\/li>\n<li>platform team manages topics\/streams\/queues and policies,<\/li>\n<li>application teams get publish\/consume permissions only where needed.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Encryption<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>OCI services typically provide <strong>encryption at rest<\/strong> by default and <strong>TLS in transit<\/strong>.<\/li>\n<li>If you require customer-managed keys, verify whether your specific service (Notifications\/Streaming\/Queue) supports OCI Vault integration and how it applies.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Network exposure<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Email subscriptions deliver outside OCI; treat content as externally exposed.<\/li>\n<li>For HTTPS endpoints, secure your endpoint:<\/li>\n<li>validate signatures\/authentication mechanisms (if supported),<\/li>\n<li>restrict ingress (WAF, IP allow lists, auth tokens),<\/li>\n<li>terminate TLS properly.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Secrets handling<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Do not place secrets (API keys, passwords, tokens) in message payloads.<\/li>\n<li>Use OCI Vault for secrets and pass references or use short-lived tokens.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Audit\/logging<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Use OCI Audit to track administrative changes and potentially publish operations (depending on the service logging model).<\/li>\n<li>Centralize logs from consumers; correlate message IDs (if available) to debug issues.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Compliance considerations<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Classify data in message payloads (PII, PHI, PCI).<\/li>\n<li>Apply data minimization: only include what consumers need.<\/li>\n<li>Ensure retention policies (Streaming\/Queue) align with data retention rules.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Common security mistakes<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Overly broad IAM policies (e.g., tenancy-wide manage permissions).<\/li>\n<li>Reusing one topic for unrelated domains, causing accidental data leakage to subscribers.<\/li>\n<li>Publishing sensitive data to email subscriptions.<\/li>\n<li>Lack of compartment separation between dev and prod.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Secure deployment recommendations<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Use per-environment compartments and distinct topics\/streams\/queues.<\/li>\n<li>Apply least privilege and periodic policy reviews.<\/li>\n<li>Use tagging and automated checks to detect public endpoints and broad policies.<\/li>\n<li>Implement incident response steps for compromised endpoints\/subscriptions.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">13. Limitations and Gotchas<\/h2>\n\n\n\n<p>Because \u201cMessaging\u201d spans services, always validate limits for the specific service.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Known limitations (general)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Region availability varies<\/strong> for Notifications\/Streaming\/Queue features.<\/li>\n<li><strong>Service limits<\/strong> apply (topics\/subscriptions counts, throughput\/partitions, API rate limits).<\/li>\n<li><strong>Payload size limits<\/strong> exist (varies per service and protocol)\u2014verify before designing large-message workflows.<\/li>\n<li><strong>Delivery semantics differ<\/strong>:<\/li>\n<li>Notifications is for delivery fan-out, not stream replay.<\/li>\n<li>Streaming is for event pipelines, not simple \u201cemail alerting.\u201d<\/li>\n<li>Queue is for work distribution, not necessarily multi-subscriber fan-out.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Quotas<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Tenancy service limits can block production scale-ups unexpectedly.<\/li>\n<li>Request increases early for Streaming partitions and high subscription counts.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Regional constraints<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Subscription protocols (for example, SMS) may not be supported everywhere.<\/li>\n<li>Some integrations appear in certain regions first.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Pricing surprises<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Fan-out increases deliveries and cost (one publish \u2192 many deliveries).<\/li>\n<li>External endpoint delivery (SMS\/telephony, webhook egress) can add cost.<\/li>\n<li>Retention and high throughput can drive Streaming costs.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Compatibility issues<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Consumer SDK versions and authentication methods differ. Standardize on supported SDK versions and follow OCI SDK docs.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Operational gotchas<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Subscription confirmation steps can break automation if not planned.<\/li>\n<li>Misaligned regions between producer and topic is a common cause of \u201cnot found.\u201d<\/li>\n<li>Lack of idempotency in consumers leads to duplicate processing on retries.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Migration challenges<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Migrating from self-managed Kafka\/RabbitMQ often requires changes in message semantics and operations.<\/li>\n<li>Plan for \u201cat-least-once\u201d behavior and consumer-side deduplication where needed.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Vendor-specific nuances<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>OCI\u2019s IAM policy language and resource-type names are precise; small typos cause authorization failures.<\/li>\n<li>OCI services may expose metrics differently than other clouds; map your SLOs to OCI Monitoring metrics early.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">14. Comparison with Alternatives<\/h2>\n\n\n\n<p>\u201cMessaging\u201d in Oracle Cloud typically maps to Notifications\/Streaming\/Queue. Here\u2019s how to compare within OCI and against other cloud or self-managed options.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Comparison table<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table>\n<thead>\n<tr>\n<th>Option<\/th>\n<th>Best For<\/th>\n<th>Strengths<\/th>\n<th>Weaknesses<\/th>\n<th>When to Choose<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><strong>OCI Notifications (Oracle Cloud Messaging capability)<\/strong><\/td>\n<td>Alerts and pub\/sub fan-out<\/td>\n<td>Simple topics\/subscriptions; integrates with OCI events\/alarms; low ops overhead<\/td>\n<td>Not a replayable event log; endpoint\/protocol support varies<\/td>\n<td>You need to notify people\/systems quickly with minimal setup<\/td>\n<\/tr>\n<tr>\n<td><strong>OCI Streaming<\/strong><\/td>\n<td>High-throughput event pipelines<\/td>\n<td>Durable ingestion, retention, multi-consumer reads, replay<\/td>\n<td>More design\/ops complexity than Notifications; partitioning decisions matter<\/td>\n<td>You need analytics pipelines, event sourcing patterns, or replay<\/td>\n<\/tr>\n<tr>\n<td><strong>OCI Queue<\/strong><\/td>\n<td>Worker\/job distribution<\/td>\n<td>Decouples producers\/consumers; buffers bursts; common background job pattern<\/td>\n<td>Feature set differs from RabbitMQ\/SQS; verify DLQ\/visibility semantics<\/td>\n<td>You need parallel workers processing discrete tasks<\/td>\n<\/tr>\n<tr>\n<td><strong>OCI Events (related)<\/strong><\/td>\n<td>Routing OCI resource events<\/td>\n<td>Native event sources from OCI services<\/td>\n<td>Not a general-purpose messaging bus by itself<\/td>\n<td>You need \u201cwhen resource changes, trigger X\u201d automation<\/td>\n<\/tr>\n<tr>\n<td><strong>AWS SNS\/SQS\/Kinesis<\/strong><\/td>\n<td>Messaging on AWS<\/td>\n<td>Mature ecosystem and integrations<\/td>\n<td>Cloud lock-in; different IAM and semantics<\/td>\n<td>You are standardized on AWS<\/td>\n<\/tr>\n<tr>\n<td><strong>Azure Service Bus \/ Event Hubs<\/strong><\/td>\n<td>Messaging on Azure<\/td>\n<td>Strong enterprise features (Service Bus) and streaming (Event Hubs)<\/td>\n<td>Different operational model<\/td>\n<td>You are standardized on Azure<\/td>\n<\/tr>\n<tr>\n<td><strong>Google Cloud Pub\/Sub<\/strong><\/td>\n<td>Unified pub\/sub<\/td>\n<td>Simple developer experience; global-ish abstraction<\/td>\n<td>Different ordering\/retention model<\/td>\n<td>You are standardized on GCP<\/td>\n<\/tr>\n<tr>\n<td><strong>Apache Kafka (self-managed)<\/strong><\/td>\n<td>Custom streaming needs<\/td>\n<td>Full control; huge ecosystem<\/td>\n<td>Significant ops burden; scaling\/patching\/security<\/td>\n<td>You need deep Kafka features and can run it reliably<\/td>\n<\/tr>\n<tr>\n<td><strong>RabbitMQ (self-managed)<\/strong><\/td>\n<td>Advanced queue routing<\/td>\n<td>Rich AMQP routing; flexible<\/td>\n<td>Ops burden; clustering complexity<\/td>\n<td>You need AMQP features not available in managed queues<\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">15. Real-World Example<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Enterprise example: regulated enterprise operations and event routing<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Problem:<\/strong> A large enterprise runs dozens of OCI workloads. They need consistent operational alerting and automated incident routing with auditability.<\/li>\n<li><strong>Proposed architecture:<\/strong><\/li>\n<li>OCI Monitoring alarms publish to <strong>Notifications topics<\/strong> per domain (network, compute, database).<\/li>\n<li>Subscriptions deliver to controlled email distribution lists and webhook endpoints for incident systems.<\/li>\n<li>OCI Audit tracks topic\/subscription changes; IAM policies restrict who can add subscriptions.<\/li>\n<li><strong>Why Messaging was chosen:<\/strong><\/li>\n<li>Managed fan-out with IAM control and clear compartment governance.<\/li>\n<li>Reduced need for custom alerting infrastructure.<\/li>\n<li><strong>Expected outcomes:<\/strong><\/li>\n<li>Faster incident detection and consistent routing.<\/li>\n<li>Auditable changes to notification endpoints.<\/li>\n<li>Lower operational overhead than self-managed messaging.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Startup\/small-team example: e-commerce async order processing<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Problem:<\/strong> A small team\u2019s checkout API slows down when fulfillment tasks spike (emails, inventory updates, shipping labels).<\/li>\n<li><strong>Proposed architecture:<\/strong><\/li>\n<li>Checkout API emits <code>OrderCreated<\/code> to <strong>Streaming<\/strong> (or enqueues tasks in <strong>Queue<\/strong>, depending on design).<\/li>\n<li>Worker services consume and perform fulfillment tasks asynchronously.<\/li>\n<li>Notifications topic sends a message to the team if error rate spikes.<\/li>\n<li><strong>Why Messaging was chosen:<\/strong><\/li>\n<li>Decouples checkout from fulfillment tasks and handles bursts.<\/li>\n<li>Allows scaling worker fleet independently.<\/li>\n<li><strong>Expected outcomes:<\/strong><\/li>\n<li>Lower checkout latency.<\/li>\n<li>Better reliability during peak traffic.<\/li>\n<li>Clearer operations signals via Notifications.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">16. FAQ<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\n<p><strong>Is \u201cMessaging\u201d a single OCI service?<\/strong><br\/>\n   In practice, Oracle Cloud Messaging capabilities are provided through multiple OCI services (commonly Notifications, Streaming, and Queue). Use the service that matches your pattern: pub\/sub alerts, event streaming, or work queues.<\/p>\n<\/li>\n<li>\n<p><strong>What\u2019s the simplest way to send alerts to email in Oracle Cloud?<\/strong><br\/>\n   Use <strong>OCI Notifications<\/strong>: create a topic, create an email subscription, confirm it, and publish messages.<\/p>\n<\/li>\n<li>\n<p><strong>Should I use Notifications or Streaming for application events?<\/strong><br\/>\n   Use <strong>Notifications<\/strong> for simple fan-out notifications\/alerts. Use <strong>Streaming<\/strong> for high-volume event ingestion, replay, and multi-consumer processing.<\/p>\n<\/li>\n<li>\n<p><strong>When do I use a queue instead of a topic?<\/strong><br\/>\n   Use a <strong>queue<\/strong> when you want workers to process tasks where each message is typically handled by one consumer instance (work distribution). Topics are for fan-out to many subscribers.<\/p>\n<\/li>\n<li>\n<p><strong>Do Notifications messages support JSON payloads?<\/strong><br\/>\n   You can typically publish text payloads (often JSON). Confirm payload size limits and content handling in the Notifications API docs.<\/p>\n<\/li>\n<li>\n<p><strong>Are messages encrypted?<\/strong><br\/>\n   OCI services commonly encrypt at rest and in transit, but confirm encryption and key management options per service in official docs.<\/p>\n<\/li>\n<li>\n<p><strong>Can I publish messages from an OCI compute instance without API keys?<\/strong><br\/>\n   Often yes via <strong>instance principals<\/strong> (workload identity), but confirm the exact authentication support and required policies for the API you\u2019re calling.<\/p>\n<\/li>\n<li>\n<p><strong>How do I restrict who can subscribe an endpoint to a topic?<\/strong><br\/>\n   Use compartment-scoped IAM policies. Grant only approved groups permission to manage subscriptions.<\/p>\n<\/li>\n<li>\n<p><strong>How do I monitor delivery failures?<\/strong><br\/>\n   Use OCI Monitoring metrics and service-specific observability features (and consumer-side logging). Confirm which delivery metrics exist for Notifications in your region.<\/p>\n<\/li>\n<li>\n<p><strong>Does Notifications guarantee delivery?<\/strong><br\/>\n   Delivery guarantees vary by protocol and endpoint. Design consumers\/endpoints to handle retries and transient failures. Verify the SLA\/semantics in official docs.<\/p>\n<\/li>\n<li>\n<p><strong>What is the most common cause of \u201cNotAuthorizedOrNotFound\u201d?<\/strong><br\/>\n   Missing IAM policy, wrong compartment, wrong region, or referencing an OCID from a different region.<\/p>\n<\/li>\n<li>\n<p><strong>Can I use Messaging for sensitive data?<\/strong><br\/>\n   You should minimize sensitive data in message payloads. Use encryption, least privilege, and store sensitive content in secure storage, passing references instead.<\/p>\n<\/li>\n<li>\n<p><strong>How do I handle duplicate messages?<\/strong><br\/>\n   Assume duplicates can happen in distributed systems. Make consumers idempotent by using deduplication keys or state checks.<\/p>\n<\/li>\n<li>\n<p><strong>What\u2019s the best approach for large payloads (images, documents)?<\/strong><br\/>\n   Store the file in Object Storage and publish a message containing the object reference (bucket\/object name, pre-auth URL if appropriate).<\/p>\n<\/li>\n<li>\n<p><strong>How do I estimate cost for production?<\/strong><br\/>\n   Identify the message rate, payload size, fan-out factor, retention (streams\/queues), and egress. Use the OCI price list and cost estimator:\n   &#8211; https:\/\/www.oracle.com\/cloud\/price-list\/<br\/>\n   &#8211; https:\/\/www.oracle.com\/cloud\/costestimator.html  <\/p>\n<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">17. Top Online Resources to Learn Messaging<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table>\n<thead>\n<tr>\n<th>Resource Type<\/th>\n<th>Name<\/th>\n<th>Why It Is Useful<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Official documentation<\/td>\n<td>OCI Notifications docs<\/td>\n<td>Primary reference for topics, subscriptions, publish APIs, IAM guidance: https:\/\/docs.oracle.com\/en-us\/iaas\/Content\/Notification\/home.htm<\/td>\n<\/tr>\n<tr>\n<td>Official documentation<\/td>\n<td>OCI Streaming docs<\/td>\n<td>Stream concepts, partitions, retention, SDK\/CLI usage: https:\/\/docs.oracle.com\/en-us\/iaas\/Content\/Streaming\/home.htm<\/td>\n<\/tr>\n<tr>\n<td>Official documentation<\/td>\n<td>OCI Queue docs<\/td>\n<td>Queue concepts and APIs (verify latest scope\/availability): https:\/\/docs.oracle.com\/en-us\/iaas\/Content\/Queue\/home.htm<\/td>\n<\/tr>\n<tr>\n<td>Official documentation<\/td>\n<td>OCI Events docs<\/td>\n<td>Learn how OCI resource events can route into Messaging patterns: https:\/\/docs.oracle.com\/en-us\/iaas\/Content\/Events\/home.htm<\/td>\n<\/tr>\n<tr>\n<td>Official documentation<\/td>\n<td>OCI IAM docs<\/td>\n<td>Understand compartments, groups, and policy language: https:\/\/docs.oracle.com\/en-us\/iaas\/Content\/Identity\/home.htm<\/td>\n<\/tr>\n<tr>\n<td>Official documentation<\/td>\n<td>OCI Audit docs<\/td>\n<td>Governance trail for Messaging resource changes: https:\/\/docs.oracle.com\/en-us\/iaas\/Content\/Audit\/home.htm<\/td>\n<\/tr>\n<tr>\n<td>Official pricing<\/td>\n<td>Oracle Cloud Price List<\/td>\n<td>Find Notifications\/Streaming\/Queue meters and regional pricing: https:\/\/www.oracle.com\/cloud\/price-list\/<\/td>\n<\/tr>\n<tr>\n<td>Official tool<\/td>\n<td>OCI Cost Estimator<\/td>\n<td>Model production usage and monthly cost: https:\/\/www.oracle.com\/cloud\/costestimator.html<\/td>\n<\/tr>\n<tr>\n<td>Official docs (tools)<\/td>\n<td>OCI CLI installation and usage<\/td>\n<td>Automate publish\/consume workflows: https:\/\/docs.oracle.com\/en-us\/iaas\/Content\/API\/SDKDocs\/cliinstall.htm<\/td>\n<\/tr>\n<tr>\n<td>Architecture resources<\/td>\n<td>OCI Architecture Center<\/td>\n<td>Reference architectures for event-driven systems (search within): https:\/\/docs.oracle.com\/en\/solutions\/<\/td>\n<\/tr>\n<tr>\n<td>Videos (official)<\/td>\n<td>Oracle Cloud Infrastructure YouTube channel<\/td>\n<td>Product walkthroughs and updates (search \u201cOCI Notifications\/Streaming\u201d): https:\/\/www.youtube.com\/@oraclecloudinfrastructure<\/td>\n<\/tr>\n<tr>\n<td>Samples (official\/community)<\/td>\n<td>OCI SDK examples on GitHub (verify official org\/repo)<\/td>\n<td>Practical code patterns for authentication and API usage (confirm current repos from docs links)<\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">18. Training and Certification Providers<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table>\n<thead>\n<tr>\n<th>Institute<\/th>\n<th>Suitable Audience<\/th>\n<th>Likely Learning Focus<\/th>\n<th>Mode<\/th>\n<th>Website URL<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>DevOpsSchool.com<\/td>\n<td>DevOps engineers, SREs, cloud engineers<\/td>\n<td>OCI fundamentals, automation, DevOps patterns, messaging\/event-driven concepts<\/td>\n<td>check website<\/td>\n<td>https:\/\/www.devopsschool.com\/<\/td>\n<\/tr>\n<tr>\n<td>ScmGalaxy.com<\/td>\n<td>Beginners to intermediate engineers<\/td>\n<td>SCM\/DevOps foundations, cloud basics, operations practices<\/td>\n<td>check website<\/td>\n<td>https:\/\/www.scmgalaxy.com\/<\/td>\n<\/tr>\n<tr>\n<td>CLoudOpsNow.in<\/td>\n<td>Cloud ops and platform teams<\/td>\n<td>Cloud operations, monitoring, cost governance, reliability<\/td>\n<td>check website<\/td>\n<td>https:\/\/www.cloudopsnow.in\/<\/td>\n<\/tr>\n<tr>\n<td>SreSchool.com<\/td>\n<td>SREs, reliability engineers, ops teams<\/td>\n<td>SRE practices, observability, incident response, reliability architecture<\/td>\n<td>check website<\/td>\n<td>https:\/\/www.sreschool.com\/<\/td>\n<\/tr>\n<tr>\n<td>AiOpsSchool.com<\/td>\n<td>Ops teams exploring AIOps<\/td>\n<td>Event correlation, monitoring automation, operations analytics<\/td>\n<td>check website<\/td>\n<td>https:\/\/www.aiopsschool.com\/<\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">19. Top Trainers<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table>\n<thead>\n<tr>\n<th>Platform\/Site<\/th>\n<th>Likely Specialization<\/th>\n<th>Suitable Audience<\/th>\n<th>Website URL<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>RajeshKumar.xyz<\/td>\n<td>DevOps\/cloud training resources (verify offerings)<\/td>\n<td>Students, engineers seeking guided learning<\/td>\n<td>https:\/\/www.rajeshkumar.xyz\/<\/td>\n<\/tr>\n<tr>\n<td>devopstrainer.in<\/td>\n<td>DevOps training and mentoring (verify OCI coverage)<\/td>\n<td>Beginners to intermediate DevOps engineers<\/td>\n<td>https:\/\/www.devopstrainer.in\/<\/td>\n<\/tr>\n<tr>\n<td>devopsfreelancer.com<\/td>\n<td>Freelance DevOps consulting\/training platform (verify services)<\/td>\n<td>Teams needing practical coaching and implementations<\/td>\n<td>https:\/\/www.devopsfreelancer.com\/<\/td>\n<\/tr>\n<tr>\n<td>devopssupport.in<\/td>\n<td>DevOps support and training resources (verify offerings)<\/td>\n<td>Ops teams needing hands-on troubleshooting guidance<\/td>\n<td>https:\/\/www.devopssupport.in\/<\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">20. Top Consulting Companies<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table>\n<thead>\n<tr>\n<th>Company<\/th>\n<th>Likely Service Area<\/th>\n<th>Where They May Help<\/th>\n<th>Consulting Use Case Examples<\/th>\n<th>Website URL<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>cotocus.com<\/td>\n<td>Cloud\/DevOps consulting (verify service catalog)<\/td>\n<td>Architecture reviews, DevOps automation, cloud operations<\/td>\n<td>Event-driven architecture design using OCI Messaging; operational alerting patterns<\/td>\n<td>https:\/\/cotocus.com\/<\/td>\n<\/tr>\n<tr>\n<td>DevOpsSchool.com<\/td>\n<td>DevOps and cloud consulting\/training<\/td>\n<td>Platform engineering, CI\/CD, operations, best practices<\/td>\n<td>Implementing OCI Notifications for alerting; designing worker pipelines with queues\/streams<\/td>\n<td>https:\/\/www.devopsschool.com\/<\/td>\n<\/tr>\n<tr>\n<td>DEVOPSCONSULTING.IN<\/td>\n<td>DevOps consulting (verify service catalog)<\/td>\n<td>DevOps transformation, automation, reliability improvements<\/td>\n<td>Cost and IAM reviews for OCI; building automated publish\/consume pipelines<\/td>\n<td>https:\/\/www.devopsconsulting.in\/<\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">21. Career and Learning Roadmap<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">What to learn before this service<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>OCI basics: compartments, regions, networking basics<\/li>\n<li>IAM: groups, dynamic groups, policies, least privilege<\/li>\n<li>Core distributed systems concepts: async messaging, retries, idempotency<\/li>\n<li>Basic observability: logs, metrics, alerts<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">What to learn after this service<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>OCI Events and event routing patterns<\/li>\n<li>OCI Functions and serverless consumers (where suitable)<\/li>\n<li>Infrastructure as Code:<\/li>\n<li>Terraform fundamentals<\/li>\n<li>OCI Resource Manager<\/li>\n<li>Advanced streaming\/queue design:<\/li>\n<li>partition strategies (Streaming)<\/li>\n<li>worker scaling and back-pressure (Queue)<\/li>\n<li>Security hardening:<\/li>\n<li>Vault integration<\/li>\n<li>secretless patterns<\/li>\n<li>audit automation<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Job roles that use it<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Cloud engineer \/ cloud developer<\/li>\n<li>DevOps engineer<\/li>\n<li>Site Reliability Engineer (SRE)<\/li>\n<li>Platform engineer<\/li>\n<li>Solutions architect<\/li>\n<li>Data engineer (Streaming-heavy)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Certification path (if available)<\/h3>\n\n\n\n<p>Oracle certifications change over time. Use Oracle University and OCI certification listings and map them to messaging\/event-driven competencies:\n&#8211; Oracle University: https:\/\/education.oracle.com\/<br\/>\n&#8211; OCI certifications (verify current): https:\/\/education.oracle.com\/en\/solutions\/oracle-cloud-infrastructure\/pFamily_666<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Project ideas for practice<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Build an operational alerting system: Monitoring alarm \u2192 Notifications \u2192 email.<\/li>\n<li>Create a microservice demo:\n   &#8211; producer publishes an event,\n   &#8211; consumer logs it and performs a task,\n   &#8211; add retries and idempotency.<\/li>\n<li>Build a small event pipeline:\n   &#8211; ingest events to Streaming,\n   &#8211; consumer writes to Object Storage,\n   &#8211; add monitoring for lag and errors.<\/li>\n<li>Implement a worker queue:\n   &#8211; enqueue tasks from an API,\n   &#8211; scale workers,\n   &#8211; implement failure handling (verify OCI Queue features).<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">22. Glossary<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Asynchronous messaging:<\/strong> Communication where the sender does not wait for the receiver to process the message.<\/li>\n<li><strong>Topic:<\/strong> A named channel for publishing messages in a pub\/sub system (Notifications).<\/li>\n<li><strong>Subscription:<\/strong> An endpoint registered to receive messages published to a topic.<\/li>\n<li><strong>Producer:<\/strong> The component that publishes messages\/events.<\/li>\n<li><strong>Consumer:<\/strong> The component that receives\/pulls messages\/events and processes them.<\/li>\n<li><strong>Fan-out:<\/strong> One published message delivered to multiple subscribers.<\/li>\n<li><strong>Queue:<\/strong> A point-to-point buffer where messages are typically processed by one consumer.<\/li>\n<li><strong>Stream:<\/strong> An append-only log of events that can be read by multiple consumers with retention.<\/li>\n<li><strong>Partition:<\/strong> A shard of a stream that enables parallelism and ordering within the partition.<\/li>\n<li><strong>Retention:<\/strong> How long messages\/events are stored for replay or delayed processing.<\/li>\n<li><strong>Idempotency:<\/strong> Property where processing the same message multiple times has the same effect as processing it once.<\/li>\n<li><strong>Compartment (OCI):<\/strong> A logical container for organizing and isolating OCI resources and IAM policies.<\/li>\n<li><strong>OCID:<\/strong> Oracle Cloud Identifier, a unique ID for an OCI resource.<\/li>\n<li><strong>IAM policy:<\/strong> A rule defining who can perform which actions on which resources in OCI.<\/li>\n<li><strong>Instance principal:<\/strong> OCI identity mechanism allowing a compute instance to call OCI APIs without user API keys.<\/li>\n<li><strong>Audit log:<\/strong> Governance record of API calls and configuration changes in OCI.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">23. Summary<\/h2>\n\n\n\n<p>Oracle Cloud <strong>Messaging<\/strong> (categorized here under <strong>Other Services<\/strong>) is the set of OCI-managed capabilities that enable asynchronous communication\u2014most commonly through <strong>OCI Notifications<\/strong> (topics\/subscriptions), <strong>OCI Streaming<\/strong> (durable event streams), and <strong>OCI Queue<\/strong> (work distribution).<\/p>\n\n\n\n<p>It matters because it helps teams build <strong>decoupled, resilient, and scalable<\/strong> systems, and it supports strong operational practices through IAM control, compartments, and auditability. Cost is typically driven by <strong>message volume, fan-out deliveries, retention, throughput settings, and network egress<\/strong>, so production designs should be modeled using the official price list and cost estimator.<\/p>\n\n\n\n<p>Use Messaging when you need pub\/sub notifications, event pipelines, or asynchronous job processing. Keep payloads small, avoid secrets in messages, apply least privilege IAM, and monitor publish\/delivery\/backlog signals.<\/p>\n\n\n\n<p><strong>Next learning step:<\/strong> Extend the lab by routing <strong>OCI Events<\/strong> or <strong>Monitoring alarms<\/strong> into a Notifications topic, then explore Streaming or Queue for application-driven event pipelines and worker architectures.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Other Services<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[62,63],"tags":[],"class_list":["post-758","post","type-post","status-publish","format-standard","hentry","category-oracle-cloud","category-other-services"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/posts\/758","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/comments?post=758"}],"version-history":[{"count":0,"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/posts\/758\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/media?parent=758"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/categories?post=758"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/tags?post=758"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}