import stomp import json import time from argparse import ArgumentParser, ArgumentDefaultsHelpFormatter from proton import Message, Event, symbol from proton.handlers import MessagingHandler from proton.reactor import Container, ReceiverOption, SenderOption from config import get_logger parser = ArgumentParser(formatter_class=ArgumentDefaultsHelpFormatter) parser.add_argument('--verbose', '-v', action='count', default=0) parser.add_argument('--config', '-c', default='kontor-docker') args = parser.parse_args() class MyListener(stomp.ConnectionListener): def __init__(self, log): self.log = log def on_error(self, frame): self.log.info(f"received an error {frame.body}") def on_message(self, frame): self.log.info(f"received a message '{frame.body}'") data = json.loads(frame.body) url = data['url'] self.log.info(f"found link: {url}") class AddLinkReceiver(MessagingHandler): def __init__(self, server, log): super(AddLinkReceiver, self).__init__() self.log = log self.log.info("create AddLinkReceiver") self.server = server self.conn = None self.address = "KontorMediaFile::add_link_file" def on_start(self, event: Event) -> None: self.log.info("AddLinkReceiver started...") self.conn = event.container.connect(self.server, user="artemis", password="artemis") event.container.create_receiver(self.conn, self.address, options=ReceiverCapabilityOptions()) def on_link_opened(self, event: Event) -> None: self.log.info(f"AddLinkReceiver opened for address {self.address}") def on_message(self, event: Event) -> None: message = event.message self.log.info(f"AddLinkReceiver message received: {message}") class ReceiverCapabilityOptions(ReceiverOption): def apply(self, receiver): receiver.source.capabilities.put_object(symbol("queue")) class SenderCapabilityOptions(SenderOption): def apply(self, sender): sender.source.capabilities.put_object(symbol("queue")) if __name__ == '__main__': log = get_logger(args.verbose, args.config) log.info("kontor.read_queue started") handler = AddLinkReceiver("amqp://127.0.0.1:5672", log) container = Container(handler) container.run() #host = [('127.0.0.1', 61616)] #conn = stomp.Connection(host_and_ports=host) #conn.set_listener('', MyListener(log)) #conn.connect(username='artemis', passcode='artemis', wait=True) #conn.subscribe(destination='KontorMediaFile::add_link_file', id=1, ack='auto', headers={}) #time.sleep(5) #conn.disconnect() log.info("kontor.read_queue finished")