目前,我已经尝试了多种方法,但仍然无法从队列中检索到任何消息。我可以确认,如果它是非事务性队列,我确实能够接收消息。请协助我。 这是我写的代码:
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()
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()