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")
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()
def test_delayed_transaction_message_pass(self): queue_name = "transaction_message_pass" client_id = "transaction_message_pass" kube_add = "localhost:50000" queue = MessageQueue(queue_name, client_id, kube_add) mm = [] queuePolicy = QueueMessagePolicy(DelaySeconds=3) message = create_queue_message("queueName {}".format(0), "first test Ack".encode('UTF-8'), queuePolicy) mm.append(message) queuePolicy2 = QueueMessagePolicy(DelaySeconds=5) message2 = create_queue_message("queueName {}".format(1), "first test Ack".encode('UTF-8'), queuePolicy2) mm.append(message2) queue.send_queue_messages_batch(mm) tr = queue.create_transaction() recm = tr.receive() self.assertEqual( recm.error, "Error 138: no new message in queue, wait time expired") tr.close_stream() time.sleep(0.1) recm = tr.receive(2, 3) self.assertFalse(recm.is_error) tr.close_stream() time.sleep(0.01) recm = tr.receive(2, 5) self.assertFalse(recm.is_error)
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")
def test_get_message_pass_with_auth(self): client_id = "message_pass" kube_add = "localhost:50000" queue = MessageQueue("Get_Messages{}".format(randomString(10)), client_id, kube_add, encryptionHeader=jwt.encode({}, algorithm="HS256", key="some-key")) mm = [] message = create_queue_message("first test Ack", "hi there".encode('UTF-8')) mm.append(message) message2 = create_queue_message("sec test Ack", "hi again".encode('UTF-8')) mm.append(message2) queue.send_queue_messages_batch(mm) tr = queue.create_transaction() recm = tr.receive(3) self.assertFalse(recm.error) self.assertFalse( tr.ack_message(recm.message.Attributes.Sequence).is_error) self.assertEqual(1, len(queue.peek_queue_message().messages)) self.assertFalse(tr.receive().is_error) tr.close_stream()
def test_modify_after_ack_fail_with_auth(self): client_id = "ack_fail" kube_add = "localhost:50000" queue = MessageQueue("test_modify_after_ack_fail", client_id, kube_add, encryptionHeader=jwt.encode({}, algorithm="HS256", key="some-key")) mm = [] message = create_queue_message("first test Ack", "hi there".encode('UTF-8')) mm.append(message) message2 = create_queue_message("sec test Ack", "hi again".encode('UTF-8')) mm.append(message2) queue.send_queue_messages_batch(mm) tr = queue.create_transaction() recm = tr.receive(5) tr.ack_message(recm.message.Attributes.Sequence) time.sleep(0.1) recMod = tr.extend_visibility(5) self.assertTrue(recMod.is_error)
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)
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)
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")
def transactional_queue_reject(queue_name, client_id, kube_add): queue = MessageQueue(queue_name, client_id, kube_add) transaction = queue.create_transaction() res_rec = transaction.receive(10, 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)) res_rej = transaction.rejected_message(res_rec.message.Attributes.Sequence) if res_rej.is_error: raise Exception("Ack message error: %s" % res_rej.error) print("rejected message message of type: %s" % StreamRequestType(res_rej.stream_request_type).name)
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()
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)
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")
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)
] message.attributes = None message.policy = policy return message if __name__ == "__main__": client_id = "python-sdk-cookbook-queues-resend-sender" kube_add = "localhost:50000" queue = MessageQueue("Get_Messages{}".format(random_string(10)), client_id, kube_add) mm = [] message = create_queue_message("some-metadata", "hi there".encode('UTF-8')) mm.append(message) message2 = create_queue_message("some-metadata", "hi again".encode('UTF-8')) mm.append(message2) queue.send_queue_messages_batch(mm) tr = queue.create_transaction() for seq in range(3): stream = tr.receive(1, 5) print(stream.message) if seq == 0: tr.resend(queue.queue_name) else: tr.ack_message(stream.message.Attributes.Sequence) tr.close_stream()