コード例 #1
0
    def test_modify_new_message_pass(self):
        client_id = "message_pass"
        kube_add = "localhost:50000"
        queue = MessageQueue("send_modify_new_message_pass", client_id,
                             kube_add)

        message = create_queue_message("first test Ack",
                                       "hi there".encode('UTF-8'))

        queue.send_queue_message(message)

        tr = queue.create_transaction()
        recm = tr.receive(10)
        self.assertFalse(recm.is_error)
        modMsg = create_queue_message("hi there", "well hello".encode('UTF-8'))
        modMsg.queue = queue.queue_name

        resMod = tr.modify(modMsg)
        self.assertFalse(resMod.is_error)
        tr.close_stream()
        time.sleep(0.01)

        recm2 = tr.receive(3, 5)
        self.assertEqual("well hello", recm2.message.Body.decode("utf-8"))
        tr.close_stream()
コード例 #2
0
def transactional_queue_resend_modify_message(queue_name, client_id, kube_add):
    queue_res = MessageQueue(queue_name, client_id, kube_add)

    message = create_queue_message("resend to new queue {}".format(0),
                                   "my resend modify".encode('UTF-8'))
    queue_res.send_queue_message(message)

    queue = MessageQueue(queue_name, client_id, kube_add)
    tran = queue.create_transaction()

    res_rec = tran.receive(3, 5)

    if res_rec.is_error:
        raise "Message dequeue error, error: %s" % res_rec.is_error

    print("Received message id: {}, body: {} tags:{}".format(
        res_rec.message.MessageID, res_rec.message.Body, res_rec.message.Tags))

    mod_msg = res_rec.message
    mod_msg.Channel = "receiverB"

    mod_msg.Metadata = "new Metadata"

    res_mod = tran.modify(mod_msg)

    if res_mod.is_error:
        raise "Message modify error, error: %s" % res_mod.is_error

    print("Done")
コード例 #3
0
def transactional_queue_resend_to_new_queue(queue_name, client_id, kube_add):
    queue_rej = MessageQueue(queue_name, client_id, kube_add)

    message = create_queue_message("resend to new queue {}".format(0),
                                   "my resend".encode('UTF-8'))
    queue_rej.send_queue_message(message)

    queue = MessageQueue(queue_name, client_id, kube_add)
    tran = queue.create_transaction()

    res_rec = tran.receive(5, 10)

    if res_rec.is_error:
        raise "Message dequeue error, error: %s" % res_rec.is_error

    print("Received message id: {}, body: {} tags:{}".format(
        res_rec.message.MessageID, res_rec.message.Body, res_rec.message.Tags))

    print("resend to new queue")

    res_resend = tran.resend("new-queue")

    if res_resend.is_error:
        raise "Message resend error, error: %s" % res_resend.is_error

    print("Done")
コード例 #4
0
    def test_send_receive_tran_ack_pass(self):
        client_id = "tran_ack_pass"
        kube_add = "localhost:50000"
        queue = MessageQueue("SendReciveTranAck_Pass", client_id, kube_add)

        message = create_queue_message("first test Ack",
                                       "hi there".encode('UTF-8'))

        queue.send_queue_message(message)

        tr = queue.create_transaction()
        recm = tr.receive(5)
        self.assertFalse(
            tr.ack_message(recm.message.Attributes.Sequence).is_error)
コード例 #5
0
def send_message_to_queue(queue_name, client_id, kube_add):
    queue = MessageQueue(queue_name, client_id, kube_add)
    message = create_queue_message(
        "someMeta", "some-simple_queue-queue-message".encode('UTF-8'))
    queue_send_response = queue.send_queue_message(message)
    print("finished sending to queue answer. message_id: %s, body: %s" %
          (queue_send_response.message_id, message.body))
コード例 #6
0
    def test_send_receive_tran_visability_expired_fail(self):
        client_id = "expired_fail"
        kube_add = "localhost:50000"
        queue = MessageQueue("send_receive_tran_visability_expired_fail",
                             client_id, kube_add)

        message = create_queue_message("first test Ack",
                                       "hi there".encode('UTF-8'))

        queue.send_queue_message(message)

        tr = queue.create_transaction()
        recm = tr.receive(4)
        time.sleep(5)
        ackms = tr.ack_message(recm.message.Attributes.Sequence)
        self.assertEqual(ackms.error,
                         "Error 129: current visibility timer expired")
コード例 #7
0
    def test_send_receive_tran_visability_expired_pass(self):
        client_id = "expired_pass"
        kube_add = "localhost:50000"
        queue = MessageQueue("send_receive_tran_visability_expired_pass",
                             client_id, kube_add)

        message = create_queue_message("first test Ack",
                                       "hi there".encode('UTF-8'))

        queue.send_queue_message(message)

        tr = queue.create_transaction()
        recm = tr.receive()
        tr.extend_visibility(5)
        time.sleep(4)
        ackms = tr.ack_message(recm.message.Attributes.Sequence)
        self.assertEqual(ackms.is_error, False)
コード例 #8
0
    def test_send_receive_tran_ack_fail(self):
        client_id = "tran_ack_fail"
        kube_add = "localhost:50000"
        queue = MessageQueue("SendReciveTranAck_Fail", client_id, kube_add)

        message = create_queue_message("first test Ack",
                                       "hi there".encode('UTF-8'))

        queue.send_queue_message(message)

        tr = queue.create_transaction()
        recm = tr.receive(5)
        ackms = tr.ack_message(recm.message.Attributes.Sequence)
        time.sleep(0.1)
        recm2 = tr.receive(5)
        self.assertFalse(ackms.is_error)
        self.assertTrue(recm2.is_error)
        tr.close_stream()
コード例 #9
0
    def test_send_receive_tran_ack_pass_with_auth(self):
        client_id = "tran_ack_pass"
        kube_add = "localhost:50000"
        queue = MessageQueue("SendReceiveTranAck_Pass",
                             client_id,
                             kube_add,
                             encryptionHeader=jwt.encode({},
                                                         algorithm="HS256",
                                                         key="some-key"))

        message = create_queue_message("first test Ack",
                                       "hi there".encode('UTF-8'))

        queue.send_queue_message(message)

        tr = queue.create_transaction()
        recm = tr.receive(5)
        self.assertFalse(
            tr.ack_message(recm.message.Attributes.Sequence).is_error)
コード例 #10
0
def transactional_queue_extand_visibility(queue_name, client_id, kube_add):
    queue_rej = MessageQueue("reject_test", client_id, kube_add)

    message = create_queue_message("queueName {}".format(0),
                                   "my reject".encode('UTF-8'))
    queue_rej.send_queue_message(message)

    queue = MessageQueue("reject_test", client_id, kube_add)
    tran = queue.create_transaction()

    res_rec = tran.receive(5, 10)

    if res_rec.is_error:
        raise "Message dequeue error, error: %s" % res_rec.is_error

    print("Received message id: {}, body: {} tags: {}".format(
        res_rec.message.MessageID, res_rec.message.Body, res_rec.message.Tags))

    print("work for 1 second")

    time.sleep(1)

    print("Need more time to process, extend visibility for more 3 seconds")

    res_ext = tran.extend_visibility(3)

    if res_ext.is_error:
        raise Exception("Ack message error: %s" % res_ext.error)

    print("Approved. work for 2.5 seconds")

    time.sleep(2.5)

    print("Work done... ack the message")

    res_ack = tran.ack_message(res_rec.message.Attributes.Sequence)

    if res_ack.is_error:
        raise Exception("Ack message error: %s" % res_ack.error)

    print("ack done")
コード例 #11
0
def send_message_to_a_queue_with_delay(queue_name, client_id, kube_add,
                                       max_number_messages, max_timeout):
    queue = MessageQueue(queue_name, client_id, kube_add, max_number_messages,
                         max_timeout)
    policy = QueueMessagePolicy()
    policy.DelaySeconds = 5
    message = create_queue_message(
        "someMeta", "some-simple_queue-queue-message".encode('UTF-8'), policy)
    queue_send_message_to_queue_with_delay_response = queue.send_queue_message(
        message)
    print("finished sending message to queue with delay answer: {} ".format(
        queue_send_message_to_queue_with_delay_response))
コード例 #12
0
    def test_send_receive_tran_visibility_expired_pass_with_auth(self):
        client_id = "expired_pass"
        kube_add = "localhost:50000"
        queue = MessageQueue("send_receive_tran_visibility_expired_pass",
                             client_id,
                             kube_add,
                             encryptionHeader=jwt.encode({},
                                                         algorithm="HS256",
                                                         key="some-key"))

        message = create_queue_message("first test Ack",
                                       "hi there".encode('UTF-8'))

        queue.send_queue_message(message)

        tr = queue.create_transaction()
        recm = tr.receive()
        tr.extend_visibility(5)
        time.sleep(4)
        ackms = tr.ack_message(recm.message.Attributes.Sequence)
        self.assertEqual(ackms.is_error, False)
コード例 #13
0
def send_message_to_a_queue_with_deadletter_queue(queue_name, client_id,
                                                  kube_add,
                                                  max_number_messages,
                                                  max_timeout):
    queue = MessageQueue(queue_name, client_id, kube_add, max_number_messages,
                         max_timeout)
    policy = QueueMessagePolicy()
    policy.MaxReceiveCount = 3
    policy.MaxReceiveQueue = "DeadLetterQueue"
    message = create_queue_message(
        "someMeta", "some-simple_queue-queue-message".encode('UTF-8'), policy)
    queue_send_message_to_queue_with_deadletter_response = queue.send_queue_message(
        message)
    print(
        "finished sending message to queue with deadletter answer: {} ".format(
            queue_send_message_to_queue_with_deadletter_response))
コード例 #14
0
    message.policy = policy
    return message


if __name__ == "__main__":
    channel = "queues.expiration"
    queue_sender = MessageQueue(
        channel, "python-sdk-cookbook-queues-expiration-client",
        "localhost:50000")
    policy = QueueMessagePolicy()
    policy.ExpirationSeconds = 5
    queue_message = create_queue_message(
        "queueName {}".format(channel),
        "some-simple-queue-expiration-message-1".encode('UTF-8'), policy)
    try:
        sent = queue_sender.send_queue_message(queue_message)
        if sent.is_error:
            print('message enqueue error, error:' + sent.error)
        else:
            print('Send to Queue')
    except Exception as err:
        print('message enqueue error, error:%s' % (err))

    queue_receiver = MessageQueue(
        channel, "python-sdk-cookbook-queues-expiration-client-receiver",
        "localhost:50000", 2, 1)
    try:
        res = queue_receiver.receive_queue_messages()
        if res.error:
            print("'Received:'%s'" % (res.error))
        else:
コード例 #15
0
from kubemq.grpc import QueueMessagePolicy
from kubemq.queue.message_queue import MessageQueue

from kubemq.queue.message import Message


def create_queue_message(meta_data, body, policy=None):
    message = Message()
    message.metadata = meta_data
    message.body = body
    message.tags = [
        ('key', 'value'),
        ('key2', 'value2'),
    ]
    message.attributes = None
    message.policy = policy
    return message


if __name__ == "__main__":
    channel = "queues.dead-letter"
    queue = MessageQueue(channel, "python-sdk-cookbook-queues-dead-letter-client", "localhost:50000")
    policy = QueueMessagePolicy()
    policy.MaxReceiveCount = 3
    policy.MaxReceiveQueue = "DeadLetterQueue"
    message = create_queue_message("some-metadata", "some-simple-queue-dead-letter-message".encode('UTF-8'), policy)
    queue_send_message_to_queue_with_deadletter_response = queue.send_queue_message(message)
    print("finished sending message to queue with dead-letter answer: {} ".format(
        queue_send_message_to_queue_with_deadletter_response))
コード例 #16
0
    ]
    message.attributes = None
    message.policy = policy
    return message


if __name__ == "__main__":
    channel = "queue.a;queue.b;queue.c"
    queue = MessageQueue(channel,
                         "python-sdk-cookbook-queues-multicast-client",
                         "localhost:50000")
    message = create_queue_message(
        "queueName {}".format(channel),
        "some-simple-queue-multicast-message-1".encode('UTF-8'))
    try:
        sent = queue.send_queue_message(message)
        if sent.error:
            print('message enqueue error, error:' + sent.error)
        else:
            print('Send to Queue  at: %d' % (sent.sent_at))
    except Exception as err:
        print('message enqueue error, error:%s' % (err))

    queue_a = MessageQueue(
        'queue.a', "python-sdk-cookbook-queues-multicast-client-receiver-A",
        "localhost:50000", 2, 1)
    try:
        res = queue_a.receive_queue_messages()
        if res.error:
            print("'Error Received:'%s'" % (res.error))
        else:
コード例 #17
0
    message.body = body
    message.tags = [
        ('key', 'value'),
        ('key2', 'value2'),
    ]
    message.attributes = None
    message.policy = policy
    return message


if __name__ == "__main__":
    client_id = "python-sdk-cookbook-queues-stream-sender"
    kube_add = "localhost:50000"
    queue = MessageQueue("Get_Messages{}".format(random_string(10)), client_id,
                         kube_add)

    message = create_queue_message("some-metadata", "hi there".encode('UTF-8'))
    queue.send_queue_message(message)

    tr = queue.create_transaction()
    stream = tr.receive(5, 10)
    print(stream.message)
    print("work for 1 seconds")
    sleep(1)
    print("need more time to process, extend visibility for more 3 seconds")
    tr.extend_visibility(3)
    print("approved. work for 2.5 seconds")
    sleep(2.5)
    tr.ack_message(stream.message.Attributes.Sequence)
    tr.close_stream()