gpt4 book ai didi

java - ActiveMQ 在 Spring Boot 中延迟传递消息

转载 作者:行者123 更新时间:2023-11-30 08:31:55 26 4
gpt4 key购买 nike

我的问题真的很像Spring JMS(ActiveMQ) delayed delivery of messages但与 spring-boot 自动配置器更相关

我正在尝试使用 jmsTemplate.setDeliveryDelay 方法,但它抛出一个 java.lang.IllegalStateException: setDeliveryDelay requires JMS 2.0

我试图从 http://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html 中找到合适的属性但找不到代理 schedulerSupport 选项。

目前我的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?

如果需要,这是我的发件人

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;
}

最佳答案

该模板正在尝试调用 JMS 2.0 传递延迟方法,但 ActiveMQ 客户端和代理仅支持 JMS 1.1,因此您将收到此错误。您可以通过使用定义的值设置消息中的消息属性来使用 ActiveMQ 对计划交付的支持 here .

目前还不完全清楚如何从 Spring boot 启用调度程序,但我的猜测是您需要提供自己的 Broker URI 来启用它,例如:

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

关于java - ActiveMQ 在 Spring Boot 中延迟传递消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40411398/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com