Java SpringJMS-计时器上的排水主题

Java SpringJMS-计时器上的排水主题,java,spring,jms,activemq,Java,Spring,Jms,Activemq,我对SpringJMS相当陌生,我在Spring站点和其他地方找到了很多文档和示例,但是我的用例似乎没有在任何地方被描述,或者至少没有以我能理解的方式被描述。我希望你能帮忙 我想创建一个主题的发布者和该主题的几个持久订阅者。我现在正在处理第一个订阅者,它的目的是每小时运行一次计时器,排出消息的主题并一次处理所有消息,即发送一封总结所有消息的电子邮件 我不知道如何在Spring中配置这个设置,尽管我觉得这应该很容易。建议将非常有用 我的计划是让计时器调用processBatch方法,该方法将在循环

我对SpringJMS相当陌生,我在Spring站点和其他地方找到了很多文档和示例,但是我的用例似乎没有在任何地方被描述,或者至少没有以我能理解的方式被描述。我希望你能帮忙

我想创建一个主题的发布者和该主题的几个持久订阅者。我现在正在处理第一个订阅者,它的目的是每小时运行一次计时器,排出消息的主题并一次处理所有消息,即发送一封总结所有消息的电子邮件

我不知道如何在Spring中配置这个设置,尽管我觉得这应该很容易。建议将非常有用

我的计划是让计时器调用processBatch方法,该方法将在循环中调用receiveAndConvert,直到超时,从而建立其消息列表

不过,这似乎不起作用,因为消费者并没有真正订阅该主题。当然不是在运行之前,也可能不是之后

我如何使用Spring和/或direct ActiveMQ配置它

我不确定我的XML是从哪里开始讨论的,但如果有帮助,我会提供它:

<beans>
    <!-- some unrelated beans -->

    <!-- my Active MQ connection factory -->
    <bean id="mqConnectionFactory" class="org.apache.activemq.pool.PooledConnectionFactory" destroy-method="stop">
        <property name="connectionFactory">
            <bean class="org.apache.activemq.ActiveMQConnectionFactory">
                <property name="brokerURL" value="vm://broker"/>
            </bean>
        </property>
    </bean>

    <!-- my topic -->
    <amq:topic id="completionsTopic" physicalName="completions.topic"/>

    <!-- my subscriber -->
    <bean id="emailer" class="com.j128.Emailer">
        <property name="jmsTemplate">
            <bean class="org.springframework.jms.core.JmsTemplate">
                <property name="connectionFactory" ref="mqConnectionFactory"/>
                <property name="defaultDestination" ref="completionsTopic"/>
                <property name="receiveTimeout" value="2000"/>
            </bean>
        </property>
    </bean>

    <!-- my scheduler and periodic call to the topic drainer -->
    <task:scheduler id="taskScheduler" pool-size="10"/>
    <task:scheduled-tasks>
        <!-- send emails hourly -->
        <task:scheduled ref="emailer" method="processBatch" cron="0 * * * *"/>
    </task:scheduled-tasks>

</beans>
但是我确信我基本上有错误的策略,并且有一个简单的方法来配置它

感谢您的帮助。

请查看:只有在代理收到邮件时拥有活动订阅的订户才能获得邮件副本

对于持久主题:但是持久主题是不同的,因为它们必须在逻辑上为每个持久使用者持久保存每个合适消息的实例,因为每个持久使用者都有自己的消息副本

因此,对于非持久性主题,您的计划将无法工作,因为每小时作业不会收到任何消息,因为消息发布时它不会运行。如果您设置了一个持久主题,那么它可能会起作用,但这取决于当您说您的订阅者将耗尽消息的主题时您预期会发生什么。它所能做的就是读取自上次运行以来发布到它的消息,它不会影响发送给其他订阅者的消息

有关持久订户的讨论,我没有在ActiveMQ上使用它们,请参见查看:只有在代理接收消息时拥有活动订户的订户才能获得消息的副本

对于持久主题:但是持久主题是不同的,因为它们必须在逻辑上为每个持久使用者持久保存每个合适消息的实例,因为每个持久使用者都有自己的消息副本

因此,对于非持久性主题,您的计划将无法工作,因为每小时作业不会收到任何消息,因为消息发布时它不会运行。如果您设置了一个持久主题,那么它可能会起作用,但这取决于当您说您的订阅者将耗尽消息的主题时您预期会发生什么。它所能做的就是读取自上次运行以来发布到它的消息,它不会影响发送给其他订阅者的消息

有关持久订阅者的讨论,我没有在ActiveMQ上使用它们,请参阅