33import java .io .Closeable ;
44import java .time .Duration ;
55import java .util .HashMap ;
6+ import java .util .List ;
67import java .util .Map ;
78import java .util .Objects ;
89import java .util .Optional ;
2122import io .quarkus .deployment .builditem .CuratedApplicationShutdownBuildItem ;
2223import io .quarkus .deployment .builditem .DevServicesResultBuildItem ;
2324import io .quarkus .deployment .builditem .DevServicesResultBuildItem .RunningDevService ;
25+ import io .quarkus .deployment .builditem .DevServicesSharedNetworkBuildItem ;
2426import io .quarkus .deployment .builditem .DockerStatusBuildItem ;
2527import io .quarkus .deployment .builditem .LaunchModeBuildItem ;
2628import io .quarkus .deployment .console .ConsoleInstalledBuildItem ;
2729import io .quarkus .deployment .console .StartupLogCompressor ;
2830import io .quarkus .deployment .dev .devservices .GlobalDevServicesConfig ;
2931import io .quarkus .deployment .logging .LoggingSetupBuildItem ;
32+ import io .quarkus .devservices .common .ConfigureUtil ;
3033import io .quarkus .devservices .common .ContainerLocator ;
3134import io .quarkus .runtime .LaunchMode ;
3235import io .quarkus .runtime .configuration .ConfigUtils ;
@@ -48,6 +51,7 @@ public class PulsarDevServicesProcessor {
4851
4952 private static final ContainerLocator pulsarContainerLocator = new ContainerLocator (DEV_SERVICE_LABEL ,
5053 PulsarContainer .BROKER_PORT );
54+ private static final String DEV_SERVICE_PULSAR = "pulsar" ;
5155 private static final String PULSAR_CLIENT_SERVICE_URL = "pulsar.client.serviceUrl" ;
5256 private static final String PULSAR_ADMIN_SERVICE_URL = "pulsar.admin.serviceUrl" ;
5357 static volatile RunningDevService devService ;
@@ -59,12 +63,15 @@ public DevServicesResultBuildItem startPulsarDevService(
5963 DockerStatusBuildItem dockerStatusBuildItem ,
6064 LaunchModeBuildItem launchMode ,
6165 PulsarBuildTimeConfig pulsarClientBuildTimeConfig ,
66+ List <DevServicesSharedNetworkBuildItem > devServicesSharedNetworkBuildItem ,
6267 Optional <ConsoleInstalledBuildItem > consoleInstalledBuildItem ,
6368 CuratedApplicationShutdownBuildItem closeBuildItem ,
6469 LoggingSetupBuildItem loggingSetupBuildItem ,
6570 GlobalDevServicesConfig devServicesConfig ) {
6671
6772 PulsarDevServiceCfg configuration = getConfiguration (pulsarClientBuildTimeConfig );
73+ boolean useSharedNetwork = DevServicesSharedNetworkBuildItem .isSharedNetworkRequired (devServicesConfig ,
74+ devServicesSharedNetworkBuildItem );
6875
6976 if (devService != null ) {
7077 boolean shouldShutdownTheBroker = !configuration .equals (cfg );
@@ -80,7 +87,7 @@ public DevServicesResultBuildItem startPulsarDevService(
8087 loggingSetupBuildItem );
8188 try {
8289 RunningDevService newDevService = startPulsarContainer (dockerStatusBuildItem , configuration , launchMode ,
83- devServicesConfig .timeout );
90+ useSharedNetwork , devServicesConfig .timeout );
8491 if (newDevService != null ) {
8592 devService = newDevService ;
8693 Map <String , String > config = devService .getConfig ();
@@ -138,7 +145,8 @@ private void shutdownBroker() {
138145 }
139146
140147 private RunningDevService startPulsarContainer (DockerStatusBuildItem dockerStatusBuildItem , PulsarDevServiceCfg config ,
141- LaunchModeBuildItem launchMode , Optional <Duration > timeout ) {
148+ LaunchModeBuildItem launchMode ,
149+ boolean useSharedNetwork , Optional <Duration > timeout ) {
142150 if (!config .devServicesEnabled ) {
143151 // explicitly disabled
144152 log .debug ("Not starting Dev Services for Pulsar, as it has been disabled in the config." );
@@ -175,10 +183,21 @@ private RunningDevService startPulsarContainer(DockerStatusBuildItem dockerStatu
175183 container .withPort (config .fixedExposedPort );
176184 }
177185 timeout .ifPresent (container ::withStartupTimeout );
186+ String hostName = null ;
187+ if (useSharedNetwork ) {
188+ hostName = ConfigureUtil .configureSharedNetwork (container , DEV_SERVICE_PULSAR );
189+ }
178190 container .start ();
179191
180- return getRunningService (container .getContainerId (), container ::close , container .getPulsarBrokerUrl (),
181- container .getHttpServiceUrl ());
192+ var pulsarBrokerUrl = container .getPulsarBrokerUrl ();
193+ var httpHostServiceUrl = container .getHttpServiceUrl ();
194+ if (useSharedNetwork ) {
195+ pulsarBrokerUrl = getServiceUrl (hostName , PulsarContainer .BROKER_PORT );
196+ httpHostServiceUrl = getHttpServiceUrl (hostName , PulsarContainer .BROKER_HTTP_PORT );
197+ }
198+
199+ return getRunningService (container .getContainerId (), container ::close , pulsarBrokerUrl ,
200+ httpHostServiceUrl );
182201 };
183202
184203 return pulsarContainerLocator .locateContainer (config .serviceName , config .shared , launchMode .getLaunchMode ())
0 commit comments