Messaging Pattern
A messaging pattern defines how messages are exchanged between different systems, applications, or components within a distributed system.
- This exists at the Application Layer
Not sure if this is the best term for it. But these are some super important ideas at NVIDIA, as I compare ROS with other internal tools.
Resources
- https://en.wikipedia.org/wiki/Messaging_pattern
- https://www.redhat.com/architect/architectural-messaging-patterns
- https://www.enterpriseintegrationpatterns.com/patterns/messaging/
Message Exchange Architectures (from Redhat site)
- Pub-Sub (usually event-driven)
- RabbitMQ, Kafka
- Fanout
- RabbitMQ or AWS SNS + SQS
- Unidirectional Streaming
- Ex: YouTube, Twitch
- Bidirectional Streaming
- Ex: Facetime
Others architectures
- Request-Reply
- gRPC, zeroRPC
- Peer-to-Peer Architecture
- Ex: BitTorrent, WebRTC, Ethereum Whisper
Also see Routing.
I think I should read up on this page, even though the font is kinda wack
- https://www.enterpriseintegrationpatterns.com/patterns/conversation/index.html
- https://www.enterpriseintegrationpatterns.com/patterns/conversation/BasicIntro.html
- https://learn.microsoft.com/en-us/azure/architecture/patterns/category/messaging
From ChatGPT:
-
- Request-Reply: A synchronous interaction where a requestor sends a message and waits for a reply.
- Publish-Subscribe: An asynchronous pattern where messages are published to topics, and multiple subscribers can consume them.
- Fire-and-Forget: A one-way message sending without expecting a response.
- Event Sourcing: Capturing all changes to an application state as a sequence of events.
- Work Queues (Task Queues): Distributing tasks among multiple workers.