标签: msmq-transaction

MSMQ竞争消费者

有人能告诉我MSMQ(使用交易)是否支持竞争消费者?基本上,我有多个线程将消息从单个队列中排除.只是想确保这一点有效,因为MSMQ的行为有时与我预期的不同.

msmq msmq-transaction

7
推荐指数
1
解决办法
1044
查看次数

System.Messaging.MessageQueueException-外部组件抛出异常

我通过Windows服务运行.exe,它从私有队列中读取消息.服务一切都很好而且稳定,但有时服务停止(它实际上没有停止,但它没有处理任何东西.服务状态仍然是"已启动",我需要手动重启它).

这个经常不会出现但是分析.exe文件的内存转储,我发现在异常下遇到了这么多线程.

异常对象:0000000001436120异常类型:System.Messaging.MessageQueueException消息:外部组件引发了异常.

System.Messaging.MessageQueueException- External component has thrown an exception
System.Messaging.MessageQueue.ReceiveCurrent(System.TimeSpan, Int32, System.Messaging.Interop.CursorHandle, System.Messaging.MessagePropertyFilter, System.Messaging.MessageQueueTransaction, System.Messaging.MessageQueueTransactionType) 
System.Messaging.MessageQueue.Peek(System.TimeSpan)
Run Code Online (Sandbox Code Playgroud)

知道服务遇到这个异常的原因吗?提前致谢

c# queue msmq message-queue msmq-transaction

5
推荐指数
0
解决办法
1555
查看次数

使用BeginPeek后,我是否有义务致电EndPeek?

我有一个处理私有本地消息队列(MSMQ)的Windows服务.当它启动时,它PeekCompleted在队列上注册一个事件处理程序,然后调用异步BeginPeek()以等待消息到达.

protected override void OnStart(string[] args)
{
    if (String.IsNullOrWhiteSpace(args[0]))
        return;

    queue = new MessageQueue(args[0]);
    queue.Formatter = new BinaryMessageFormatter();
    queue.PeekCompleted += new PeekCompletedEventHandler(OnPeekCompleted);

    queue.BeginPeek();
}
Run Code Online (Sandbox Code Playgroud)

一旦消息到达,我的目标是显然处理该消息.我的代码目前有一个queue.Receive()获取消息的方法,包含在一个事务中,以便在处理过程中出现错误时将消息放回队列.BeginPeek()再次调用以重新启动循环.

private static void OnPeekCompleted(Object source, PeekCompletedEventArgs asyncResult)
{
    try
    {
        MessageQueue q = (MessageQueue)source;

        using (MessageQueueTransaction trans = new MessageQueueTransaction())
        {
            trans.Begin();

            Message msg = q.Receive(trans);
            ProcessMessage(msg);

            trans.Commit();
         }

         // Restart the asynchronous peek operation.
         q.BeginPeek();
    }
    catch (MessageQueueException qEx)
    {
        // TODO: Walk it off.
    } …
Run Code Online (Sandbox Code Playgroud)

c# msmq peek msmq-transaction

2
推荐指数
1
解决办法
1494
查看次数

标签 统计

msmq ×3

msmq-transaction ×3

c# ×2

message-queue ×1

peek ×1

queue ×1