As per my understanding platform events are immutable and we can't query it. but how to relate with external system and internal system. please share any example for both internal and external system. How they communicate any real time example.
closed as too broad by Pranay Jaiswal, Raul, battery.cord, glls, codeyinthecloud Dec 19 '18 at 19:03
Please edit the question to limit it to a specific problem with enough detail to identify an adequate answer. Avoid asking multiple distinct questions at once. See the How to Ask page for help clarifying this question. If this question can be reworded to fit the rules in the help center, please edit the question.
Platform Events are a type of Enterprise Service Bus. What this means is that multiple systems can be interconnected without any of them needing to know about the others. You can have systems A and B, and A simply sends out a message and B can receive it. A doesn't know that B exists. Further, you can add system C as a subscriber, and A can now communicate to both simultaneously. Unlike other technologies, there can be many publishers of many different events, and many subscribers to many different events, and no single system needs to know how to directly address the others. Everything is handled through the central hub, Salesforce.
Salesforce can also be a publisher or subscriber, and doesn't need to know the source or destination either. It can even be subscribed to itself, being both publisher and subscriber. The typical internal-only style is most commonly given as an example for an error-logging system; even if the transaction fails entirely, the subscriber still gets the event, allowing for logging that wouldn't otherwise be possible. There's lots of examples of what could happen. An SMS could trigger a case in Salesforce, or a new case could notify an external ticketing system to create an incidence report, etc.
This is vastly different than outbound messaging, where (a) the messages can only originate from Salesforce, (b) the destination has to be known in advance, and (c) messages can only be generated from a insert or update of a record. Any service can use Platform Events to send or receive events without needing to know about who's sending or who's receiving. This allows you to notify multiple systems at once, have multiple publishers at once, swap them out, and so on, without ever reconfiguring Salesforce directly (unless, of course, you need Salesforce to do something itself).
I love example given by Salesforce in its documentation:
Your company just received a shipment of “smart” printers. You configure the printers to send information to Salesforce once a day. You use that information to update the asset record in Salesforce that represents the printer, then decide whether to order more ink or paper from the vendor. When you do order supplies from the vendor, you schedule a technician to install the new supplies the day after they’re delivered.
This is best explanation, please read through: https://developer.salesforce.com/docs/atlas.en-us.platform_events.meta/platform_events/platform_events_example_printervendor.htm#platform_events_example_printervendor