예제 #1
0
async def test_async_queue_schedule_message(live_servicebus_config,
                                            standard_queue):
    client = ServiceBusClient(
        service_namespace=live_servicebus_config['hostname'],
        shared_access_key_name=live_servicebus_config['key_name'],
        shared_access_key_value=live_servicebus_config['access_key'],
        debug=True)
    import uuid
    queue_client = client.get_queue(standard_queue)
    enqueue_time = (datetime.utcnow() +
                    timedelta(minutes=2)).replace(microsecond=0)
    async with queue_client.get_receiver() as receiver:
        async with queue_client.get_sender() as sender:
            content = str(uuid.uuid4())
            message_id = uuid.uuid4()
            message = Message(content)
            message.properties.message_id = message_id
            message.schedule(enqueue_time)
            await sender.send(message)

        messages = await receiver.fetch_next(timeout=120)
        if messages:
            try:
                data = str(messages[0])
                assert data == content
                assert messages[0].properties.message_id == message_id
                assert messages[0].scheduled_enqueue_time == enqueue_time
                assert messages[0].scheduled_enqueue_time == messages[
                    0].enqueued_time.replace(microsecond=0)
                assert len(messages) == 1
            finally:
                for m in messages:
                    await m.complete()
        else:
            raise Exception("Failed to receive schdeduled message.")
async def test_async_session_schedule_message(live_servicebus_config, session_queue):
    client = ServiceBusClient(
        service_namespace=live_servicebus_config['hostname'],
        shared_access_key_name=live_servicebus_config['key_name'],
        shared_access_key_value=live_servicebus_config['access_key'],
        debug=True)
    import uuid
    session_id = str(uuid.uuid4())
    queue_client = client.get_queue(session_queue)
    enqueue_time = (datetime.now() + timedelta(minutes=2)).replace(microsecond=0)
    async with queue_client.get_sender(session=session_id) as sender:
        content = str(uuid.uuid4())
        message_id = uuid.uuid4()
        message = Message(content)
        message.properties.message_id = message_id
        message.schedule(enqueue_time)
        await sender.send(message)

    messages = []
    renewer = AutoLockRenew()
    async with queue_client.get_receiver(session=session_id) as receiver:
        renewer.register(receiver, timeout=140)
        messages.extend(await receiver.fetch_next(timeout=120))
        messages.extend(await receiver.fetch_next(timeout=5))
        if messages:
            data = str(messages[0])
            assert data == content
            assert messages[0].properties.message_id == message_id
            assert messages[0].scheduled_enqueue_time == enqueue_time
            assert messages[0].scheduled_enqueue_time == messages[0].enqueued_time.replace(microsecond=0)
            assert len(messages) == 1
        else:
            raise Exception("Failed to receive schdeduled message.")
    await renewer.shutdown()
async def test_async_session_schedule_message(live_servicebus_config, session_queue):
    client = ServiceBusClient(
        service_namespace=live_servicebus_config['hostname'],
        shared_access_key_name=live_servicebus_config['key_name'],
        shared_access_key_value=live_servicebus_config['access_key'],
        debug=True)
    import uuid
    session_id = str(uuid.uuid4())
    queue_client = client.get_queue(session_queue)
    enqueue_time = (datetime.now() + timedelta(minutes=2)).replace(microsecond=0)
    async with queue_client.get_sender(session=session_id) as sender:
        content = str(uuid.uuid4())
        message_id = uuid.uuid4()
        message = Message(content)
        message.properties.message_id = message_id
        message.schedule(enqueue_time)
        await sender.send(message)

    messages = []
    renewer = AutoLockRenew()
    async with queue_client.get_receiver(session=session_id) as receiver:
        renewer.register(receiver, timeout=140)
        messages.extend(await receiver.fetch_next(timeout=120))
        messages.extend(await receiver.fetch_next(timeout=5))
        if messages:
            data = str(messages[0])
            assert data == content
            assert messages[0].properties.message_id == message_id
            assert messages[0].scheduled_enqueue_time == enqueue_time
            assert messages[0].scheduled_enqueue_time == messages[0].enqueued_time.replace(microsecond=0)
            assert len(messages) == 1
        else:
            raise Exception("Failed to receive schdeduled message.")
    await renewer.shutdown()
async def test_async_queue_schedule_message(live_servicebus_config, standard_queue):
    client = ServiceBusClient(
        service_namespace=live_servicebus_config['hostname'],
        shared_access_key_name=live_servicebus_config['key_name'],
        shared_access_key_value=live_servicebus_config['access_key'],
        debug=True)
    import uuid
    queue_client = client.get_queue(standard_queue)
    enqueue_time = (datetime.now() + timedelta(minutes=2)).replace(microsecond=0)
    async with queue_client.get_receiver() as receiver:
        async with queue_client.get_sender() as sender:
            content = str(uuid.uuid4())
            message_id = uuid.uuid4()
            message = Message(content)
            message.properties.message_id = message_id
            message.schedule(enqueue_time)
            await sender.send(message)

        messages = await receiver.fetch_next(timeout=120)
        if messages:
            try:
                data = str(messages[0])
                assert data == content
                assert messages[0].properties.message_id == message_id
                assert messages[0].scheduled_enqueue_time == enqueue_time
                assert messages[0].scheduled_enqueue_time == messages[0].enqueued_time.replace(microsecond=0)
                assert len(messages) == 1
            finally:
                for m in messages:
                    await m.complete()
        else:
            raise Exception("Failed to receive schdeduled message.")
예제 #5
0
async def main(req: func.HttpRequest) -> func.HttpResponse:
    body_bytes = req.get_body()

    if not body_bytes:
        return func.HttpResponse(status_code=400)

    body_json = json.loads(body_bytes.decode())

    # Get queue client
    connection_str = os.environ['ServiceBusConnection']
    sb_client = ServiceBusClient.from_connection_string(connection_str)
    queue_client = sb_client.get_queue("scheduled-tweets")

    # Create Service Bus message
    status, time_delay = body_json.get('statusUpdate'), body_json.get(
        'minutesFromNow')
    message = Message(status)
    message.properties.message_id = uuid.uuid4()

    # schedule message
    enqueue_time = (datetime.utcnow() +
                    timedelta(minutes=time_delay)).replace(microsecond=0)
    message.scheduled_enqueue_time
    message.schedule(enqueue_time)

    # Add message to queue
    await queue_client.send(message)

    return func.HttpResponse(status_code=201)