首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RabbitMQ -确保每条消息都有一个线程

RabbitMQ -确保每条消息都有一个线程
EN

Stack Overflow用户
提问于 2017-01-02 09:37:14
回答 1查看 374关注 0票数 0

我有一个程序,它使用NServiceBus作为排队消息机制。我在日志中看到,有时一个消息被处理两次,由不同的线程处理,尽管这些消息只发送一次。

更重要的是,如果我强制我的服务只使用一个线程,我就没有这个问题。

如何确保只处理一次消息?

谢谢。

简短的日志示例(您可以看到我使用chunkId 48获得消息,我完成了所有处理,包括删除回调,然后再次使用chunkId 48获得相同的消息,此时im无法找到回调。然后是一个NserviceBus异常):

Risco.Rsp.RACServiceImpl.RACOutputMessageHandler (null) <(null)> - ProcessId:44eb600b-87e6-4eab-a54e-0a12480c9784类型的RACOutputMessageHandler.Handle start :GetClientCacheEntity和ChunkId: 48和TotalChunks: 57,主题: 23b041a3-4a62-48d1-a199-20a20e5de72a .……..。Risco.Rsp.RACServiceImpl.RACOutputMessageHandler (null) <(null)> -进程id的成功发送结果:44eb600b-87e6-4eab-a54e-0a12480c9784,进程类型:GetClientCacheEntity,客户端44eb600b-87e6-4eab-a54e-0a12480c9784 (0块) 2017-01-02 11:13:13,882 64 INFO Risco.Rsp.RACServiceImpl.RACOutputMessageHandler (null) < (null) > - RACOutputMessageHandler.Handle start for ProcessType:GetClientCacheEntity with ProcessId:44eb600b-87e6-4eab-a54e-0a12480c9784和ChunkId: 48和TotalChunks: 57,主题:23b041a3-4a62-48d1-A199-20a20ede72a 2017-01-02 11:13:13:13 888 64 INFO Risco.Rsp.RACServiceImpl.RACOutputMessageHandler (Null) <(null)> -句柄(RACOutputMessage)-无法找到键44eb600b-87e6-4 4eab a54e-0a12480c9784的回调,进程id:44eb600b-87e6-4eab-a54e-0a12480c9784 (进程类型:GetClientCacheEntity2017-01-02 11:13:13,923 158错误NServiceBus.Timeout.TimeoutManagerDeferrer (null) <(null)> --延迟消息有问题。确保没有为您的端点调用DisableTimeoutManager。接收方的NServiceBus.Unicast.Queuing.QueueNotFoundException: exchange不存在-> RabbitMQ.Client.Exceptions.AlreadyClosedException:已关闭: AMQP操作被中断: AMQP关闭原因,由Peer、code=404、text="NOT_FOUND -在vhost‘AxesPlus’中没有交换'Risco.Rsp.Ac.AMAC.Service.Timeouts‘“、classId=60、methodId=40、cause=在RabbitMQ.Client.Impl.ModelBase.WaitForConfirms(TimeSpan超时时发起,( RabbitMQ.Client.Impl.ModelBase.WaitForConfirmsOrDie(TimeSpan超时值) NServiceBus.Transports.RabbitMQ.ConfirmsAwareChannel.Dispose() in c:\BuildAgent\work\ef98ad7376e3379a\src\NServiceBus.RabbitMQ\ConfirmsAwareChannel.cs:line 31 --内部异常堆栈跟踪的末端-- c:\BuildAgent\work\ef98ad7376e3379a\src\NServiceBus.RabbitMQ\ConfirmsAwareChannel.cs:line 47中的NServiceBus.Transports.RabbitMQ.ConfirmsAwareChannel.Dispose()在NServiceBus.Transports.RabbitMQ.RabbitMqMessageSender.Send(TransportMessage消息中,在c:\BuildAgent\work\ef98ad7376e3379a\src\NServiceBus.RabbitMQ\RabbitMqMessageSender.cs:line 27 at NServiceBus.Timeout.TimeoutManagerDeferrer.Defer(TransportMessage message,SendOptions sendOptions)在C:\BuildAgent\work\3206e2123f54fce4\src\NServiceBus.Core\Timeout\Core\TimeoutManagerDeferrer.cs:line 42 2017-01-02 11:13:13,936 174错误NServiceBus.Timeout.TimeoutManagerDeferrer (null) <(null)>中,出现了延迟消息的问题。确保没有为您的端点调用DisableTimeoutManager。接收方的NServiceBus.Unicast.Queuing.QueueNotFoundException: exchange不存在-> RabbitMQ.Client.Exceptions.AlreadyClosedException:已关闭: AMQP操作被中断: AMQP关闭原因,由Peer、code=404、text="NOT_FOUND -在vhost‘AxesPlus’中没有交换'Risco.Rsp.Ac.AMAC.Service.Timeouts‘“、classId=60、methodId=40、cause=在RabbitMQ.Client.Impl.ModelBase.WaitForConfirms(TimeSpan超时时发起,( RabbitMQ.Client.Impl.ModelBase.WaitForConfirmsOrDie(TimeSpan超时值) NServiceBus.Transports.RabbitMQ.ConfirmsAwareChannel.Dispose() in c:\BuildAgent\work\ef98ad7376e3379a\src\NServiceBus.RabbitMQ\ConfirmsAwareChannel.cs:line 31 --内部异常堆栈跟踪的末端-- c:\BuildAgent\work\ef98ad7376e3379a\src\NServiceBus.RabbitMQ\ConfirmsAwareChannel.cs:line 47中的NServiceBus.Transports.RabbitMQ.ConfirmsAwareChannel.Dispose()在NServiceBus.Transports.RabbitMQ.RabbitMqMessageSender.Send(TransportMessage消息中,c:\BuildAgent\work\ef98ad7376e3379a\src\NServiceBus.RabbitMQ\RabbitMqMessageSender.cs:line 27 at NServiceBus.Timeout.TimeoutManagerDeferrer.Defer(TransportMessage message,SendOptions SendOptions ( C:\BuildAgent\work\3206e2123f54fce4\src\NServiceBus.Core\Timeout\Core\TimeoutManagerDeferrer.cs:line 42 )中的sendOptions sendOptions)

EN

回答 1

Stack Overflow用户

发布于 2017-01-02 15:56:39

问题是超时配置。MessageHandler没有足够快地处理消息并离开处理程序,因此我通过创建一个新任务来“替换”处理程序(意思是,在处理程序开始时调用替换原始处理程序的函数)来修复它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41424297

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档