Tag: 消息队列

使用ReceiveById可怕的MSMQ性能

每秒只有20条消息! 这就是我得到的! 这是从队列中查看50条消息并使用ReceiveById并行接收它们的代码。 队列中的消息总数是500.我也测试了其他数字。 但是上限是每秒20条消息! 我在某处完全不受影响吗? 编辑1: 1 – 我需要队列可以恢复。 但有趣的是,即使我将可恢复选项设置为false; 仍然是上限是20消息/秒。 2 – 我被迫在这里使用MSMQ,因为涉及一些遗留应用程序。 但是如果这个代码是正确的并且这个前20个限制确实存在,我可以说服该组切换。 因此,任何推荐(基于实际经验)替换MSMQ都是非常受欢迎的(请注意,如果出现任何类型的失败,我们需要保留我们的消息)。 3 – 我已经将ThreadPool中的线程数设置为高数,以防它有所帮助,但实际上在这段代码中它将导致创建100到200个线程。 我已经测试了从50到10000的不同数字,没有差异。 4 – 在每个任务中创建一个新的MessageQueue,因为ReceiveById不是线程安全的。 5 – 正如人们在代码中看到的那样,消息大小非常低; 它只是一个字符串加一个int。 编辑2:[ 非常奇怪的新结果 ] 我已经玩了这段代码的每一点,发现了这个:如果我注释掉行singleLocal.UseJournalQueue = false; 在我的任务中,我每秒最多可以读取1200条消息。 不令人印象深刻,但在我的情 奇怪的部分是UseJournalQueue的默认值为false; 为什么再次将其设置为false应该会在性能上产生这样的差异? static partial class Program { static void Main(string[] args) { ThreadPool.SetMaxThreads(15000, 30000); ThreadPool.SetMinThreads(10000, 20000); var qName = […]

Azure Service Bus中死信队列中的邮件是否过期?

Azure Service Bus中死信队列中的邮件是否过期? 一些解释 我有这些队列设置: var queueDescription = new QueueDescription(“MyTestQueue”) { RequiresSession = false, DefaultMessageTimeToLive = TimeSpan.FromMinutes(1), EnableDeadLetteringOnMessageExpiration = true, MaxDeliveryCount = 10 }; namespaceManager.CreateQueue(queueDescription); 当我将一些消息放入Azure Service Bus消息队列(不是来自Azure存储的队列)并且不消耗它们时(永远),它们将自动移动到死信队列。 但是,如果我也没有死信队列的消费者,那么这些消息是否会从死信队列中删除,还是会永远留在那里? (是否有一些官方文件说明这应该如何工作?) 我的试炼 在我的试验中,我在队列中放了3条消息 。 他们在2分钟左右就死了。 他们至少在一天内留在死信队列中,并没有被删除。 虽然调用NamespaceManager.GetQueueAsync()给了我上面的值(注意MessageCount仍然是3但DeadLetterMessageCount奇怪地为0 ),我仍然可以从死信队列中接收消息。 (所以他们没有从队列中删除。)

如何使用EasyNetQ / RabbitMQ进行error handling

我正在使用带有EasyNetQ库的C#中的RabbitMQ。 我在这里使用了pub / sub模式。 我仍然有一些问题希望有人可以帮助我: 在消费消息时出现错误时,它会自动移至错误队列。 如何实现重试(以便将其放回原始队列,当它无法处理X次时,它会移动到死信队列)? 据我所知,总有1个错误队列用于转储来自所有其他队列的消息。 如何为每种类型设置1个错误队列,以便每个队列都有自己的关联错误队列? 如何轻松重试错误队列中的消息? 我试过Hosepipe,但它只是将消息重新发布到错误队列而不是原始队列。 我不喜欢这个选项,因为我不想在控制台中摆弄。 我最好只针对错误队列进行编程。 任何人?

在ui线程中执行委托(使用消息泵)

我有一个后台线程来处理与外部服务的通信。 每次后台线程收到消息时,我都想将其传递给UI线程进行进一步处理(显示给用户)。 目前我已经创建了一个线程安全的消息队列,它在Timer.Tick中定期汇集并填充后台线程。 但这种解决方案是次优的。 你知道如何使用消息泵将事件从后台线程传递到ui线程吗?