我有一个要求,在一定的持续时间后发送消息到MessageListener,所以有任何方法来实现使用Spring。
例如。生产者产生消息并将消息发送到RabbitMQ q,消息接收侦听器立即收听该q,我想延迟在客户端接收该消息,比如在某些配置参数(例如1000 to )之后。
发布于 2016-11-16 14:54:44
RabbitMQ为此提供了延迟交换特性。
从版本1.6开始,Spring还提供了一个高层API:Reference.html#延迟-消息交换
<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());
更新
在Spring 1.6
之前,您应该这样做:
@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());
请参见这个问题及其答案:Spring中的调度/延迟消息传递
发布于 2019-05-09 01:47:12
如果您使用spring引导,它可以如下所示:
@Bean
Queue queue() {
return QueueBuilder.durable(queueName)
.withArgument("x-dead-letter-exchange", dlx)
.withArgument("x-dead-letter-routing-key", dlq)
.build();
}
@Bean
TopicExchange exchange() {
return (TopicExchange) ExchangeBuilder.topicExchange(topicExchangeName)
.delayed()
.build();
@Bean
Binding binding() {
return BindingBuilder.bind(queue()).to(exchange()).with(queueName);
}
https://stackoverflow.com/questions/40634830
复制相似问题