第一步: 安裝MSMQs作爲Windows的服務器/ PC功能
然後:
- 創建隊列如果不存在
它 - 在隊列中異步
有用的推送消息用於從MSMQ推動和檢索消息guide
代碼例如:
public class ExceptionMSMQ
{
private static readonly string description = "Example description";
private static readonly string path = @".\Private$\myqueue";
private static MessageQueue exceptionQueue;
public static MessageQueue ExceptionQueue
{
get
{
if (exceptionQueue == null)
{
try
{
if (MessageQueue.Exists(path))
{
exceptionQueue = new MessageQueue(path);
exceptionQueue.Label = description;
}
else
{
MessageQueue.Create(path);
exceptionQueue = new MessageQueue(path);
exceptionQueue.Label = description;
}
}
catch
{
throw;
}
finally
{
exceptionQueue.Dispose();
}
}
return exceptionQueue;
}
}
public static void PushMessage(string message)
{
ExceptionQueue.Send(message);
}
private static List<string> RetrieveMessages()
{
List<string> messages = new List<string>();
using (ExceptionQueue)
{
System.Messaging.Message[] queueMessages = ExceptionQueue.GetAllMessages();
foreach (System.Messaging.Message message in queueMessages)
{
message.Formatter = new XmlMessageFormatter(
new String[] { "System.String, mscorlib" });
string msg = message.Body.ToString();
messages.Add(msg);
}
}
return messages;
}
public static void Main(string[] args)
{
ExceptionMSMQ.PushMessage("my exception string");
}
}
另一個廣泛使用的方法是使用已包含此功能的開箱即用記錄器,如Enterprise Library或NLog,它們提供了簡單的界面來完成此操作。
對於檢索消息,我會推薦一個單獨的Windows服務,它將定期讀取消息並處理它們。如何做到這一點的一個很好的例子在這裏給出:Windows service with timer
更新: Windows服務實例:
MSMQConsumerService.cs
public partial class MSMQConsumerService : ServiceBase
{
private System.Timers.Timer timer;
public MSMQConsumerService()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
this.timer = new System.Timers.Timer(30000D); // 30000 milliseconds = 30 seconds
this.timer.AutoReset = true;
this.timer.Elapsed += new System.Timers.ElapsedEventHandler(this.ProcessQueueMessages);
this.timer.Start();
}
protected override void OnStop()
{
this.timer.Stop();
this.timer = null;
}
private void ProcessQueueMessages(object sender, System.Timers.ElapsedEventArgs e)
{
MessageProcessor.StartProcessing();
}
}
和MessageProcessor.cs
public class MessageProcessor
{
public static void StartProcessing()
{
List<string> messages = ExceptionMSMQ.RetrieveMessages();
foreach(string message in messages)
{
//write message in database
}
}
}
來源
2016-11-23 07:46:17
Pan
你能否用各自的代碼詳細說明你的答案。 –
@ B.Balamanigandan在這裏你是交配。添加了一些代碼來幫助你。我希望事情現在更清晰 – Pan
相當不錯...我需要通過Windows服務調用讀取方法。此服務應啓動調用以執行讀取方法。 - 請分享你的想法。 –