2016-11-03 6 views
1

Моего вопрос очень похож на Spring JMS(ActiveMQ) delayed delivery of messages, но скорее с пружинной загрузкой авто configurerActiveMQ задержки доставки сообщений в Спринге ботинке

Я пытаюсь использовать метод 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; 
} 

И мой П содержит только

<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

Вопрос: Можно ли настроить schedulerSupport в true с использованием конфигураций SpringBoot?

В случае это необходимо, вот мой 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, но она не работает

+0

Вы решили эту проблему? – Mikhail

+0

Я ответил на свой вопрос ниже (это второй). В конце я использовал другой стартер (артемида). –

ответ

0

Я не знаю, если это обман, но для меня решена проблема смены стартера от activemq до artemis (https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-artemis)

По-видимому, пружина настраивает по умолчанию Artemis на интерфейс JMS 2.0. Таким образом, у вас есть доступ к методу setDeliveryDelay.

1

Шаблон пытается вызвать методы задержки доставки JMS 2.0, но клиент и брокер ActiveMQ поддерживают только JMS 1.1, поэтому вы получите эту ошибку. Вы можете использовать поддержку ActiveMQ для запланированной доставки, установив свойства сообщения в сообщении, используя значения, указанные here.

Это не совсем понятно, как включить планировщик из Спринг загрузки, но я думаю, что вы должны предоставить свой собственный брокер URI, который позволяет ему, что-то вроде:

broker:(tcp://localhost:61616)?persistent=true&useJmx=false&schedulerSupport=true 
+0

Спасибо за идею. Я обновил MessageConverter, чтобы использовать свойство Activemq, но он по-прежнему не расписался. Он поставляет немедленно. Я обновил вопрос с помощью кода –

+0

Убедитесь, что у вас есть поддержка планировщика, включенная сторона брокера –

+0

. Это часть вопроса: как добавить поддержку планировщика в автоматическую настройку весны-загрузки. –

Смежные вопросы