Metadata-Version: 2.1
Name: metropolis
Version: 0.1.4.dev1
Summary: Microservice gateway using Nats
Home-page: https://github.com/ashon/metropolis
Author: ashon lee
Author-email: ashon8813@gmail.com
License: MIT
Platform: UNKNOWN
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Requires-Python: >=3
Description-Content-Type: text/markdown
Requires-Dist: asyncio-nats-client (==0.10.0)
Requires-Dist: uvloop (==0.13.0)
Requires-Dist: sanic (==19.9.0)

# Metropolis (Python Microservice Gateway with NATS)

> Can we make `simple`, `scalable`, `observable`, `operable` service gateway?

## Architecture Concept

``` txt
+- Node-1 --+  +- Node-2 -+  +- Node-3 --+  +- Node-4 -+
|           |  |          |  |           |  |          |
| Worker-a  |  |          |  |           |  | Worker-d |
| Worker-b  |  | Worker-c |  | Worker-a  |  | Worker-c |
|    |      |  |    |     |  |    |      |  |    |     |
|   NATS ========= NATS ======================= NATS   |
|    |      |  |          |  |    |      |  |          |
|  Gateway  |  |          |  |  Gateway  |  |          |
|    |      |  |          |  |    |      |  |          |
+--- | -----+  +----------+  +--- | -----+  +----------+
     |                            |
     +--------------+-------------+
                    |
                  Ingress
```

### Components

#### Nats

Message bus

#### Worker

Business Logic worker

#### Gateway

Service gateway

## Example

### Install metropolis

``` sh
$ pip install metropolis
```

### Define Worker task

``` python
from metropolis import Worker


worker = Worker(nats='nats://localhost:4222')


@worker.task(subject='foo.bar', queue='worker')
def mytask(data, *args, **kwargs):
    """Simple task which returns reverse string
    """

    return data[0][::-1]


worker.run()
```

### Define Gateway

``` python
from metropolis import Gateway
import settings


gateway = Gateway(nats='nats://nats:4222')
gateway.app.run(host='0.0.0.0')
```


