Skip to content

Commit

Permalink
ARTEMIS-5304 Allow delayed close of federation consumers
Browse files Browse the repository at this point in the history
When demand is removed from a federation consumer and the AMQP link is
drained allow the consumer to idle for a configurable time period before
closing the link. If demand returns before the idled link is closed we
can recover the link by simply granting more credit.
  • Loading branch information
tabish121 authored and gemmellr committed Feb 14, 2025
1 parent 5f83560 commit 272298f
Show file tree
Hide file tree
Showing 18 changed files with 1,171 additions and 663 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,11 @@ private String generateLinkName() {
"-" + LINK_SEQUENCE_ID.incrementAndGet();
}

@Override
public int getReceiverIdleTimeout() {
return configuration.getAddressReceiverIdleTimeout();
}

@Override
protected void doCreateReceiver() {
try {
Expand Down Expand Up @@ -200,7 +205,9 @@ protected void doCreateReceiver() {

receiver = new AMQPFederatedAddressDeliveryReceiver(session, consumerInfo, protonReceiver);

if (protonReceiver.getRemoteSource() != null) {
final boolean linkOpened = protonReceiver.getRemoteSource() != null;

if (linkOpened) {
logger.debug("AMQP Federation {} address consumer {} completed open", federation.getName(), consumerInfo);
} else {
logger.debug("AMQP Federation {} address consumer {} rejected by remote", federation.getName(), consumerInfo);
Expand All @@ -209,6 +216,10 @@ protected void doCreateReceiver() {
session.addReceiver(protonReceiver, (session, protonRcvr) -> {
return this.receiver;
});

if (linkOpened && remoteOpenHandler != null) {
remoteOpenHandler.accept(this);
}
} catch (Exception e) {
federation.signalError(e);
}
Expand Down

This file was deleted.

Loading

0 comments on commit 272298f

Please sign in to comment.