我有一个resque作业在某个事件中运行,最终将消息发布到RabbitMQ的交换,我如何检查bunny(Rabbit MQ ruby客户端)消息是否已成功发布?
使用确认还是以任何方式?
提前致谢!
答案 0 :(得分:1)
当您执行publish
时,您不确定该消息是否已在队列中发布。
如果您想确定必须使用,则必须使用publish confirm
或tx transaction
。
阅读这篇文章http://www.rabbitmq.com/blog/2011/02/10/introducing-publisher-confirms/
注意:默认情况下,客户端没有任何HA策略,您必须实现它。请参阅Streaming Lightweight Publisher Confirms
:
private volatile SortedSet<Long> unconfirmedSet =
Collections.synchronizedSortedSet(new TreeSet());
...
ch.setConfirmListener(new ConfirmListener() {
public void handleAck(long seqNo, boolean multiple) {
if (multiple) {
unconfirmedSet.headSet(seqNo+1).clear();
} else {
unconfirmedSet.remove(seqNo);
}
}
public void handleNack(long seqNo, boolean multiple) {
// handle the lost messages somehow
}
});
注意2:邮件永远不会被放置&#34;在交换中,但总是在队列中。
答案 1 :(得分:0)
package unary
type unary int////not visible outside of the package unary
const (
Positive unary = 1//visible outside of the package unary
Negative unary = -1//visible outside of the package unary
)
func (u unary) String() string {//visible outside of the package unary
if u == Positive {
return "+"
}
return "-"
}
func (u unary) CalExpr() int {//visible outside of the package unary
if u == Positive {
return 1
}
return -1
}
方法返回后,消息已发布到队列中。发布消息没有延迟的操作。