首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Spring向侦听器发送延迟消息

使用Spring向侦听器发送延迟消息
EN

Stack Overflow用户
提问于 2016-11-16 14:36:19
回答 2查看 4.3K关注 0票数 3

我有一个要求,在一定的持续时间后发送消息到MessageListener,所以有任何方法来实现使用Spring。

例如。生产者产生消息并将消息发送到RabbitMQ q,消息接收侦听器立即收听该q,我想延迟在客户端接收该消息,比如在某些配置参数(例如1000 to )之后。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-16 14:54:44

RabbitMQ为此提供了延迟交换特性。

从版本1.6开始,Spring还提供了一个高层API:Reference.html#延迟-消息交换

代码语言:javascript
运行
复制
<rabbit:topic-exchange name="topic" delayed="true" />
代码语言:javascript
运行
复制
MessageProperties properties = new MessageProperties();
properties.setDelay(15000);
template.send(exchange, routingKey,
        MessageBuilder.withBody("foo".getBytes()).andProperties(properties).build());

更新

在Spring 1.6之前,您应该这样做:

代码语言:javascript
运行
复制
@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中的调度/延迟消息传递

票数 6
EN

Stack Overflow用户

发布于 2019-05-09 01:47:12

如果您使用spring引导,它可以如下所示:

代码语言:javascript
运行
复制
@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);
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40634830

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档