Java 如果目标不可用,ActiveMQ生产者将重新发送

Java 如果目标不可用,ActiveMQ生产者将重新发送,java,activemq,failover,Java,Activemq,Failover,我正在使用最新的带有持久性的ActiveMQ,并且我已经实现了生产者和消费者,它们按照预期工作。但是,当消费者从停机时间返回时,我无法让生产者重新发送消息。它仅在消费者备份后才开始发送消息 制作人 private void someInitFunction(){ connection = factory.createConnection(); connection.start(); session = connection.createSession(fals

我正在使用最新的带有持久性的ActiveMQ,并且我已经实现了生产者和消费者,它们按照预期工作。但是,当消费者从停机时间返回时,我无法让生产者重新发送消息。它仅在消费者备份后才开始发送消息

制作人

private void someInitFunction(){      
    connection = factory.createConnection();
    connection.start();
    session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);
    destination = session.createQueue(queueName);

    producer = session.createProducer(destination);
    producer.setDeliveryMode(DeliveryMode.PERSISTENT);
    }

private void onNewMessage(Serialized data){
    try{
        ObjectMessage message = createObjectMessage();
        message.setObject(data);
        producer.send(message);
       } catch(Exception e){ log.error("consumer not available");}
}
我想要实现的是让制作人重新发送在消费者情绪低落时无法传递的消息。举个例子:生产者发送消息1,2,消费者收到它们,但随后它就离线了。生产者在消费者脱机时发送3,4,并且应存储消息,直到消费者可用,并重新发送3,4以供消费者接收

我已使用
DeliveryMode读取并启用了持久队列。持久性
,但重新连接时不会重新发送消息


有什么想法吗?

要清楚:消费者不一定要有空——只有经纪人。一旦消费者上线,代理将自动传递消息。您需要手动(循环或任何适合您的应用程序的)处理重新发送(如果代理关闭)。现在一切都清楚了。我的设计中的问题是,代理和消费者在同一台机器上,生产者失去了连接,而应用程序由于各种原因无法访问。感谢@PetterTo提供的宝贵信息:消费者不必是可用的——只有经纪人。一旦消费者上线,代理将自动传递消息。您需要手动(循环或任何适合您的应用程序的)处理重新发送(如果代理关闭)。现在一切都清楚了。我的设计中的问题是,代理和消费者在同一台机器上,生产者失去了连接,而应用程序由于各种原因无法访问。感谢您对@Petter的宝贵意见