Sha256: a40c288f70437348d2f310f5591291829a1b7083fe424c4dae2310834d70c388

Contents?: true

Size: 1.84 KB

Versions: 6

Compression:

Stored size: 1.84 KB

Contents

# [WIP] mimi-messaging

Interservice communication via message bus for microservices.

## What

`mimi-messaging` is a Messaging layer -- an interservice
communication layer based on message bus, for connecting microservice applications.

* Command, Query, Event communication patterns
* "at-least-once" message delivery guarantees
* Abstract message bus interface, not bound to specific message broker implementation

See also: [Overview of Messaging layer properties](docs/Messaging_Layer_Properties.md)

## Why

[Why HTTP is a bad choice for interservice communication?](docs/Why_HTTP_is_a_bad_choice.md)

TBD: Message bus pro's and con's.

## How

Concepts:

* Command: one-to-one, send and forget
* Query: one-to-one, call and wait for response
* Event: one-to-many, broadcast

## Setup

```
gem "mimi-messaging", "~> 1.0"
gem "mimi-messaging-<ADAPTER>"
```

```
require "mimi/messaging"
require "mimi/messaging/<ADAPTER>"

Mimi::Messaging.use serializer: Mimi::Messaging::JsonSerializer
Mimi::Messaging.configure mq_adapter: "<ADAPTER>", ... # extra adapter specific options
Mimi::Messaging.start
```

## Usage

```
response = Mimi::Messaging.query("orders/show", id: 123)
```

## Adapters

`mimi-messaging` is not bound to a specific message broker implementation like RabbitMQ or Kafka. It interacts with a message broker using an adapter interface and
there are several available adapters:

* [Kafka](https://github.com/kukushkin/mimi-messaging-kafka)
* RabbitMQ (TBD)
* NATS (TBD)
* [Amazon SQS/SNS](https://github.com/kukushkin/mimi-messaging-sqs_sns)
* in-memory (single process)

## Designing apps


There are only two hard problems in distributed systems:

```
2. Exactly-once delivery
1. Guaranteed order of messages
2. Exactly-once delivery
```

## License

The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
mimi-messaging-1.2.7 README.md
mimi-messaging-1.2.6 README.md
mimi-messaging-1.2.5 README.md
mimi-messaging-1.2.4 README.md
mimi-messaging-1.2.2 README.md
mimi-messaging-1.2.1 README.md