使用启用会话(消息排序)的Azure ServiceBus队列,我的会话需要持续几分钟到几个小时。
为此,我将QueueClient配置如下:
_options = new SessionHandlerOptions(ExceptionReceivedHandler)
{
AutoComplete = false,
MaxConcurrentSessions = 50,
MessageWaitTimeout = TimeSpan.FromSeconds(30),
};
并按如下方式开始接收消息:
_queueClient.RegisterSessionHandler(ProcessSessionMessagesAsync, _options);
在几次(1到6次之间)成功(几乎是瞬时的)消息接收回调之后——无论是对于新会话还是现有会话,接收处理程序都会停止触发。使用ServiceBusExplorer
,我可以看到位于servicebus队列上的消息。有趣的是,它们都有一个DeliveryCount=1。过了一段时间(这在几秒钟到几分钟之间变化——但不是MessageWaitTimeout的倍数),我又开始接收消息了。如果我重新启动接收器,那么我有时会收到所有剩余消息的突发,有时不会更多。
我尝试了MessageWaitTimeout
的各种值,虽然较低的值似乎可以减少问题,但延迟仍然存在。
有趣的是,如果我在收到每条消息后完成会话,问题仍然存在。
有没有人经历过这样的事情?这种行为是如此的不一致。。。
FWIW,我的messageReceivedHander
看起来像这样:
async Task ProcessSessionMessagesAsync(IMessageSession session, Message message, CancellationToken token)
{
try
{
var myEvent = Serializer.Deserialize(message.Body);
await _receiveCallback(Subscription, myEvent);
await session.CompleteAsync(message.SystemProperties.LockToken);
// Drop the session after every message (**makes no difference**)
await session.CloseAsync();
}
catch (Exception ex)
{
await session.AbandonAsync(message.SystemProperties.LockToken);
}
}
只是一些建议:
>
等待会话。CloseAsync()
由于您刚刚注册了一个处理程序,因此请使您的应用程序处于活动状态,以确保所有任务都将完成。例如:您可以在控制台之后结束应用程序。Readline()。
我使用QueueClient运行官方示例:BasicSessionSendReceiveUsingQueueClient,它工作正常。你可以试一试。
事实上我是个白痴。
_receiveCallback()实际上是对外部服务(请求宾)的调用,它在负载下限制了我的消息,并导致了我正在经历的行为。当我把它掐灭时,我看到了一致的(快速的)行为。
因此,我使用Spring integration链接JMS和ActiveMQ,如下所示:- 如何使其工作,以便发送到此队列并从中接收消息?请帮忙。
我们最近将应用程序从 Weblogic 迁移到了 JBOSS Fuse。作为此迁移的一部分,我们还必须将 JMS 实现更改为 Active MQ。由于某些约束,将请求发送到旧 Weblogic JMS 队列的客户端将无法进行更改以将请求发送到新的活动 MQ。有没有办法保持客户端不变(仅更改主机和端口以指向新服务器)并接收发送到Weblogic JMS队列的消息(当然没有weblogic服务器)并将
我已经建立了AWS架构体系,以便每次对发电机数据库条目的更新都以启用重复数据删除的SQS先进先出队列结束。我还有一个测试来覆盖这个场景,在那里我清除了队列(队列可以从套装中的其他测试中获得更新。为了避免在收到正确的消息之前必须轮询大量的消息,我在运行测试之前清除队列),更新Dynamo Db,并在轮询队列时检查这些条目是否收到。这个测试是不稳定的,有时会失败,因为我发送的所有更新都没有从队列中收到
本文向大家介绍RabbitMQ 怎么实现延迟消息队列?相关面试题,主要包含被问及RabbitMQ 怎么实现延迟消息队列?时的应答技巧和注意事项,需要的朋友参考一下 延迟队列的实现有两种方式: 通过消息过期后进入死信交换器,再由交换器转发到延迟消费队列,实现延迟功能; 使用 RabbitMQ-delayed-message-exchange 插件实现延迟功能。
我目前正努力在nServiceBus托管的应用程序上启动并运行一些东西。我有一个第三方正在向其发布消息的azure ServiceBus队列,我希望我的应用程序(目前在本地托管)接收这些消息。 我在谷歌上搜索了如何配置endpoint的答案,但我在有效的配置中没有运气。有人这样做过吗,因为我可以找到如何连接到Azure存储队列但不是服务总线队列的示例。(由于其他原因,我需要Azure servic