我试图用Spring在RabbitMQ上发送延迟消息。
我是这样定义MessageProperties的:
MessageProperties delayedMessageProperties = new MessageProperties();
delayedMessageProperties.setDelay(45000);我定义了应该在延迟时间发送的信息,如下所示:
org.springframework.amqp.core.Message amqpDelayedMessage = org.springframework.amqp.core.MessageBuilder.withBody(objectMapper.writeValueAsString(reversalMessage).getBytes())
.andProperties(reversalMessageProperties).build();然后,如果我用RabbitTemplate发送这条消息,就没有问题了。消息在定义的延迟时间内发送。
rabbitTemplate.convertSendAndReceiveAsType("delay-exchange",delayQueue, amqpDelayedMessage, new ParameterizedTypeReference<org.springframework.amqp.core.Message>() {
});但是我需要异步发送这条消息,因为我不需要阻止系统中的任何其他消息,并且要获得更高的性能,如果我使用asyncRabbitTemplate,消息将立即被传递。刻不容缓。
asyncRabbitTemplate.convertSendAndReceiveAsType("delay-exchange",delayQueue, amqpDelayedMessage, new ParameterizedTypeReference<org.springframework.amqp.core.Message>() {
});如何利用asnycRabbitTemplate获得延迟?
发布于 2022-11-14 14:36:40
这可能是一个错误;请在GitHub上打开一个问题。
convertSendAndReceive()方法不打算发送和接收原始Message对象。
在RabbitTemplate的情况下,如果对象已经是Message,则跳过转换;在某些情况下,不使用异步模板执行这种跳过;请编辑该问题以显示模板配置。
但是,由于您是直接处理Message,所以根本不要使用convert...方法,只需使用
public RabbitMessageFuture sendAndReceive(String exchange, String routingKey, Message message) {https://stackoverflow.com/questions/74421156
复制相似问题