如何在我的spring boot应用程序中暂停@JmsListener?

如何在我的spring boot应用程序中暂停@JmsListener?,spring,spring-boot,spring-jms,jmstemplate,Spring,Spring Boot,Spring Jms,Jmstemplate,下面是我在spring boot中的Hornetq配置 spring.hornetq.mode=embedded spring.hornetq.embedded.enabled=true spring.hornetq.embedded.persistent=true spring.hornetq.port=5445 spring.hornetq.embedded.queues=jms.testqueue 这是我的制片人 public class Producer {@Inject pri

下面是我在spring boot中的Hornetq配置

spring.hornetq.mode=embedded 
spring.hornetq.embedded.enabled=true
spring.hornetq.embedded.persistent=true 
spring.hornetq.port=5445 
spring.hornetq.embedded.queues=jms.testqueue
这是我的制片人

public class Producer {@Inject
private JmsTemplate jmsTemplate;
public void resolveError( String message) {  
   try{
        jmsTemplate.convertAndSend(DATA_QUEUE, message);
        }catch(Exception e){
        //log error
        }    
}}
这是我的消费者

 @JmsListener(destination = DATA_QUEUE)
public void consume(String message) throws InterruptedException {
    log.info("Receiving  event: {}", message);
    try {
       //do stuff with message
    }catch (Exception e){
        log.error(e.toString());
    }
}
这是我的配置文件

@Configuration@EnableJms public class JmsConfig {
public static final String LOGGING_SCRAPPER_KEY ="DATA_SYNC_ERROR";
public static final String DATA_QUEUE = "jms.testqueue"; }

我想减缓@JMSlistener的使用过程,我不想让JMS侦听器一直排队,谢谢你的帮助

在每个
@JmsListener
注释方法的封面下创建的侦听器保存在注册表中

如果你想暂停你的听众,很容易找到它并阻止它。让我们假设您有一种方法来调用以下bean(JMX端点、安全rest映射,等等):

然后,在上面的示例中,您需要将适当的id与您的侦听器(myListener)关联起来

@JmsListener(id = "myListener", destination = DATA_QUEUE)
public void consume(String message) throws InterruptedException { ... }

我无法设置JmsListener的使用时间,但我找到了另一种方法,可以在jmsTemplate上设置传递延迟时间限制,使用jmsTemplate setDeliveryDelay,这将延迟将其发送到队列。无论哪种方式,只有当您延迟JMS侦听器的使用过程时,消息才会延迟。在我的方法中,消息将在队列中。在延迟交付时间之前,消息不会在队列中。

您到底想要什么?我想减慢@JMSlistener的消耗过程,这是什么意思?如果JMSlistener每秒消耗一次,我希望侦听器每5个扇区消耗一次,然后配置它。。。请参见如何配置JMS。只需将接收超时设置为所需的值。谢谢,Deinum set timeout在我的场景中对我不起作用,但我可以使用jmsTemplate.SetDeliveryDelays我需要在我的JMSconfig文件中配置JmsListenerEndpointRegistry吗?我如何给我的监听器命名?如果给定id=“myListener”将向JMSendPointRegistry注册我的JMSlister,对吗?有没有办法做到这一点,如果JMSlister每秒使用一次,我希望监听器每5秒使用一次我应该如何使用构造函数初始化“注册表”,从何处获取要传递给构造函数的JMSLIEnterendPointRegistry对象,请提供帮助
@JmsListener(id = "myListener", destination = DATA_QUEUE)
public void consume(String message) throws InterruptedException { ... }