每次使用一条来自ActiveMQ的消息

每次使用一条来自ActiveMQ的消息,activemq,Activemq,我想这样做: ActiveMQ向客户端发送消息 客户端在处理消息后向ActiveMQ发送确认 如果客户端已关闭,或未确认该消息,则该消息将保留在队列中。所有其他消息将不会被传递 服务器一次发送一条消息,客户端一次处理一条消息。除非第一条消息已被确认,否则不会传递下一条消息 有什么方法可以做到这一点吗?听起来你想要的是一个低限或零限与客户端Ack或单个Ack的组合。预回迁为零将使您的客户机本质上是一个基于拉的消费者,如果您的客户机在断开连接时未能确认已发送的消息,则将ack设置为client将导致

我想这样做:

  • ActiveMQ向客户端发送消息

  • 客户端在处理消息后向ActiveMQ发送确认

  • 如果客户端已关闭,或未确认该消息,则该消息将保留在队列中。所有其他消息将不会被传递

  • 服务器一次发送一条消息,客户端一次处理一条消息。除非第一条消息已被确认,否则不会传递下一条消息


  • 有什么方法可以做到这一点吗?

    听起来你想要的是一个低限或零限与客户端Ack或单个Ack的组合。预回迁为零将使您的客户机本质上是一个基于拉的消费者,如果您的客户机在断开连接时未能确认已发送的消息,则将ack设置为client将导致代理重新传递消息

    关于失败的缺点,activeMQ就是这样工作的

    如果“失败/错误确认”发生在业务逻辑层,那么您应该使用

    警告不是有效代码(pradigm)

    关于消息限制和持久性,以下目标策略配置将为您提供帮助

        <destinationPolicy>
            <policyMap>
              <policyEntries>
                <policyEntry topic=">" producerFlowControl="true" memoryLimit="10mb">
                  <pendingSubscriberPolicy>
                    <vmCursor />
                  </pendingSubscriberPolicy>
                </policyEntry>
                <policyEntry queue=">" producerFlowControl="true" memoryLimit="10mb">
                  <pendingQueuePolicy>
                    <vmQueueCursor/>
                  </pendingQueuePolicy>
                </policyEntry>
              </policyEntries>
            </policyMap>
        </destinationPolicy>
    
    
    
    我想我也会使用MySQL来实现这种持久性

        <persistenceAdapter>
            <jdbcPersistenceAdapter dataDirectory="${activemq.base}/data" dataSource="#mysql-ds"/>
        </persistenceAdapter>
    
    
    
    此外,我建议您根据自己的意愿配置

    试试下面的方法

    • 设置队列预取=0
    • 使用交易确认
    • 单线程消费者(concurrentConsumers=1/maxConcurrentConsumers=1,等等)
    • 设置DispatchAsync=false

    实际上,activeMQ就是这样工作的(一般来说),您测试过吗?在我们的例子中,它不是这样工作的。我们一次收到了所有的信息,而不是一条一条。我怀疑服务器配置可能不正确。我会做更多的测试,让你们知道。我从教程、书籍中学到了很好的总结,但我很难把这些东西组合起来。干得好。@Evalon您提到了相应的代码。我需要在哪个XML文件中保存它。@默认情况下,Hanumath是
    元素中的
    activemq.XML
        <persistenceAdapter>
            <jdbcPersistenceAdapter dataDirectory="${activemq.base}/data" dataSource="#mysql-ds"/>
        </persistenceAdapter>