rabbitmq 的同步发布

Synchronous publish for rabbitmq

我想要两套API供客户端发布消息

有没有什么方法可以使用 rabbitTemplate 实现同步发布 API,这将阻止确认和 return 两者?

rabbiTemplate.waitForConfirmsOrDie(mills) 块进行确认,但我希望调用者知道路由是否也成功或抛出异常。

RabbitOeprations 中查看此 API:

/**
 * Send a message to a specific exchange with a specific routing key.
 *
 * @param exchange the name of the exchange
 * @param routingKey the routing key
 * @param message a message to send
 * @param correlationData data to correlate publisher confirms.
 * @throws AmqpException if there is a problem
 */
void send(String exchange, String routingKey, Message message, CorrelationData correlationData)

return or confirm 设置在最后提供的CorrelationData。你必须等待它 getFuture() 然后 return 给调用者你做出的决定反对 Confirm 的原因。在 CorrelationData JavaDocs 及其实现中查看更多信息。另请参阅有关此事的一些文档:https://docs.spring.io/spring-amqp/docs/current/reference/html/#template-confirms

我正在使用以下内容:

rabbitTemplate.convertAndSend(exchange, key, obj, correlationData);
SettableListenableFuture<CorrelationData.Confirm> future = correlationData.getFuture();
CorrelationData.Confirm confirm = future.get();

然后用同样的方法检查。

if(!confirm .isAck() || correlationData.getReturnedMessage() != null){
    //  throw exception
}