我想知道这是否可行.我想从队列中提取任务,并且在将ack发送回RabbitMQ通知工作已完成之前,可能需要3秒或更长(可能)分钟的时间.工作由用户完成,因此这就是处理工作所需时间的原因.
我不想在弹出队列后立即确认消息,因为如果没有收到确认,我希望消息重新排队.任何人都可以给我任何有关如何解决我的问题的见解?
有一个很长的超时要细,当然,你说你要交还如果出现错误,所以你要只ACK 后完成.
实现这一目标的最佳方式是IMO,即队列中有多个消费者(即多个线程/进程从同一队列中消耗).只要队列内容没有特定的排序约束(即如果队列包含代表涉及FK约束的Postgres数据的内容,则可能存在这种情况),这应该没问题.
RabbitMQ网站上的这个教程提供了更多信息(Python链接,但应该有其他语言的类似教程):https://www.rabbitmq.com/tutorials/tutorial-two-python.html
编辑以回应OP的评论:
你的心跳是什么?如果您的工作人员在设定的时间段内未确认心跳,服务器将认为该连接已死亡.
不确定您使用的是哪种语言,但对于Java,您可以使用该setRequestedHeartbeat
方法指定心跳.
实现工作者的方式,心跳仍然可以发送回RabbitMQ服务器至关重要.如果某些东西阻止客户端发送心跳,服务器将在时间间隔到期后终止连接.