2016-11-16 21 views
2

私は、一定期間の後にMessageListenerにメッセージを送信する必要があります。したがって、Spring AMQPを使用して達成する方法はありますか。Spring AMQPを使用してリスナーに送信する遅延メッセージ

例: プロデューサーがメッセージを生成し、メッセージがRabbitMQに送られます。Qメッセージが受信されます。リスナーは、すぐにそのQを聞いて、何らかの設定パラメータの後に消費者側で受け取るメッセージを遅らせたいとします。

答えて

3

RabbitMQはこの目的のDelayed Exchange機能です。 http://docs.spring.io/spring-amqp/reference/html/_reference.html#delayed-message-exchange:あなたが好きすべき春AMQP 1.6

<rabbit:topic-exchange name="topic" delayed="true" /> 

MessageProperties properties = new MessageProperties(); 
properties.setDelay(15000); 
template.send(exchange, routingKey, 
     MessageBuilder.withBody("foo".getBytes()).andProperties(properties).build()); 

UPDATE

をバージョン1.6春AMQPも問題にハイレベルのAPIを提供して以降では

これは:

@Bean 
CustomExchange delayExchange() { 
    Map<String, Object> args = new HashMap<String, Object>(); 
    args.put("x-delayed-type", "direct"); 
    return new CustomExchange("my-exchange", "x-delayed-message", true, false, args); 
} 

... 

MessageProperties properties = new MessageProperties(); 
properties.setHeader("x-delay", 15000); 
template.send(exchange, routingKey, 
     MessageBuilder.withBody("foo".getBytes()).andProperties(properties).build()); 

この質問とその回答もご覧ください:Scheduled/Delay messaging in Spring AMQP RabbitMq

+0

これは1.4バージョンで利用できますか? – Akshat

+1

質問は何ですか?私は言った:1.6以来。あなたはそのような古いEOLバージョンに固執する理由を説明できますか? –

+0

私たちは間違いなく最新のバージョンにアップグレードする予定ですが、いつか(2ヶ月)、別の製品展開戦略があるので、この機能を開発していて、amqp 1.4.3を持っているのでこの問題に戻ります私達がこのバージョンで達成できる方法であれば、私たちは製品のアップグレードを待つ必要があります – Akshat

関連する問題