我有一个生产者,只要通过API调用接收到一条消息,它就会排队,并且我只想在确认代理已收到消息后才返回。
我发现如何通过发布商确认-
<script>
var token = $('meta[name=csrf-token]').attr('content');
$.ajax('wizard/create', function() {
method: 'POST',
data: {'data' : 'test'},
headers: { 'X-CSRF-TOKEN': token },
success: function(data) {
console.log(data);
}
});
</script>
我的问题是我不想等待所有确认,而只是等待与此特定消息相关的确认。我不想将其限制为单个线程/工人,也不想等待所有事情确认。
用于js的Rabbit库与一个适合我使用的回调一起工作-但C#版本似乎不支持它。
答案 0 :(得分:0)
我的问题是我不想等待所有确认,而只是等待与此特定邮件相关的确认。
您发布的代码将等待一个确认,该确认与刚刚发布的消息相关。
我不想将其限制为单个线程/工人
您可以在线程之间共享该连接,但是您必须创建每个线程的Mammal
实例。然后,使用该实例发布一条消息,然后按照完成操作调用IModel
。
注意: RabbitMQ团队监视classical inheritance example,并且有时仅在StackOverflow上回答问题。
答案 1 :(得分:0)
您需要的是Publisher Confirms和交易。
将您要确认的消息分隔为单个(或子集)事务。
交易:
ch.txSelect(); <-- start transaction
ch.basicPublish("", QUEUE_NAME,
MessageProperties.PERSISTENT_BASIC,
"nop".getBytes());
ch.txCommit();<--commit transaction
您可以通过以下方式使用流式轻量级发布者确认:
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
}
我希望对您有帮助