我有两台机器A和B,A用于发送消息,而B用于接收消息。 现在,我关闭B,所以A发出的消息存储在传出队列中。我的问题是:
1.作为开发人员,我怎么知道消息已经到达B?(当B不可用时,发送消息的应用程序像往常一样退出,没有抛出异常)
2. B启动时如何在传出队列中重新发送消息?
答案 0 :(得分:1)
从理论上讲,MSMQ是一种以异步方式发送消息的技术,更重要的是,它是一种断开连接的方式(接收器可能尚未连接到系统)。
发件人,如果他没有收到MessageQueueException(https://msdn.microsoft.com/en-us/library/system.messaging.messagequeueexception(v=vs.110).aspx),那么他可以认为邮件已成功发送。如果你真的想看到"实时"无论B是否收到来自A的消息,您都应该依赖其他通信技术(直接TCP连接或包装TCP通信通道的东西,如.NET Remoting或WCF)。
正如我所说的那样,B可能还没有上线,或者因为什么原因而被关闭......所以对于你的第二个问题,我可以告诉你,你没有任何问题,因为每当B重新启动时,它应该再次调用"接收"在你的队列上(使A发送的任何消息出列)。
阅读以下链接:http://www.primaryobjects.com/2007/08/13/using-the-microsoft-message-queue-msmq-and-c-asp-net/我认为这是有帮助的。
答案 1 :(得分:0)
"作为开发人员,我怎么知道邮件已经到达B?"
日记是你需要的。 Writing in MSMQ's personal journal
"如何在B启动时在传出队列中重新发送消息?"
MSMQ负责传出传出队列中的消息传递。您不需要重新发送。等待目的地上线。