我的问题与Spring JMS(ActiveMQ)延迟传递消息非常相似,但更相关于spring-boot自动配置程序。
我正在尝试使用
我试图从http://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html找到正确的属性,但找不到代理调度器支持选项。
目前,我的application.properties文件为空,并且我的JmsListenerContainerFactory定义如下。
我正在尝试使用
jmsTemplate.setDeliveryDelay
方法,但它抛出一个java.lang.IllegalStateException: setDeliveryDelay requires JMS 2.0
异常。我试图从http://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html找到正确的属性,但找不到代理调度器支持选项。
目前,我的application.properties文件为空,并且我的JmsListenerContainerFactory定义如下。
@Bean
public JmsListenerContainerFactory<?> myFactory(ConnectionFactory connectionFactory,
DefaultJmsListenerContainerFactoryConfigurer configurer) {
DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
configurer.configure(factory, connectionFactory);
return factory;
}
我的pom文件只包含
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
使用1.4.1.RELEASE中的spring-boot-starter-parent。
问题是:是否可以使用SpringBoot配置将schedulerSupport设置为true?
如果需要,这是我的发送器(Sender):
public void send(String message) {
System.out.println("Im sending this message " + message);
jmsTemplate.setDeliveryDelay(5000);
jmsTemplate.convertAndSend(Beans.QUEUE_NAME, message);
}
和接收方
@JmsListener(destination = Beans.QUEUE_NAME, containerFactory = "myFactory")
public void receiveMessage(String message) {
System.out.println("Received this message <" + message + ">");
}
谢谢您的提前帮助。
更新:我尝试将其放入消息属性中,就像文档http://activemq.apache.org/delay-and-schedule-message-delivery.html所述,但它没有起作用。
@Bean
public MessageConverter messageConverter() {
MessageConverter converter = new MessageConverter(){
@Override
public Message toMessage(Object object, Session session) throws JMSException, MessageConversionException {
if (!(object instanceof MyPojo)) {
throw new MessageConversionException("not agreed Pojo!");
}
MyPojo pojo = (MyPojo) object;
Message message = session.createTextMessage(pojo.getMessage());
message.setLongProperty(ScheduledMessage.AMQ_SCHEDULED_DELAY, pojo.getScheduledWait());
return message;
}
@Override
public Object fromMessage(Message message) throws JMSException, MessageConversionException {
return message;
}
};
return converter;
}