Skip to content

Commit b810b66

Browse files
committed
Add sendTimeout setting to publisher builder
1 parent e3aafb8 commit b810b66

File tree

3 files changed

+29
-4
lines changed

3 files changed

+29
-4
lines changed

src/main/java/com/rabbitmq/model/PublisherBuilder.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,13 @@
1717
1818
package com.rabbitmq.model;
1919

20+
import java.time.Duration;
21+
2022
public interface PublisherBuilder extends AddressBuilder<PublisherBuilder> {
2123

2224
PublisherBuilder listeners(Resource.StateListener... listeners);
2325

26+
PublisherBuilder publishTimeout(Duration timeout);
27+
2428
Publisher build();
2529
}

src/main/java/com/rabbitmq/model/amqp/AmqpPublisher.java

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323
import com.rabbitmq.model.ObservationCollector;
2424
import com.rabbitmq.model.Publisher;
2525
import com.rabbitmq.model.metrics.MetricsCollector;
26+
27+
import java.time.Duration;
2628
import java.util.concurrent.*;
2729
import java.util.concurrent.atomic.AtomicBoolean;
2830
import java.util.concurrent.atomic.AtomicLong;
@@ -49,6 +51,7 @@ final class AmqpPublisher extends ResourceBase implements Publisher {
4951
private final ObservationCollector observationCollector;
5052
private final Function<Message, Tracker> publishCall;
5153
private final DefaultAddressBuilder.DestinationSpec destinationSpec;
54+
private final Duration publishTimeout;
5255
private volatile ObservationCollector.ConnectionInfo connectionInfo;
5356

5457
AmqpPublisher(AmqpPublisherBuilder builder) {
@@ -58,7 +61,9 @@ final class AmqpPublisher extends ResourceBase implements Publisher {
5861
this.address = builder.address();
5962
this.destinationSpec = builder.destination();
6063
this.connection = builder.connection();
61-
this.sender = this.createSender(builder.connection().nativeSession(), this.address);
64+
this.publishTimeout = builder.publishTimeout();
65+
this.sender = this.createSender(builder.connection().nativeSession(), this.address,
66+
this.publishTimeout);
6267
this.metricsCollector = this.connection.metricsCollector();
6368
this.observationCollector = this.connection.observationCollector();
6469
this.state(OPEN);
@@ -122,7 +127,8 @@ public void publish(Message message, Callback callback) {
122127

123128
void recoverAfterConnectionFailure() {
124129
this.connectionInfo = new Utils.ObservationConnectionInfo(this.connection.connectionAddress());
125-
this.sender = this.createSender(this.connection.nativeSession(false), this.address);
130+
this.sender = this.createSender(this.connection.nativeSession(false), this.address,
131+
this.publishTimeout);
126132
}
127133

128134
@Override
@@ -132,8 +138,10 @@ public void close() {
132138

133139
// internal API
134140

135-
private Sender createSender(Session session, String address) {
136-
SenderOptions senderOptions = new SenderOptions().deliveryMode(DeliveryMode.AT_LEAST_ONCE);
141+
private Sender createSender(Session session, String address, Duration publishTimeout) {
142+
SenderOptions senderOptions = new SenderOptions().deliveryMode(DeliveryMode.AT_LEAST_ONCE)
143+
.sendTimeout(publishTimeout.isNegative() ? ConnectionOptions.INFINITE :
144+
publishTimeout.toMillis());
137145
try {
138146
if (address == null) {
139147
return session.openAnonymousSender(senderOptions);

src/main/java/com/rabbitmq/model/amqp/AmqpPublisherBuilder.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121
import com.rabbitmq.model.Publisher;
2222
import com.rabbitmq.model.PublisherBuilder;
2323
import com.rabbitmq.model.Resource;
24+
25+
import java.time.Duration;
2426
import java.util.ArrayList;
2527
import java.util.List;
2628

@@ -30,6 +32,7 @@ class AmqpPublisherBuilder implements PublisherBuilder {
3032
private final List<Resource.StateListener> listeners = new ArrayList<>();
3133
private final DefaultAddressBuilder<PublisherBuilder> addressBuilder =
3234
new DefaultAddressBuilder<>(this) {};
35+
private Duration publishTimeout = Duration.ofSeconds(60);
3336

3437
AmqpPublisherBuilder(AmqpConnection connection) {
3538
this.connection = connection;
@@ -60,6 +63,12 @@ public PublisherBuilder listeners(Resource.StateListener... listeners) {
6063
return this;
6164
}
6265

66+
67+
public AmqpPublisherBuilder publishTimeout(Duration publishTimeout) {
68+
this.publishTimeout = publishTimeout;
69+
return this;
70+
}
71+
6372
@Override
6473
public Publisher build() {
6574
return this.connection.createPublisher(this);
@@ -84,4 +93,8 @@ String address() {
8493
DefaultAddressBuilder.DestinationSpec destination() {
8594
return this.addressBuilder.destination();
8695
}
96+
97+
Duration publishTimeout() {
98+
return this.publishTimeout;
99+
}
87100
}

0 commit comments

Comments
 (0)