我正在使用activemq发送消息。由于发送的消息数量和应用程序发送的其他工作量。我启用了异步发送。
当应用程序结束时,我希望确保剩余的消息实际上已发送,因为我们有时会错过连接上的最后一条消息。
在谷歌上面搜索我发现只有警告声明你可能会遗漏一些信息,这是可以接受的,但是我们在大约40%的时间内错过了最后一些信息。我希望改善这种情况。问:是否有任何方法可以检查activemq生产者/发送者是否发送了所有异步消息?
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory( brokerUrl );
connectionFactory.setUseAsyncSend( true );
RedeliveryPolicy policy = connectionFactory.getRedeliveryPolicy();
policy.setInitialRedeliveryDelay( 500 );
policy.setBackOffMultiplier((short)2);
policy.setUseExponentialBackOff(true);
policy.setMaximumRedeliveries(10);
答案 0 :(得分:1)
您可以将最后一条消息的异步发送模式设置为关闭,这会导致客户端等待发送,直到代理确认已收到消息。需要将Connection对象强制转换为ActiveMQConnection,然后调用setUseAsyncSend(false)