Skip to content

Commit eb263e2

Browse files
authored
Add support for parsing local emulator slug (#40483)
* Add parsing for UseDevelopmentEmulator * Use unreleased_azure-core-amqp. * Use development storage in builder. * Add option to enable/disable ssl. * Fix naming on web socket test. * Fix NPE when peerDetails are not set. * Add connection option to enable ssl. * Update EHCB to use enableSsl. * Update Reactor provider to use peer details or not if SSL enabled. * Fix ConnectionOption breaks. * Fix build break in ServiceBusClientBuilder * Add changelog message.
1 parent 4bf1090 commit eb263e2

File tree

14 files changed

+146
-27
lines changed

14 files changed

+146
-27
lines changed

sdk/core/azure-core-amqp/CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44

55
### Features Added
66

7+
- Added feature to enable/disable SSL when initially creating connection to support amqp calls on port 5672.
8+
79
### Breaking Changes
810

911
### Bugs Fixed

sdk/core/azure-core-amqp/src/main/java/com/azure/core/amqp/implementation/ConnectionOptions.java

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ public class ConnectionOptions {
3838
private final String clientVersion;
3939
private final SslDomain.VerifyMode verifyMode;
4040
private final String hostname;
41+
private final boolean enableSsl;
4142
private final int port;
4243

4344
/**
@@ -67,7 +68,7 @@ public ConnectionOptions(String fullyQualifiedNamespace, TokenCredential tokenCr
6768
SslDomain.VerifyMode verifyMode, String product, String clientVersion) {
6869
this(fullyQualifiedNamespace, tokenCredential, authorizationType, authorizationScope, transport, retryOptions,
6970
proxyOptions, scheduler, clientOptions, verifyMode, product, clientVersion, fullyQualifiedNamespace,
70-
getPort(transport));
71+
getPort(transport), true);
7172
}
7273

7374
/**
@@ -91,6 +92,7 @@ public ConnectionOptions(String fullyQualifiedNamespace, TokenCredential tokenCr
9192
* connect directly to the AMQP broker.
9293
* @param port Connection port. Used to create the connection to in the case we cannot connect directly
9394
* to the AMQP broker.
95+
* @param enableSsl true to enable SSL when creating AMQP connection.
9496
*
9597
* @throws NullPointerException in the case that {@code fullyQualifiedNamespace}, {@code tokenCredential},
9698
* {@code authorizationType}, {@code transport}, {@code retryOptions}, {@code scheduler},
@@ -99,7 +101,8 @@ public ConnectionOptions(String fullyQualifiedNamespace, TokenCredential tokenCr
99101
public ConnectionOptions(String fullyQualifiedNamespace, TokenCredential tokenCredential,
100102
CbsAuthorizationType authorizationType, String authorizationScope, AmqpTransportType transport,
101103
AmqpRetryOptions retryOptions, ProxyOptions proxyOptions, Scheduler scheduler, ClientOptions clientOptions,
102-
SslDomain.VerifyMode verifyMode, String product, String clientVersion, String hostname, int port) {
104+
SslDomain.VerifyMode verifyMode, String product, String clientVersion, String hostname, int port,
105+
boolean enableSsl) {
103106

104107
this.fullyQualifiedNamespace
105108
= Objects.requireNonNull(fullyQualifiedNamespace, "'fullyQualifiedNamespace' is required.");
@@ -112,6 +115,7 @@ public ConnectionOptions(String fullyQualifiedNamespace, TokenCredential tokenCr
112115
this.clientOptions = Objects.requireNonNull(clientOptions, "'clientOptions' is required.");
113116
this.verifyMode = Objects.requireNonNull(verifyMode, "'verifyMode' is required.");
114117
this.hostname = Objects.requireNonNull(hostname, "'hostname' cannot be null.");
118+
this.enableSsl = enableSsl;
115119
this.port = port != -1 ? port : getPort(transport);
116120
this.proxyOptions = proxyOptions;
117121

@@ -202,7 +206,8 @@ public Scheduler getScheduler() {
202206
}
203207

204208
/**
205-
* Gets the verification mode for the SSL certificate.
209+
* Gets the verification mode for the SSL certificate. The verification mode used when {@link #isEnableSsl()} is
210+
* true.
206211
*
207212
* @return The verification mode for the SSL certificate.
208213
*/
@@ -248,6 +253,15 @@ public int getPort() {
248253
return port;
249254
}
250255

256+
/**
257+
* Check if SSL should be enabled when creating the AMQP connection.
258+
*
259+
* @return {@code true} to enable SSL when creating AMQP connection, false otherwise.
260+
*/
261+
public boolean isEnableSsl() {
262+
return enableSsl;
263+
}
264+
251265
private static int getPort(AmqpTransportType transport) {
252266
switch (transport) {
253267
case AMQP:

sdk/core/azure-core-amqp/src/main/java/com/azure/core/amqp/implementation/ConnectionStringProperties.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ public class ConnectionStringProperties {
2828
private static final String SHARED_ACCESS_SIGNATURE = "SharedAccessSignature";
2929
private static final String SAS_VALUE_PREFIX = "sharedaccesssignature ";
3030
private static final String ENTITY_PATH = "EntityPath";
31+
private static final String USE_DEVELOPMENT_EMULATOR = "UseDevelopmentEmulator";
3132
private static final String CONNECTION_STRING_WITH_ACCESS_KEY = "Endpoint={endpoint};"
3233
+ "SharedAccessKeyName={sharedAccessKeyName};SharedAccessKey={sharedAccessKey};EntityPath={entityPath}";
3334
private static final String CONNECTION_STRING_WITH_SAS = "Endpoint={endpoint};SharedAccessSignature="
@@ -41,6 +42,7 @@ public class ConnectionStringProperties {
4142
private final String sharedAccessKeyName;
4243
private final String sharedAccessKey;
4344
private final String sharedAccessSignature;
45+
private final boolean useDevelopmentEmulator;
4446

4547
/**
4648
* Creates a new instance by parsing the {@code connectionString} into its components.
@@ -62,6 +64,7 @@ public ConnectionStringProperties(String connectionString) {
6264
String sharedAccessKeyName = null;
6365
String sharedAccessKeyValue = null;
6466
String sharedAccessSignature = null;
67+
Boolean useDevelopmentEmulator = null;
6568

6669
for (String tokenValuePair : tokenValuePairs) {
6770
final String[] pair = tokenValuePair.split(TOKEN_VALUE_SEPARATOR, 2);
@@ -87,6 +90,8 @@ public ConnectionStringProperties(String connectionString) {
8790
sharedAccessKeyValue = value;
8891
} else if (key.equalsIgnoreCase(ENTITY_PATH)) {
8992
entityPath = value;
93+
} else if (key.equalsIgnoreCase(USE_DEVELOPMENT_EMULATOR)) {
94+
useDevelopmentEmulator = Boolean.valueOf(value);
9095
} else if (key.equalsIgnoreCase(SHARED_ACCESS_SIGNATURE)
9196
&& value.toLowerCase(Locale.ROOT).startsWith(SAS_VALUE_PREFIX)) {
9297
sharedAccessSignature = value;
@@ -112,6 +117,8 @@ public ConnectionStringProperties(String connectionString) {
112117
this.sharedAccessKeyName = sharedAccessKeyName;
113118
this.sharedAccessKey = sharedAccessKeyValue;
114119
this.sharedAccessSignature = sharedAccessSignature;
120+
121+
this.useDevelopmentEmulator = useDevelopmentEmulator != null ? useDevelopmentEmulator : false;
115122
}
116123

117124
/**
@@ -155,6 +162,15 @@ public String getSharedAccessSignature() {
155162
return sharedAccessSignature;
156163
}
157164

165+
/**
166+
* Gets whether the connection string points to a development emulator.
167+
*
168+
* @return true if the connection string's endpoint is a development emulator.
169+
*/
170+
public boolean useDevelopmentEmulator() {
171+
return useDevelopmentEmulator;
172+
}
173+
158174
/*
159175
* The function checks for pre existing scheme of "sb://" , "http://" or "https://". If the scheme is not provided
160176
* in endpoint, it will set the default scheme to "sb://".

sdk/core/azure-core-amqp/src/main/java/com/azure/core/amqp/implementation/ReactorHandlerProvider.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -68,20 +68,26 @@ public ReactorHandlerProvider(ReactorProvider provider, Meter meter) {
6868
*
6969
* @param connectionId Identifier associated with this connection.
7070
* @param options Options for the connection.
71+
*
7172
* @return A new {@link ConnectionHandler}.
7273
*
7374
* @throws NullPointerException If {@code connectionId}, {@code productName}, {@code clientVersion},
7475
* {@code options} is {@code null}.
7576
*/
7677
public ConnectionHandler createConnectionHandler(String connectionId, ConnectionOptions options) {
78+
7779
Objects.requireNonNull(connectionId, "'connectionId' cannot be null.");
7880
Objects.requireNonNull(options, "'options' cannot be null.");
7981

80-
AmqpMetricsProvider metricsProvider = getMetricProvider(options.getFullyQualifiedNamespace(), null);
81-
if (options.getTransportType() == AmqpTransportType.AMQP) {
82-
final SslPeerDetails peerDetails = Proton.sslPeerDetails(options.getHostname(), options.getPort());
82+
final AmqpMetricsProvider metricsProvider = getMetricProvider(options.getFullyQualifiedNamespace(), null);
8383

84-
return new ConnectionHandler(connectionId, options, peerDetails, metricsProvider);
84+
if (options.getTransportType() == AmqpTransportType.AMQP) {
85+
if (options.isEnableSsl()) {
86+
final SslPeerDetails peerDetails = Proton.sslPeerDetails(options.getHostname(), options.getPort());
87+
return new ConnectionHandler(connectionId, options, peerDetails, metricsProvider);
88+
} else {
89+
return new ConnectionHandler(connectionId, options, metricsProvider);
90+
}
8591
}
8692

8793
if (options.getTransportType() != AmqpTransportType.AMQP_WEB_SOCKETS) {

sdk/core/azure-core-amqp/src/main/java/com/azure/core/amqp/implementation/handler/ConnectionHandler.java

Lines changed: 38 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import com.azure.core.util.ClientOptions;
1212
import com.azure.core.util.CoreUtils;
1313
import com.azure.core.util.UserAgentUtil;
14+
import com.azure.core.util.logging.LoggingEventBuilder;
1415
import org.apache.qpid.proton.Proton;
1516
import org.apache.qpid.proton.amqp.Symbol;
1617
import org.apache.qpid.proton.amqp.transport.ErrorCondition;
@@ -68,6 +69,21 @@ public class ConnectionHandler extends Handler {
6869
private final ConnectionOptions connectionOptions;
6970
private final SslPeerDetails peerDetails;
7071
private final AmqpMetricsProvider metricProvider;
72+
private final boolean enableSsl;
73+
74+
/**
75+
* Creates a handler that handles proton-j's connection events without using SSL.
76+
*
77+
* @param connectionId Identifier for this connection.
78+
* @param connectionOptions Options used when creating the AMQP connection.
79+
* @param metricProvider The AMQP metrics provider.
80+
* @throws NullPointerException if {@code connectionOptions}, {@code peerDetails}, or {@code metricProvider} is
81+
* null.
82+
*/
83+
public ConnectionHandler(final String connectionId, final ConnectionOptions connectionOptions,
84+
AmqpMetricsProvider metricProvider) {
85+
this(connectionId, connectionOptions, null, metricProvider, false);
86+
}
7187

7288
/**
7389
* Creates a handler that handles proton-j's connection events.
@@ -81,6 +97,11 @@ public class ConnectionHandler extends Handler {
8197
*/
8298
public ConnectionHandler(final String connectionId, final ConnectionOptions connectionOptions,
8399
SslPeerDetails peerDetails, AmqpMetricsProvider metricProvider) {
100+
this(connectionId, connectionOptions, peerDetails, metricProvider, true);
101+
}
102+
103+
ConnectionHandler(String connectionId, ConnectionOptions connectionOptions, SslPeerDetails peerDetails,
104+
AmqpMetricsProvider metricProvider, boolean enableSsl) {
84105
super(connectionId,
85106
Objects.requireNonNull(connectionOptions, "'connectionOptions' cannot be null.").getHostname());
86107
add(new Handshaker());
@@ -100,8 +121,14 @@ public ConnectionHandler(final String connectionId, final ConnectionOptions conn
100121

101122
this.connectionProperties.put(USER_AGENT.toString(), userAgent);
102123

103-
this.peerDetails = Objects.requireNonNull(peerDetails, "'peerDetails' cannot be null.");
124+
if (enableSsl) {
125+
this.peerDetails = Objects.requireNonNull(peerDetails, "'peerDetails' cannot be null.");
126+
} else {
127+
this.peerDetails = peerDetails;
128+
}
129+
104130
this.metricProvider = Objects.requireNonNull(metricProvider, "'metricProvider' cannot be null.");
131+
this.enableSsl = enableSsl;
105132
}
106133

107134
/**
@@ -143,6 +170,10 @@ protected void addTransportLayers(Event event, TransportInternal transport) {
143170
// Refer to http://docs.oasis-open.org/amqp/core/v1.0/os/amqp-core-transport-v1.0-os.html#doc-doc-idle-time-out
144171
transport.setIdleTimeout(CONNECTION_IDLE_TIMEOUT);
145172

173+
if (!enableSsl) {
174+
return;
175+
}
176+
146177
final SslDomain sslDomain = Proton.sslDomain();
147178
sslDomain.init(SslDomain.Mode.CLIENT);
148179

@@ -214,10 +245,12 @@ public void onConnectionInit(Event event) {
214245
public void onConnectionBound(Event event) {
215246
final Transport transport = event.getTransport();
216247

217-
logger.atInfo()
218-
.addKeyValue(HOSTNAME_KEY, getHostname())
219-
.addKeyValue("peerDetails", () -> peerDetails.getHostname() + ":" + peerDetails.getPort())
220-
.log("onConnectionBound");
248+
final LoggingEventBuilder builder = logger.atInfo().addKeyValue(HOSTNAME_KEY, getHostname());
249+
if (peerDetails != null) {
250+
builder.addKeyValue("peerDetails", () -> peerDetails.getHostname() + ":" + peerDetails.getPort());
251+
}
252+
253+
builder.log("onConnectionBound");
221254

222255
this.addTransportLayers(event, (TransportInternal) transport);
223256

sdk/core/azure-core-amqp/src/test/java/com/azure/core/amqp/implementation/ConnectionOptionsTest.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,9 @@
1919
import reactor.core.scheduler.Scheduler;
2020

2121
import static org.junit.jupiter.api.Assertions.assertEquals;
22+
import static org.junit.jupiter.api.Assertions.assertFalse;
2223
import static org.junit.jupiter.api.Assertions.assertSame;
24+
import static org.junit.jupiter.api.Assertions.assertTrue;
2325

2426
/**
2527
* Tests for {@link ConnectionOptions}.
@@ -78,6 +80,8 @@ public void propertiesSet() {
7880
assertEquals(scope, actual.getAuthorizationScope());
7981
assertEquals(retryOptions, actual.getRetry());
8082
assertEquals(verifyMode, actual.getSslVerifyMode());
83+
84+
assertTrue(actual.isEnableSsl());
8185
}
8286

8387
/**
@@ -101,7 +105,7 @@ public void propertiesAndPortSet() {
101105
final ConnectionOptions actual
102106
= new ConnectionOptions(fullyQualifiedNamespace, tokenCredential, CbsAuthorizationType.JSON_WEB_TOKEN,
103107
scope, AmqpTransportType.AMQP, retryOptions, ProxyOptions.SYSTEM_DEFAULTS, scheduler, clientOptions,
104-
verifyMode, productName, clientVersion, actualHostname, port);
108+
verifyMode, productName, clientVersion, actualHostname, port, false);
105109

106110
// Assert
107111
assertEquals(fullyQualifiedNamespace, actual.getFullyQualifiedNamespace());
@@ -121,5 +125,7 @@ public void propertiesAndPortSet() {
121125

122126
assertEquals(actualHostname, actual.getHostname());
123127
assertEquals(port, actual.getPort());
128+
129+
assertFalse(actual.isEnableSsl());
124130
}
125131
}

sdk/core/azure-core-amqp/src/test/java/com/azure/core/amqp/implementation/ConnectionStringPropertiesTest.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import org.junit.jupiter.api.Test;
88
import org.junit.jupiter.params.ParameterizedTest;
99
import org.junit.jupiter.params.provider.MethodSource;
10+
import org.junit.jupiter.params.provider.ValueSource;
1011

1112
import java.util.Locale;
1213
import java.util.stream.Stream;
@@ -151,6 +152,7 @@ public void namespaceConnectionString() {
151152
final ConnectionStringProperties properties = new ConnectionStringProperties(connectionString);
152153

153154
// Assert
155+
Assertions.assertFalse(properties.useDevelopmentEmulator());
154156
Assertions.assertEquals(HOST, properties.getEndpoint().getHost());
155157
Assertions.assertEquals(SAS_KEY, properties.getSharedAccessKeyName());
156158
Assertions.assertEquals(SAS_VALUE, properties.getSharedAccessKey());
@@ -169,6 +171,28 @@ public void parseConnectionString() {
169171
final ConnectionStringProperties properties = new ConnectionStringProperties(connectionString);
170172

171173
// Assert
174+
Assertions.assertFalse(properties.useDevelopmentEmulator());
175+
Assertions.assertEquals(HOST, properties.getEndpoint().getHost());
176+
Assertions.assertEquals(SAS_KEY, properties.getSharedAccessKeyName());
177+
Assertions.assertEquals(SAS_VALUE, properties.getSharedAccessKey());
178+
Assertions.assertEquals(EVENT_HUB, properties.getEntityPath());
179+
}
180+
181+
/**
182+
* Verifies we can create ConnectionStringProperties with "UseDevelopmentEmulator" specified.
183+
*/
184+
@ValueSource(booleans = { true, false })
185+
@ParameterizedTest
186+
public void useDevelopmentConnectionString(boolean useEmulator) {
187+
// Arrange
188+
final String connectionString = getConnectionString(HOSTNAME_URI, EVENT_HUB, SAS_KEY, SAS_VALUE)
189+
+ "UseDevelopmentEmulator=" + useEmulator + ";";
190+
191+
// Act
192+
final ConnectionStringProperties properties = new ConnectionStringProperties(connectionString);
193+
194+
// Assert
195+
Assertions.assertEquals(useEmulator, properties.useDevelopmentEmulator());
172196
Assertions.assertEquals(HOST, properties.getEndpoint().getHost());
173197
Assertions.assertEquals(SAS_KEY, properties.getSharedAccessKeyName());
174198
Assertions.assertEquals(SAS_VALUE, properties.getSharedAccessKey());

sdk/core/azure-core-amqp/src/test/java/com/azure/core/amqp/implementation/ReactorConnectionTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -713,7 +713,7 @@ void setsPropertiesUsingCustomEndpoint() throws IOException {
713713
final ConnectionOptions connectionOptions = new ConnectionOptions(CREDENTIAL_INFO.getEndpoint().getHost(),
714714
tokenCredential, CbsAuthorizationType.SHARED_ACCESS_SIGNATURE, "scope", AmqpTransportType.AMQP,
715715
new AmqpRetryOptions(), ProxyOptions.SYSTEM_DEFAULTS, SCHEDULER, CLIENT_OPTIONS, VERIFY_MODE, PRODUCT,
716-
CLIENT_VERSION, hostname, port);
716+
CLIENT_VERSION, hostname, port, true);
717717

718718
final ConnectionHandler connectionHandler
719719
= new ConnectionHandler(connectionId, connectionOptions, peerDetails, AmqpMetricsProvider.noop());

sdk/core/azure-core-amqp/src/test/java/com/azure/core/amqp/implementation/ReactorHandlerProviderTest.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ public void getsConnectionHandlerAMQP(String hostname, int port, String expected
159159
final ConnectionOptions connectionOptions = new ConnectionOptions(FULLY_QUALIFIED_DOMAIN_NAME, tokenCredential,
160160
CbsAuthorizationType.SHARED_ACCESS_SIGNATURE, "scope", AmqpTransportType.AMQP, new AmqpRetryOptions(),
161161
ProxyOptions.SYSTEM_DEFAULTS, scheduler, CLIENT_OPTIONS, VERIFY_MODE, PRODUCT, CLIENT_VERSION, hostname,
162-
port);
162+
port, true);
163163

164164
final ConnectionHandler handler = provider.createConnectionHandler(CONNECTION_ID, connectionOptions);
165165

@@ -235,7 +235,7 @@ public void getsConnectionHandlerSystemProxy(String hostname, Integer port, Stri
235235
final ConnectionOptions connectionOptions = new ConnectionOptions(fullyQualifiedDomainName, tokenCredential,
236236
CbsAuthorizationType.SHARED_ACCESS_SIGNATURE, "scope", AmqpTransportType.AMQP_WEB_SOCKETS,
237237
new AmqpRetryOptions(), null, scheduler, CLIENT_OPTIONS, VERIFY_MODE, PRODUCT, CLIENT_VERSION, hostname,
238-
port);
238+
port, true);
239239

240240
when(proxySelector.select(any())).thenAnswer(invocation -> {
241241
final URI uri = invocation.getArgument(0);
@@ -366,7 +366,7 @@ public void correctPeerDetailsCustomEndpoint() throws MalformedURLException {
366366
= new ConnectionOptions(HOSTNAME, tokenCredential, CbsAuthorizationType.SHARED_ACCESS_SIGNATURE, "scope",
367367
AmqpTransportType.AMQP_WEB_SOCKETS, new AmqpRetryOptions(), ProxyOptions.SYSTEM_DEFAULTS, scheduler,
368368
CLIENT_OPTIONS, SslDomain.VerifyMode.VERIFY_PEER_NAME, PRODUCT, CLIENT_VERSION,
369-
customEndpoint.getHost(), customEndpoint.getDefaultPort());
369+
customEndpoint.getHost(), customEndpoint.getDefaultPort(), true);
370370

371371
final Connection connection = mock(Connection.class);
372372
when(connection.getRemoteState()).thenReturn(EndpointState.UNINITIALIZED);

sdk/core/azure-core-amqp/src/test/java/com/azure/core/amqp/implementation/handler/WebSocketsConnectionHandlerTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,7 @@ public void onConnectionInitDifferentEndpoint() {
198198
final ConnectionOptions connectionOptions = new ConnectionOptions(fullyQualifiedNamespace, tokenCredential,
199199
CbsAuthorizationType.SHARED_ACCESS_SIGNATURE, "authorization-scope", AmqpTransportType.AMQP_WEB_SOCKETS,
200200
new AmqpRetryOptions(), ProxyOptions.SYSTEM_DEFAULTS, scheduler, CLIENT_OPTIONS, VERIFY_MODE, PRODUCT,
201-
CLIENT_VERSION, customEndpoint, port);
201+
CLIENT_VERSION, customEndpoint, port, true);
202202

203203
try (WebSocketsConnectionHandler handler = new WebSocketsConnectionHandler(CONNECTION_ID, connectionOptions,
204204
peerDetails, AmqpMetricsProvider.noop())) {
@@ -252,7 +252,7 @@ public void websocketConfigureUsesCustomEndpointHostnameAsHostname() {
252252
final ConnectionOptions connectionOptionsWithCustomEndpoint
253253
= new ConnectionOptions(HOSTNAME, tokenCredential, CbsAuthorizationType.SHARED_ACCESS_SIGNATURE, "scope",
254254
AmqpTransportType.AMQP_WEB_SOCKETS, new AmqpRetryOptions(), ProxyOptions.SYSTEM_DEFAULTS, scheduler,
255-
CLIENT_OPTIONS, VERIFY_MODE, PRODUCT, CLIENT_VERSION, customEndpointHostname, 200);
255+
CLIENT_OPTIONS, VERIFY_MODE, PRODUCT, CLIENT_VERSION, customEndpointHostname, 200, true);
256256

257257
try (WebSocketsConnectionHandler handler = new WebSocketsConnectionHandler(CONNECTION_ID,
258258
connectionOptionsWithCustomEndpoint, peerDetails, AmqpMetricsProvider.noop())) {

0 commit comments

Comments
 (0)