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.9.tar.gz
(10.3 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.9.tar.gz.
File metadata
- Download URL: aethermagic-0.0.9.tar.gz
- Upload date:
- Size: 10.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9aa639453bd56c0377a87676ff3f0e0a9e10681159dc9619b941789fba138c55
|
|
| MD5 |
78d55ffba86cec7da3d089bf2760ca19
|
|
| BLAKE2b-256 |
0619635ed88fdb9e85e3c596d2ffc65f8d8df35bca59bc8c609489f28c3f6bec
|
File details
Details for the file aethermagic-0.0.9-py3-none-any.whl.
File metadata
- Download URL: aethermagic-0.0.9-py3-none-any.whl
- Upload date:
- Size: 8.6 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 |
8a7f5dd248b21c5d54d7e19e3a7d2fbb605277ee19b4cdee9123ffcaf51c6e58
|
|
| MD5 |
861945e72243208e9823bf9de98f09c5
|
|
| BLAKE2b-256 |
88a7b7d62d93ba02fac8c7494fc6a950dddf30c3106a9af40f0777ac8dcd374c
|