我正在用 C# 开发一个 .Net Compact 框架应用程序,它利用设备上安装的一些第三方消息队列软件。
我对这个环境相当陌生,想知道我是否可以通过一些更明智的眼睛运行架构的一些关键概念,看看我是否走在正确的轨道上或如何改进它。
在我的应用程序运行时,我需要保持消息队列库在后台运行,以便它可以发出通知并通知我的应用程序任何传入消息并处理我的应用程序生成的消息。它需要在我的应用程序的整个生命周期中运行,所以我认为最好的方法是在我的应用程序启动时在自己的线程中运行它?
我不想用代码淹没这篇文章,所以我把我认为重要的部分放在了上面,如果我需要澄清更多,请告诉我。
当应用程序像这样启动时,我在单独的线程中启动消息进程,
[MTAThread]
static void Main()
{
//Run the message processor in its own thread
Thread messagingThread = new Thread(new ThreadStart(msgProcessorStart));
messagingThread.Priority = ThreadPriority.Highest;
messagingThread.Start();
…..
Application.Run(splashForm);
}
private static void msgProcessorStart()
{
MessageProcessor.Start();
}
MessageProcessor 是消息传递库的一个外观,用于简化交互并保留它的单个实例。我在下面发布了其中的一部分,它会引发未送达事件并在收到消息时通知。
public static class MessageProcessor
{
#region Declarations
//private static reference to the MessageProvider as specified in the configuration files.
private static readonly IMessageProcessor _messageProcessor = MessageAccess.MessageProvider;
#endregion
#region Constructor
/// <summary>
/// Static constructor, connects to the events on the messageProcessor instance which
/// relate to messages received, notifications received and exceptions raised.
/// </summary>
static MessageProcessor()
{
//Connect up events specifed on the IMessageProcessor interface.
_messageProcessor.MessageReceived += messageReceived;
}
#endregion
#region Public Methods
/// <summary>
/// Sends a request based data message.
/// </summary>
/// <typeparam name="T">Message which implements RequestBase</typeparam>
/// <param name="message">The message to send</param>
public static void SendMessage<T>(T message) where T : RequestBase
{
_messageProcessor.SendMessage(message);
}
/// <summary>
/// Starts the Message Processor.
/// </summary>
/// <returns>bool, true if started successfully.</returns>
public static void Start()
{
_messageProcessor.Start();
}
#endregion
#region Private methods
//Registered listener of the IMessageProcessor.MessageReceived event
private static void messageReceived(object sender, MsgEventArgs<IMessage> message)
{
ThreadPool.QueueUserWorkItem(new WaitCallback(processMessage),(object)message.Value);
}
//Invoked via messageReceived.
private static void processMessage(object msg)
{
//process the message
}
#endregion
}
首先调用 Start 方法并建立会话;然后我们将开始接收通知并能够发送消息。
收到消息后,我目前正在通过 ThreadPool 在单独的线程中管理事件处理,以便继续并响应其他通知和消息。
这看起来是一种合理的方法吗?它能否确保我的消息队列库能够独立于我的应用程序进行处理?
任何建议将不胜感激,感谢您的时间。