Java 如何拒绝邮件

Java 如何拒绝邮件,java,jms,activemq,message-queue,worker,Java,Jms,Activemq,Message Queue,Worker,我正在使用ActiveMQ实现一个客户机/工作者系统,我想实现一个手动消息确认和消息拒绝 为什么拒绝邮件?如果一个工作者有太多的任务要处理,我希望该工作者告诉代理对原始消息重新排队 我知道有一些方法可以自动确认或实现事务,但我更希望有这样的方法: 消息需要在5秒内确认 如果它们未被确认,代理将向另一个工作者发送消息 Works可以随时手动拒绝邮件 如何实现这一点(无需手动将消息重新发送给代理) 更新: 将问题的措辞稍作修改: 如何确保将未确认的邮件重新添加回队列(并且重新传递可以返回到之前未确认

我正在使用ActiveMQ实现一个客户机/工作者系统,我想实现一个手动消息确认和消息拒绝

为什么拒绝邮件?如果一个工作者有太多的任务要处理,我希望该工作者告诉代理对原始消息重新排队

我知道有一些方法可以自动确认或实现事务,但我更希望有这样的方法:

  • 消息需要在5秒内确认
  • 如果它们未被确认,代理将向另一个工作者发送消息
  • Works可以随时手动拒绝邮件
  • 如何实现这一点(无需手动将消息重新发送给代理)

    更新:

    将问题的措辞稍作修改:
    如何确保将未确认的邮件重新添加回队列(并且重新传递可以返回到之前未确认的同一个消费者--假设消费者脱机后又返回) 如果消费者收到消息,但之前未确认 关闭后,消息将重新发送给另一个消费者

    这就是你想要的,对吗?因此,您必须关闭自动确认模式,并使用另一种模式:客户端确认或可能更具选择性的个人确认

    拒绝邮件(尚未)是不可能的,请参阅:

    没有JMS“未确认”


    如果有一个像“message.reject()”这样的方法可以自动处理这一切,那就太完美了!“关闭”是指在Listener类中调用close函数吗?如果是,哪一个?这里还有时间方面的问题。也就是说,如果一条消息在发送后5秒内未被确认,则假定该消息未被发送?通过“关闭”,他们的意思是“关闭消费者”。这是员工说“我现在不能处理邮件,我太忙了”的一种方式。精确到5秒是很困难的,但是你可以尝试一下“maxInactivityDuration”。我想,这就是你想要的。请参阅此处的进一步讨论:这实际上不起作用。我将会话切换到INDIVIDUAL_ACKNOWLEDGE,并且每当我可以接受数据时,都会调用map.ACKNOWLEDGE()。当我不能接受数据时,我会向使用者发出一个停止命令(我还尝试了连接对象)。发生的情况是工作进程确实停止接收消息,但是ActiveMQ也清空了它的队列,因此消息永远不会被传递!我确实希望ActiveMQ重新传递消息,即使在某一点上,连接在没有确认的情况下关闭