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.5.tar.gz
(9.5 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.5.tar.gz.
File metadata
- Download URL: aethermagic-0.0.5.tar.gz
- Upload date:
- Size: 9.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c811c41385bd4393908d28c64d0d36181a8fdaa6a9bd5d8c258139522c3aeea0
|
|
| MD5 |
0c7f8dae81601a9d045c2b2b7220fe4f
|
|
| BLAKE2b-256 |
f4775e68eba4eb51cdafdfd7b9ec9069fd33fb43a037741d498cf7eb9deb4c1d
|
File details
Details for the file aethermagic-0.0.5-py3-none-any.whl.
File metadata
- Download URL: aethermagic-0.0.5-py3-none-any.whl
- Upload date:
- Size: 8.5 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 |
2a3f301efa4fa878cdab4020956bc2ac5855c28b2a1f9ae6ff55634bac4fd267
|
|
| MD5 |
87be7157339714726e4e76bfa5acb5fa
|
|
| BLAKE2b-256 |
030a00cd6e04abc1c4112e94d126e8af4a0ba649e78c11b22556b13941853b36
|