2

以下は、スプリング ブートでの 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 リスナーが常にキューにヒットしたくありません。

4

2 に答える 2

3

ドキュメントで説明されているように、注釈付きの各メソッドの内部で作成されるリスナーは@JmsListener、レジストリに保持されます

リスナーを一時停止したい場合は、非常に簡単に検索して停止できます。次の Bean (JMX エンドポイント、セキュア レスト マッピングなど) を呼び出す方法があるとします。

static class YourService {

    private final JmsListenerEndpointRegistry registry;

    @Autowired
    public YourService(JmsListenerEndpointRegistry registry) {
        this.registry = registry;
    }

    public void stopListener() {
        this.registry.getListenerContainer("myListener").stop();
    }

    public void startListener() {
        this.registry.getListenerContainer("myListener").start();
    }

}

次に、上記の例のリスナー (myListener) に適切な ID を関連付ける必要があります。

@JmsListener(id = "myListener", destination = DATA_QUEUE)
public void consume(String message) throws InterruptedException { ... }
于 2016-01-12T09:45:31.743 に答える