Skip to content

Removed unused images and renamed images to match use cases #22

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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/.
Expand Down
Binary file removed assets/images/domain-design-0.1.0-alpha.png
Binary file not shown.
Binary file removed assets/images/landscape-0.1.0-alpha.png
Binary file not shown.
Binary file removed assets/images/landscape-0.2.0-alpha.png
Binary file not shown.
Binary file removed assets/images/use_cases/15078677592272.jpg
Binary file not shown.
Binary file removed assets/images/use_cases/15078677775543.jpg
Binary file not shown.
4 changes: 2 additions & 2 deletions domain_architecture.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.

Expand Down Expand Up @@ -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.

Expand Down
25 changes: 12 additions & 13 deletions specification-schema.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -174,36 +174,35 @@ 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.

### Publish/Subscribe

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.

Expand All @@ -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
{
Expand Down Expand Up @@ -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.
1.0.0-alpha version created, simplify specification and add extension fields.
22 changes: 11 additions & 11 deletions usecase.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,35 +15,35 @@ 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.

## Publish/Subscribe

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.
Expand All @@ -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.