Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当没有订阅服务器时,使ActiveMQ上的消息过期_Java_Jms_Activemq_Spring Integration - Fatal编程技术网

Java 当没有订阅服务器时,使ActiveMQ上的消息过期

Java 当没有订阅服务器时,使ActiveMQ上的消息过期,java,jms,activemq,spring-integration,Java,Jms,Activemq,Spring Integration,将消息添加到没有订阅者的ActiveMQ代理中的队列时,队列将填满,最终生产者线程将挂起,无法发布更多消息 为了解决这个问题,我在消息上设置了一个到期日,认为这会释放内存,但不幸的是,这不起作用。有人知道我如何解决这个问题吗 我的代理ActiveMQ版本为5.7,代理定义为: <bean id="mqBroker" class="org.apache.activemq.broker.BrokerService" init-method="start" destroy-method="sto

将消息添加到没有订阅者的ActiveMQ代理中的队列时,队列将填满,最终生产者线程将挂起,无法发布更多消息

为了解决这个问题,我在消息上设置了一个到期日,认为这会释放内存,但不幸的是,这不起作用。有人知道我如何解决这个问题吗

我的代理ActiveMQ版本为5.7,代理定义为:

<bean id="mqBroker" class="org.apache.activemq.broker.BrokerService" init-method="start" destroy-method="stop">
    <property name="brokerName" value = "mainBroker"/>
    <property name="persistent" value="false"/>
    <property name="useJmx" value="false"/>
    <property name="transportConnectorURIs">
        <list>
            <value>tcp://localhost:7000</value>
        </list>
    </property>
</bean>

tcp://localhost:7000
当JConsole无法向代理发布更多消息时,查看JConsole,内存使用情况看起来很好(使用率为0%),过期计数=已发布计数

我用来发布消息的代码与spring集成在一起:

<jms:outbound-channel-adapter
    channel="jsonChannel"
    connection-factory="jmsConnectionFactory"
    pub-sub-domain="false"
    destination-name="MY_QUEUE"
    time-to-live="60000"
    wxplicit-qos-enabled="true" />

你知道吗

  • 使用
    message.setjmsexprivation(…)用于您的
    javax.jms.Message
  • 设置“生存时间”属性(该属性专为主题发布而设计,但在特殊情况下也可用于队列)

?

代理会定期扫描队列以丢弃过期消息。问题是过期消息发生了什么变化。考虑到您所拥有的配置,它们可能最终会出现在DLQ中,因此您可能希望研究如何配置丢弃策略,以不将过期消息添加到DLQ中。请参阅有关此问题的ActiveMQ。

我已将生存时间设置为60秒-请参阅上面的代码编辑。另外,可能值得注意的是,当消息成功生成时,队列上的ExpiredCount属性在到期时间(60秒)后以JConsole增量表示每条消息