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 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 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_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 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))
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 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_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 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))
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)
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))
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:
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))
] 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:
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()