首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring不会在延迟时间发送消息

Spring不会在延迟时间发送消息
EN

Stack Overflow用户
提问于 2022-11-13 12:54:05
回答 1查看 20关注 0票数 0

我试图用Spring在RabbitMQ上发送延迟消息。

我是这样定义MessageProperties的:

代码语言:javascript
复制
MessageProperties delayedMessageProperties = new MessageProperties();
delayedMessageProperties.setDelay(45000);

我定义了应该在延迟时间发送的信息,如下所示:

代码语言:javascript
复制
org.springframework.amqp.core.Message amqpDelayedMessage = org.springframework.amqp.core.MessageBuilder.withBody(objectMapper.writeValueAsString(reversalMessage).getBytes())
                   .andProperties(reversalMessageProperties).build();

然后,如果我用RabbitTemplate发送这条消息,就没有问题了。消息在定义的延迟时间内发送。

代码语言:javascript
复制
rabbitTemplate.convertSendAndReceiveAsType("delay-exchange",delayQueue, amqpDelayedMessage, new ParameterizedTypeReference<org.springframework.amqp.core.Message>() {
            });

但是我需要异步发送这条消息,因为我不需要阻止系统中的任何其他消息,并且要获得更高的性能,如果我使用asyncRabbitTemplate,消息将立即被传递。刻不容缓。

代码语言:javascript
复制
asyncRabbitTemplate.convertSendAndReceiveAsType("delay-exchange",delayQueue, amqpDelayedMessage, new ParameterizedTypeReference<org.springframework.amqp.core.Message>() {
            });

如何利用asnycRabbitTemplate获得延迟?

EN

回答 1

Stack Overflow用户

发布于 2022-11-14 14:36:40

这可能是一个错误;请在GitHub上打开一个问题。

convertSendAndReceive()方法不打算发送和接收原始Message对象。

RabbitTemplate的情况下,如果对象已经是Message,则跳过转换;在某些情况下,不使用异步模板执行这种跳过;请编辑该问题以显示模板配置。

但是,由于您是直接处理Message,所以根本不要使用convert...方法,只需使用

代码语言:javascript
复制
public RabbitMessageFuture sendAndReceive(String exchange, String routingKey, Message message) {
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74421156

复制
相关文章

相似问题

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