コード例 #1
0
ファイル: test_publishers.py プロジェクト: Rydra/melange
    def test_publish_a_message_to_a_queue(self):
        backend = a_backend()

        registry = SerializerRegistry(serializer_settings)
        sut = QueuePublisher(backend=backend, serializer_registry=registry)
        sut.publish("queue", {"some_content": "12345"})
        assert_that(backend.publish_to_queue, called().times(1))
コード例 #2
0
def test_inmemory_messaging_backend():
    consumer_1 = Consumer(
        lambda message: print(f"Hello {message['message']}!"))
    consumer_2 = Consumer(
        lambda message: print(f"Hello {message['message']} 2!"))

    backend = InMemoryMessagingBackend()
    registry = SerializerRegistry(serializer_settings)
    link_synchronously("somequeue", [consumer_1, consumer_2], registry,
                       backend)

    registry = SerializerRegistry(serializer_settings)
    publisher = QueuePublisher(registry, backend=backend)
    publisher.publish("somequeue", {"message": "Mary"})
コード例 #3
0
def test_async_consumer(request):
    # We'll use the ElasticMQ as backend since it works like a real SQS queue
    backend = LocalSQSBackend(host=os.environ.get("SQSHOST"),
                              port=os.environ.get("SQSPORT"))
    queue_name = "testqueue"

    # Initialize the queue
    queue = MessagingBackendFactory(backend).init_queue(queue_name)

    # Delete the queue upon finishing the execution of the test
    def teardown():
        backend.delete_queue(queue)

    request.addfinalizer(teardown)

    # Create a consumer that, upon receiving a message, will set
    # the variable "value set" to later assert that this value
    # has, indeed, been set by the consumer that is running on another thread
    state = State()

    def set_state(message: Dict) -> None:
        state.value_set = message["value"]

    consumer = Consumer(on_message=set_state)
    registry = SerializerRegistry(serializer_settings)
    handler = SimpleMessageDispatcher(consumer, registry, backend=backend)
    # Start the consumer loop thread to run the consumer loop in the background
    threading.Thread(target=lambda: handler.consume_loop(queue_name),
                     daemon=True).start()

    # Publish a message and...
    publisher = QueuePublisher(registry, backend)
    publisher.publish(queue_name, {"value": 1})

    # ...wait until the value is set
    probe = StateProbe(state)
    probe.wait()

    assert_that(state.value_set, is_(1))
コード例 #4
0
ファイル: app.py プロジェクト: Rydra/melange
from melange import MessageDispatcher, QueuePublisher
from melange.backends import LocalSQSBackend
from melange.examples.payment_service.consumer import PaymentConsumer
from melange.examples.payment_service.publisher import PaymentPublisher
from melange.examples.payment_service.repository import PaymentRepository
from melange.examples.payment_service.service import PaymentService
from melange.examples.shared import serializer_registry
from melange.serializers import PickleSerializer

if __name__ == "__main__":
    serializer = PickleSerializer()
    backend = LocalSQSBackend(host=os.environ.get("SQSHOST"),
                              port=os.environ.get("SQSPORT"))

    dispatcher = MessageDispatcher(
        serializer_registry,
        backend=backend,
    )

    payment_consumer = PaymentConsumer(
        PaymentService(
            PaymentRepository(),
            PaymentPublisher(
                QueuePublisher(serializer_registry, backend=backend)),
        ))

    dispatcher.attach_consumer(payment_consumer)

    print("Consuming...")
    dispatcher.consume_loop("payment-updates")
コード例 #5
0
ファイル: triggerer.py プロジェクト: Rydra/melange
import argparse
import os
import uuid

from melange import QueuePublisher
from melange.backends import LocalSQSBackend
from melange.examples.payment_service.events import OrderResponse
from melange.examples.shared import serializer_registry

if __name__ == "__main__":
    parser = argparse.ArgumentParser(
        description="Triggers an order event for the payment service to collect"
    )
    parser.add_argument("reference",
                        type=str,
                        help="The reference number of the order")
    args = parser.parse_args()

    order_reponse = OrderResponse(id=str(uuid.uuid4()),
                                  reference=args.reference)
    backend = LocalSQSBackend(host=os.environ.get("SQSHOST"),
                              port=os.environ.get("SQSPORT"))

    QueuePublisher(serializer_registry,
                   backend=backend).publish("payment-updates", order_reponse)

    print(f"Order with reference {args.reference} sent.")
コード例 #6
0
from simple_cqrs.domain_event import DomainEvent

from melange import QueuePublisher
from melange.backends import LocalSQSBackend
from melange.serializers import PickleSerializer, SerializerRegistry


class MyTestMessage:
    def __init__(self, message: str) -> None:
        self.message = message


if __name__ == "__main__":
    serializer_settings = {
        "serializers": {"pickle": PickleSerializer},
        "serializer_bindings": {DomainEvent: "pickle"},
    }

    serializer_registry = SerializerRegistry(serializer_settings)

    backend = LocalSQSBackend(host="localhost", port=9324)
    publisher = QueuePublisher(serializer_registry, backend)
    message = MyTestMessage("Hello World!")
    publisher.publish("melangetutorial-queue", message)
    print("Message sent successfully!")