Files
Stanislav Hejny 07f6f4569c
Unit test coverage / pytest (pull_request) Failing after 1m49s
Build and Publish Docker Image / build-and-push (push) Successful in 2m29s
Unit test coverage / pytest (push) Failing after 1m45s
/ build-and-push (push) Successful in 1m52s
CI for pypl publish / publish-lib (push) Successful in 1m44s
feat/#63 - add iterator instead of RabbitMQ callback
2025-07-27 09:50:25 +01:00

54 lines
2.2 KiB
Python

import asyncio
from amqp.config.amq_configuration import AMQConfiguration
from amqp.model.model import AMQRoute, DataMessage
from otdemo.otdemo_adapter import OTDemoAmqpAdapter
def print_document_id_static(document_id: str) -> str:
print(f"STATIC Document ID: {document_id}")
return "STATIC PRINTED!"
class Backend:
def print_document_id(self, document_id: str) -> str:
print(f"CLASS Document ID: {document_id}")
return "CLASS PRINTED!"
async def processing_loop():
while (
not otadapter.amq_service.future.done()
): # Wait until AMQ adapter initializes RabbitMQ connection
await asyncio.sleep(0.1)
# IMPORTANT - in the next line the string arg must match the first token in route-mapping property
route: AMQRoute = otadapter.amq_service.router.find_route_by_service("otdemo-2")
generator = otadapter.amq_service.data_message_generator(route) # this is a generator function
print(f"Data message generator created: {generator}")
message = await generator.asend(None) # First value must be None to start the generator
while True:
print(f"Received message: {message}")
if message is None:
break
data_message: DataMessage = message
# This is a message processing part. You may use data_message.method() or .domain() or .path()
# to access values provided by caller in the send command() call.
document_id = data_message._base64body.decode("utf-8")
print(
f"DATA_MESSAGE Attributes: {data_message.method()} {data_message.domain()} {data_message.path()}"
)
if data_message.path() == "print_document_id_static":
print_document_id_static(document_id)
elif data_message.path() == "print_document_id":
backend = Backend()
backend.print_document_id(document_id)
message = await generator.asend(True)
if __name__ == "__main__":
otadapter = OTDemoAmqpAdapter(AMQConfiguration("otdemo.backend.properties"), [])
# Run the processing loop in the AMQ service event loop
asyncio.run_coroutine_threadsafe(processing_loop(), otadapter.amq_service.loop)
otadapter.thread.join() # if the code above is not running a loop, need to join the thread to keep program running