/** * Sets the given basic properties to be used for message publishing. * * @param basicProperties The basic properties */ public ExchangeBinding withProperties(AMQP.BasicProperties basicProperties) { this.basicProperties = basicProperties; LOGGER.info("Publisher properties for event type {} set to {}", eventType.getSimpleName(), basicProperties.toString()); return this; }
"deliveryTag", envelope.getDeliveryTag(), "messageId", headers.getMessageId(), "basicProperties", headers.toString());
@Override public void ack() { if (hasAcked.getAndSet(true)) { log.infoWithParams("Attempt to ack an already acked message will be ignored.", "deliveryTag", deliveryTag, "basicProperties", headers.toString()); return; } long ackStart = System.currentTimeMillis(); Message message = new Message(this, envelope, headers, payload); ackWorker.schedule(() -> { try { //TODO should we add multi ack here ?? final long currentDeliveryOffset = deliveryOffset.get(); if (currentDeliveryOffset >= deliveryTag) { consumeEventListener.ignoredAck(message); } else { long actualDeliverTag = deliveryTag - currentDeliveryOffset; consumeEventListener.beforeAck(message); channel.basicAck(actualDeliverTag, false); } } catch (Exception e) { consumeEventListener.afterFailedAck(message, e, channel.isOpen()); } finally { removeAndNotifyOutstanding(deliveryTag); } consumeEventListener.done(message, unackedMessages.size(), ackStart, processingStart); }); }
@Override public void reject() { if (hasAcked.getAndSet(true)) { log.infoWithParams("Attempt to reject an already acked message will be ignored.", "deliveryTag", deliveryTag, "basicProperties", headers.toString()); return; } final long nackStart = System.currentTimeMillis(); Message message = new Message(this, envelope, headers, payload); ackWorker.schedule(() -> { try { final long currentDeliveryOffset = deliveryOffset.get(); if (currentDeliveryOffset >= envelope.getDeliveryTag()) { consumeEventListener.ignoredNack(message); } else { long actualDeliverTag = envelope.getDeliveryTag() - currentDeliveryOffset; consumeEventListener.beforeNack(message); channel.basicNack(actualDeliverTag, false); } } catch (Exception e) { consumeEventListener.afterFailedNack(message, e, channel.isOpen()); } finally { removeAndNotifyOutstanding(deliveryTag); } consumeEventListener.done(message, unackedMessages.size(), nackStart, processingStart); }); }