rabbitmq 的同步发布
Synchronous publish for rabbitmq
我想要两套API供客户端发布消息
- sync send(不重试,立即失败并同步发送状态给客户端)
- 异步发送(发布者和确认回调,重试,在某些重试后记录并删除消息)。我可以通过启用确认和 return.
来实现这一点
有没有什么方法可以使用 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
}
我想要两套API供客户端发布消息
- sync send(不重试,立即失败并同步发送状态给客户端)
- 异步发送(发布者和确认回调,重试,在某些重试后记录并删除消息)。我可以通过启用确认和 return. 来实现这一点
有没有什么方法可以使用 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
}