我对 Spring JMS 还很陌生,我在 Spring 站点和其他地方找到了很多文档和示例,但我的用例似乎没有在任何地方描述,或者至少以我能理解的方式描述。我希望你能提供帮助。
我想创建一个主题的发布者和该主题的几个持久订阅者。我现在正在处理第一个订阅者,它打算每小时运行一次(在计时器上)并耗尽消息的主题并一次处理它们(即发送一封总结所有消息的电子邮件)。
我不知道如何在 Spring 中配置此设置,尽管我觉得这应该很容易。建议将非常有帮助。
我的计划是让计时器调用“processBatch”方法,该方法将在循环中调用receiveAndConvert(),直到超时,建立它的消息列表。
但是,这似乎不起作用,因为消费者并没有真正订阅该主题。当然不是在它运行之前,也可能不是之后。
如何使用 Spring 和/或直接 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>
但我确定我从根本上采取了错误的策略,并且有一种简单的方法来配置它。
谢谢您的帮助。