【问题标题】:ActiveMQ Async sending waiting on all message to be sentActiveMQ 异步发送等待所有消息发送
【发布时间】:2012-12-23 09:49:10
【问题描述】:

我正在使用 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);

【问题讨论】:

    标签: asynchronous activemq


    【解决方案1】:

    您可以将最后一条消息的异步发送模式设置回关闭,这将导致客户端等待发送,直到代理确认已收到消息。 Connection 对象需要转换为 ActiveMQConnection 然后你可以调用 setUseAsyncSend(false)

    【讨论】:

    • 这听起来像是一个绝妙的计划。在我使用它的情况下,我使用 ActiveMQSession 做了一些不同的事情。 ((ActiveMQSession)session).setAsyncDispatch( false ); ((ActiveMQSession)session).setSessionAsyncDispatch( false );
    • “异步发送”和“异步调度”到底有什么区别?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多