diff --git a/README.md b/README.md index aca4dc0..8dde34c 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,8 @@ This repository is a place to document (and discuss) the OpenMessaging specifica OpenMessaging is vendor-neutral and language-independent, provides industry guidelines for areas of finance, e-commerce, IoT and big-data, and aimed to develop messaging and streaming applications across heterogeneous systems and platforms. # Landscape -![landscape](assets/images/landscape-1.0.0-preview.png) + +![landscape-1.0.0-preview.png](assets%2Fimages%2Flandscape-1.0.0-preview.png) # OpenMessaging Please see http://openmessaging.cloud/. diff --git a/assets/images/domain-design-0.1.0-alpha.png b/assets/images/domain-design-0.1.0-alpha.png deleted file mode 100644 index bc8e264..0000000 Binary files a/assets/images/domain-design-0.1.0-alpha.png and /dev/null differ diff --git a/assets/images/landscape-0.1.0-alpha.png b/assets/images/landscape-0.1.0-alpha.png deleted file mode 100644 index be26546..0000000 Binary files a/assets/images/landscape-0.1.0-alpha.png and /dev/null differ diff --git a/assets/images/landscape-0.2.0-alpha.png b/assets/images/landscape-0.2.0-alpha.png deleted file mode 100644 index 9749dc4..0000000 Binary files a/assets/images/landscape-0.2.0-alpha.png and /dev/null differ diff --git a/assets/images/use_cases/15078677592272.jpg b/assets/images/use_cases/15078677592272.jpg deleted file mode 100644 index c84ba97..0000000 Binary files a/assets/images/use_cases/15078677592272.jpg and /dev/null differ diff --git a/assets/images/use_cases/15078677775543.jpg b/assets/images/use_cases/15078677775543.jpg deleted file mode 100644 index 30a91fb..0000000 Binary files a/assets/images/use_cases/15078677775543.jpg and /dev/null differ diff --git a/assets/images/use_cases/15078678568510.jpg b/assets/images/use_cases/Broadcast.jpg similarity index 100% rename from assets/images/use_cases/15078678568510.jpg rename to assets/images/use_cases/Broadcast.jpg diff --git a/assets/images/use_cases/15078679950623.jpg b/assets/images/use_cases/Filtering.jpg similarity index 100% rename from assets/images/use_cases/15078679950623.jpg rename to assets/images/use_cases/Filtering.jpg diff --git a/assets/images/use_cases/15078678981991.jpg b/assets/images/use_cases/Highway.jpg similarity index 100% rename from assets/images/use_cases/15078678981991.jpg rename to assets/images/use_cases/Highway.jpg diff --git a/assets/images/use_cases/15078680617233.jpg b/assets/images/use_cases/Online-Test.jpg similarity index 100% rename from assets/images/use_cases/15078680617233.jpg rename to assets/images/use_cases/Online-Test.jpg diff --git a/assets/images/use_cases/15078677455707.jpg b/assets/images/use_cases/Point-to-Point.jpg similarity index 100% rename from assets/images/use_cases/15078677455707.jpg rename to assets/images/use_cases/Point-to-Point.jpg diff --git a/assets/images/use_cases/15078678095515.jpg b/assets/images/use_cases/PubSub.jpg similarity index 100% rename from assets/images/use_cases/15078678095515.jpg rename to assets/images/use_cases/PubSub.jpg diff --git a/assets/images/use_cases/15078681271290.jpg b/assets/images/use_cases/RPC.jpg similarity index 100% rename from assets/images/use_cases/15078681271290.jpg rename to assets/images/use_cases/RPC.jpg diff --git a/assets/images/use_cases/15078680221779.jpg b/assets/images/use_cases/Replication.jpg similarity index 100% rename from assets/images/use_cases/15078680221779.jpg rename to assets/images/use_cases/Replication.jpg diff --git a/assets/images/use_cases/15078678261228.jpg b/assets/images/use_cases/Routing.jpg similarity index 100% rename from assets/images/use_cases/15078678261228.jpg rename to assets/images/use_cases/Routing.jpg diff --git a/assets/images/use_cases/15078679330640.jpg b/assets/images/use_cases/Streaming.jpg similarity index 100% rename from assets/images/use_cases/15078679330640.jpg rename to assets/images/use_cases/Streaming.jpg diff --git a/assets/images/use_cases/15078680954998.jpg b/assets/images/use_cases/Upgrade.jpg similarity index 100% rename from assets/images/use_cases/15078680954998.jpg rename to assets/images/use_cases/Upgrade.jpg diff --git a/domain_architecture.md b/domain_architecture.md index e9cbb1d..601d0b7 100644 --- a/domain_architecture.md +++ b/domain_architecture.md @@ -2,7 +2,7 @@ ## Overview -![](/assets/images/domain-design-1.0.0-preview.png) +![domain-design-1.0.0-preview.png](assets%2Fimages%2Fdomain-design-1.0.0-preview.png) Above is the domain architecture of Open Messaging, see JavaDoc for details. @@ -40,7 +40,7 @@ The messages in Topic are original, waiting for processing, which always can't a So the Routing is in charge of processing the original messages in Topic, and routing to Queue. Each Routing has a operator pipeline, consists of a series of operators. The messages will flow through the operator pipeline from Topic and Queue. -A **operator** is used to handle the flowing messages in Routing. There are many kinds of operator, expression operator, deduplicator operator, joiner operator, filter operator, rpc operator, and so on. +An **operator** is used to handle the flowing messages in Routing. There are many kinds of operator, expression operator, deduplicator operator, joiner operator, filter operator, rpc operator, and so on. What’s more? Routing can cross the network, message can be routed from a network partition to another partition. diff --git a/specification-schema.md b/specification-schema.md index 810cf96..888b63e 100644 --- a/specification-schema.md +++ b/specification-schema.md @@ -161,7 +161,7 @@ be interpreted as described in [RFC 2119](https://tools.ietf.org/html/rfc2119). ## OpenMessaging Common UseCases -This document lists the most of common use cases supported by OpenMessaging. +This document lists the most common use cases supported by OpenMessaging. 1. P2P 2. Publish/Subscribe @@ -174,7 +174,7 @@ This document lists the most of common use cases supported by OpenMessaging. ### P2P -![](/assets/images/use_cases/15078677455707.jpg) +![Point-to-Point.jpg](assets%2Fimages%2Fuse_cases%2FPoint-to-Point.jpg) P2P, point to point, the simplest one, in this case, Queue is the only involved resource of OpenMessaging which only has one partition. Simply, Producer send message to Queue, and consumed by Consumer later. @@ -182,28 +182,27 @@ P2P, point to point, the simplest one, in this case, Queue is the only involved In this case, Producer send message to Queue with multiple partitions in Round-robin or Hash way. And these partitions will be assigned to consumers who has already subscribed the specified queue regularly. -![](/assets/images/use_cases/15078678095515.jpg) +![PubSub.jpg](assets%2Fimages%2Fuse_cases%2FPubSub.jpg) Topic and Routing model also can be imported to this case as shown below, if necessary. -![](/assets/images/use_cases/15078678261228.jpg) +![Routing.jpg](assets%2Fimages%2Fuse_cases%2FRouting.jpg) ### Broadcast -![](/assets/images/use_cases/15078678568510.jpg) +![Broadcast.jpg](assets%2Fimages%2Fuse_cases%2FBroadcast.jpg) In broadcast case, any message sent to the Queue will be consumed by all consumers. ### Highway -![](/assets/images/use_cases/15078678981991.jpg) +![Highway.jpg](assets%2Fimages%2Fuse_cases%2FHighway.jpg) In highway case, the only focus of SequenceProducer is speed, Producer always want to send abundant and less important messages to Queue. One of the Implementation ways is Batch. ### Streaming -![](/assets/images/use_cases/15078679330640.jpg) - +![Streaming.jpg](assets%2Fimages%2Fuse_cases%2FStreaming.jpg) StreamingConsumer is for this use case, a stream-oriented consumer, to integrate messaging system with Streaming/BigData related platforms easily. StreamingConsumer supports consume messages from partitions of a specified queue like iterator. @@ -213,23 +212,23 @@ In most cases, original messages can’t arouse the interests of consumers, and As shown below, the Routing model of OpenMessaging can be applied to Filter easily. In this case, the message will be routed to Queue through two filter operators, which will keep the message with Student tag and has a property age between 18~23. -![](/assets/images/use_cases/15078679950623.jpg) +![Filtering.jpg](assets%2Fimages%2Fuse_cases%2FFiltering.jpg) ### Replication -![](/assets/images/use_cases/15078680221779.jpg) - +![Replication.jpg](assets%2Fimages%2Fuse_cases%2FReplication.jpg) Sometimes, the producers and consumers are distributed among multiple data centers, OpenMessaging provides a simple way to route messages from one region to another region. ### RPC -![](/assets/images/use_cases/15078681271290.jpg) +![RPC.jpg](assets%2Fimages%2Fuse_cases%2FRPC.jpg) In OpenMessaging, RPC is equal to synchronous message, it isn’t traditional CS(Client2Server) model, but CSC(Client2Server2Client) model. ## Appendix + ### Example of OpenMessaging API ```json { @@ -266,4 +265,4 @@ In OpenMessaging, RPC is equal to synchronous message, it isn’t traditional CS ### Change History 0.3.0 version created, be compatible with existent runtime API. 1.0.0-preview version created, change domain model to queue based model, add type system and schema. -1.0.0-alpha version created, simplify specification and add extension fields. \ No newline at end of file +1.0.0-alpha version created, simplify specification and add extension fields. diff --git a/usecase.md b/usecase.md index 783c98d..3fd2411 100644 --- a/usecase.md +++ b/usecase.md @@ -15,7 +15,7 @@ This document lists the most of common use cases supported by OpenMessaging. ## P2P -![](/assets/images/use_cases/15078677455707.jpg) +![Point-to-Point.jpg](assets%2Fimages%2Fuse_cases%2FPoint-to-Point.jpg) P2P, point to point, the simplest one, in this case, Queue is the only involved resource of OpenMessaging which only has one partition. Simply, Producer send message to Queue, and consumed by Consumer later. @@ -23,27 +23,27 @@ P2P, point to point, the simplest one, in this case, Queue is the only involved In this case, Producer send message to Queue with multiple partitions in Round-robin or Hash way. And these partitions will be assigned to consumers who has already subscribed the specified queue regularly. -![](/assets/images/use_cases/15078678095515.jpg) +![PubSub.jpg](assets%2Fimages%2Fuse_cases%2FPubSub.jpg) Topic and Routing model also can be imported to this case as shown below, if necessary. -![](/assets/images/use_cases/15078678261228.jpg) +![Routing.jpg](assets%2Fimages%2Fuse_cases%2FRouting.jpg) ## Broadcast -![](/assets/images/use_cases/15078678568510.jpg) +![Broadcast.jpg](assets%2Fimages%2Fuse_cases%2FBroadcast.jpg) In broadcast case, any message sent to the Queue will be consumed by all consumers. ## Highway -![](/assets/images/use_cases/15078678981991.jpg) +![Highway.jpg](assets%2Fimages%2Fuse_cases%2FHighway.jpg) In highway case, the only focus of SequenceProducer is speed, Producer always want to send abundant and less important messages to Queue. One of the Implementation ways is Batch. ## Streaming -![](/assets/images/use_cases/15078679330640.jpg) +![Streaming.jpg](assets%2Fimages%2Fuse_cases%2FStreaming.jpg) StreamingConsumer is for this use case, a stream-oriented consumer, to integrate messaging system with Streaming/BigData related platforms easily. StreamingConsumer supports consume messages from partitions of a specified queue like iterator. @@ -54,29 +54,29 @@ In most cases, original messages can’t arouse the interests of consumers, and As shown below, the Routing model of OpenMessaging can be applied to Filter easily. In this case, the message will be routed to Queue through two filter operators, which will keep the message with Student tag and has a property age between 18~23. -![](/assets/images/use_cases/15078679950623.jpg) +![Filtering.jpg](assets%2Fimages%2Fuse_cases%2FFiltering.jpg) ## Replication -![](/assets/images/use_cases/15078680221779.jpg) +![Replication.jpg](assets%2Fimages%2Fuse_cases%2FReplication.jpg) Sometimes, the producers and consumers are distributed among multiple data centers, OpenMessaging provides a simple way to route messages from one region to another region. ## Online Test -![](/assets/images/use_cases/15078680617233.jpg) +![Online-Test.jpg](assets%2Fimages%2Fuse_cases%2FOnline-Test.jpg) Tests are important, many tests like A/B or pressure test need online environment. Create a test Queue with partial traffic can reach this goal. ## Upgrade -![](/assets/images/use_cases/15078680954998.jpg) +![Upgrade.jpg](assets%2Fimages%2Fuse_cases%2FUpgrade.jpg) Image that we want to release our Consumer version 2.0, which can handle messages with tag Staff or Student, while the version 1.0 consumer only can handle messages with tag Student. OpenMessaging can cover this case easily. ## RPC -![](/assets/images/use_cases/15078681271290.jpg) +![RPC.jpg](assets%2Fimages%2Fuse_cases%2FRPC.jpg) In OpenMessaging, RPC is equal to synchronous message, it isn’t traditional CS(Client2Server) model, but CSC(Client2Server2Client) model.