Reputation: 1
Currently, I have tried multiple methods, but I still cannot retrieve any messages from the queue. I can confirm that if it's a non-transactional queue, I am indeed able to receive messages. Please assist me with this. Here is the code I wrote:
def send_message(queue_name: str, label: str, message: str):
queue_info = win32com.client.Dispatch("MSMQ.MSMQQueueInfo")
queue_info.FormatName = f'direct=tcp:{host_name}\\PRIVATE$\\{queue_name}'
queue = None
try:
queue = queue_info.Open(2, 0)
msg = win32com.client.Dispatch("MSMQ.MSMQMessage")
msg.Label = label
msg.Body = message
msg.Send(queue)
except Exception as e:
print(f'Error! {e}')
finally:
queue.Close()
Upvotes: 0
Views: 148
Reputation: 1
import win32com.client
import os
import clr
from System import Array
from System import Byte
clr.AddReference('System.Messaging')
clr.AddReference('System.IO')
from System.Messaging import Message, MessageQueue,
MessageQueueTransaction, XmlMessageFormatter
from System.IO import StreamReader
inqueue = '.\\PRIVATE$\\inputqueue'
outqueue = '.\\PRIVATE$\\outputqueue'
#This is to write message to MSMQ
msg = 'This is to test sending a message to a queue'
queue = MessageQueue(inqueue)
transaction = MessageQueueTransaction()
transaction.Begin()
queue.Send(msg, transaction)
transaction.Commit()
#This is to read message from MSMQ (without commit it doesn't remove
message from the queue)
queue2 = MessageQueue(inqueue)
queue2.Formatter = XmlMessageFormatter(list(str()))
message = Message()
transaction2 = MessageQueueTransaction()
transaction2.Begin()
message = queue2.Receive(transaction2)
print("Message type is: ",type(message))
reader = StreamReader(message.BodyStream)
print(reader.ReadToEnd())
transaction2.Commit() #This line of code removes message after reading it
if we don't commit then the message will remain in the queue
queue.Dispose()
queue2.Dispose()
Upvotes: 0