Example #1
0
def test_defer_message_dispatch(ctx):
    from datetime import datetime, timedelta
    from eventlet import sleep, spawn, with_timeout
    from eventlet.event import Event
    from melkman.messaging import MessageDispatch, always_ack
    from melkman.scheduler import defer_message
    from melkman.scheduler.worker import ScheduledMessageService

    sms = ScheduledMessageService(ctx)
    sched = spawn(sms.run)
    w = MessageDispatch(ctx)
    
    message_type = 'test_dispatch_send_recv'
    
    work_result = Event()
    
    @always_ack
    def handler(job, message):
        work_result.send(sum(job['values']))
    
    worker = w.start_worker(message_type, handler)

    try:
        now = datetime.utcnow()
        wait = timedelta(seconds=2)
        # w.send({'values': [1, 2]}, message_type)
        defer_message(now + wait, {'values': [1 ,2]}, message_type, ctx)
        sleep(3)
    
        assert with_timeout(2, work_result.wait) == 3
    finally:
        worker.kill()
        worker.wait()
        sched.kill()
        sched.wait()
Example #2
0
File: api.py Project: jab/melkman
def schedule_feed_index(url, timestamp, context, message_id=None, skip_reschedule=False):
    """
    request that the url specified be fetched and indexed at a specific time
    in the future.
    """
    message = {'url': url}
    if skip_reschedule:
        message['skip_reschedule'] = True

    options = {}
    if message_id is not None:
        options['message_id'] = message_id

    defer_message(timestamp, message, INDEX_FEED_COMMAND, context, **options)