@@ -129,7 +129,8 @@ public class ConnectionFactory implements Cloneable {
129129
130130 private boolean automaticRecovery = true ;
131131 private boolean topologyRecovery = true ;
132-
132+ private ExecutorService topologyRecoveryExecutor ;
133+
133134 // long is used to make sure the users can use both ints
134135 // and longs safely. It is unlikely that anybody'd need
135136 // to use recovery intervals > Integer.MAX_VALUE in practice.
@@ -341,7 +342,7 @@ public void setUri(String uriString)
341342 setUri (new URI (uriString ));
342343 }
343344
344- private String uriDecode (String s ) {
345+ private static String uriDecode (String s ) {
345346 try {
346347 // URLDecode decodes '+' to a space, as for
347348 // form encoding. So protect plus signs.
@@ -525,7 +526,6 @@ public void setSocketFactory(SocketFactory factory) {
525526 *
526527 * @see #setSocketConfigurator(SocketConfigurator)
527528 */
528- @ SuppressWarnings ("unused" )
529529 public SocketConfigurator getSocketConfigurator () {
530530 return socketConf ;
531531 }
@@ -703,7 +703,6 @@ public void setAutomaticRecoveryEnabled(boolean automaticRecovery) {
703703 * @return true if topology recovery is enabled, false otherwise
704704 * @see <a href="http://www.rabbitmq.com/api-guide.html#recovery">Automatic Recovery</a>
705705 */
706- @ SuppressWarnings ("unused" )
707706 public boolean isTopologyRecoveryEnabled () {
708707 return topologyRecovery ;
709708 }
@@ -716,6 +715,24 @@ public boolean isTopologyRecoveryEnabled() {
716715 public void setTopologyRecoveryEnabled (boolean topologyRecovery ) {
717716 this .topologyRecovery = topologyRecovery ;
718717 }
718+
719+ /**
720+ * Get the executor to use for parallel topology recovery. If null (the default), recovery is done single threaded on the main connection thread.
721+ * @return thread pool executor
722+ */
723+ public ExecutorService getTopologyRecoveryExecutor () {
724+ return topologyRecoveryExecutor ;
725+ }
726+
727+ /**
728+ * Set the executor to use for parallel topology recovery. If null (the default), recovery is done single threaded on the main connection thread.
729+ * It is recommended to pass a ThreadPoolExecutor that will allow its core threads to timeout so these threads can die when recovery is complete.
730+ * Note: your {@link ExceptionHandler#handleTopologyRecoveryException(Connection, Channel, TopologyRecoveryException)} method should be thread-safe.
731+ * @param topologyRecoveryExecutor thread pool executor
732+ */
733+ public void setTopologyRecoveryExecutor (final ExecutorService topologyRecoveryExecutor ) {
734+ this .topologyRecoveryExecutor = topologyRecoveryExecutor ;
735+ }
719736
720737 public void setMetricsCollector (MetricsCollector metricsCollector ) {
721738 this .metricsCollector = metricsCollector ;
@@ -1015,6 +1032,7 @@ public ConnectionParams params(ExecutorService consumerWorkServiceExecutor) {
10151032 result .setNetworkRecoveryInterval (networkRecoveryInterval );
10161033 result .setRecoveryDelayHandler (recoveryDelayHandler );
10171034 result .setTopologyRecovery (topologyRecovery );
1035+ result .setTopologyRecoveryExecutor (topologyRecoveryExecutor );
10181036 result .setExceptionHandler (exceptionHandler );
10191037 result .setThreadFactory (threadFactory );
10201038 result .setHandshakeTimeout (handshakeTimeout );
0 commit comments