AetherMagic - Communications between microservices over MQTT
Project description
AetherMagic
Communications between microservices over MQTT
The goal is to create communication between microservices, using such advantages as:
- Scaling (multiple microservices to perform one group of tasks)
- Distribution of tasks (only one microserver receives a task in a group)
- Distribution of access rights for specific tasks/roles (setting or execution) and division, if necessary, by projects (by configuring access rights on the server side in the MQTT broker)
Installation
pip install aethermagic
Example
To launch a task on master-server / separate process:
from aethermagic import AetherTask
async def complete(ae, success, output_data):
print('complete')
async def status(ae, complete, success, progress, output_data):
print('status')
input_data = {}
await AetherTask(None, 'worker', 'collect', on_complete=complete, on_status=status).perform(input_data)
Variables and values:
completeTrue / FalsesuccessTrue / Falseprogress0...100input_datauser-defined data to serialize into JSONoutput_datauser-defined data unserialized from JSON
To perform task on worker-server / separate process:
from aethermagic import AetherTask
async def perform(ae, input_data):
print('perform')
await ae.status(100) # Optional
output_data = {}
success = True
await ae.complete(success, output_data)
await AetherTask(None, 'worker', 'collect', on_perform=perform).idle()
Variables and values:
input_datauser-defined data to serialize into JSONoutput_datauser-defined data unserialized from JSON
AetherMagic requires running or joining an existing async loop:
For example, in simple python app you can do it with the following code:
import threading
import asyncio
from aethermagic import AetherMagic
def startloop(self, args=[None]) -> None:
async def starttask() -> None:
aem = AetherMagic(server=settings.MQTT_BROKER, port=settings.MQTT_PORT, ssl=True, user=settings.MQTT_USER, password=settings.MQTT_PASSWORD, union=settings.AETHER_UNION)
async with asyncio.TaskGroup() as group:
group.create_task(aem.main())
#group.create_task(your_loop.main()) # Optional: You can create your own async loop
asyncio.run(starttask())
thread = threading.Thread(target=startloop, args=[None])
thread.start()
thread.join() # Will wait for thread execution to complete ==> never
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
aethermagic-0.0.11.tar.gz
(10.4 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file aethermagic-0.0.11.tar.gz.
File metadata
- Download URL: aethermagic-0.0.11.tar.gz
- Upload date:
- Size: 10.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4c63c44a2bb6cff109b2ffd49c68601fb61e2201fad6801f0910b566de5f5a22
|
|
| MD5 |
0b03c5f1adb01a8df0b30d2217bd6960
|
|
| BLAKE2b-256 |
81ce94e8bf33f6da799989dfae95f9602365745532ddc283239f83997ed9e9e1
|
File details
Details for the file aethermagic-0.0.11-py3-none-any.whl.
File metadata
- Download URL: aethermagic-0.0.11-py3-none-any.whl
- Upload date:
- Size: 8.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f667da21734fba2c96aeb49c972afc8d861aafa7c41e10cb861d2fb43ecafb29
|
|
| MD5 |
2ec8a1e013397523170834292fbd0d25
|
|
| BLAKE2b-256 |
cb424dc5377b4da07c2083dfcd80d807004f76ad1ac4dd725a1978428568199a
|