1111import java .util .List ;
1212import java .util .Map ;
1313
14+ import org .jboss .logging .Logger ;
1415import org .testcontainers .azure .ServiceBusEmulatorContainer ;
1516import org .testcontainers .containers .MSSQLServerContainer ;
1617import org .testcontainers .containers .Network ;
2223import io .quarkus .deployment .annotations .BuildStep ;
2324import io .quarkus .deployment .builditem .DevServicesResultBuildItem ;
2425import io .quarkus .deployment .builditem .DevServicesResultBuildItem .RunningDevService ;
26+ import io .quarkus .deployment .builditem .DevServicesSharedNetworkBuildItem ;
2527import io .quarkus .deployment .dev .devservices .DevServicesConfig ;
2628import io .quarkus .runtime .configuration .ConfigUtils ;
2729import io .quarkus .runtime .configuration .ConfigurationException ;
2830
2931public class ServiceBusDevServicesProcessor {
3032
33+ private static final Logger log = Logger .getLogger (ServiceBusDevServicesProcessor .class );
34+ private static final int DEFAULT_EMULATOR_PORT = 5672 ;
3135 private static final String EMULATOR_CONFIG_FILE = "servicebus-config.json" ;
3236 public static final String SERVICEBUS_EULA_URL = "https://github.com/Azure/azure-service-bus-emulator-installer/blob/main/EMULATOR_EULA.txt" ;
3337 public static final String MSSQL_SERVER_EULA_URL = "https://hub.docker.com/r/microsoft/mssql-server" ;
@@ -36,13 +40,14 @@ public class ServiceBusDevServicesProcessor {
3640 @ BuildStep (onlyIfNot = IsNormal .class , onlyIf = { DevServicesConfig .Enabled .class ,
3741 ServiceBusDevServicesConfig .Enabled .class })
3842 public List <DevServicesResultBuildItem > startServiceBusEmulator (ServiceBusDevServicesConfig devServicesConfig ,
43+ List <DevServicesSharedNetworkBuildItem > devServicesSharedNetworkBuildItem ,
3944 BuildProducer <ValidationErrorBuildItem > configErrors ) {
4045 if (isServiceBusConnectionConfigured () || hasConfigurationProblems (devServicesConfig , configErrors )) {
4146 return null ;
4247 }
4348
4449 if (devServices == null ) {
45- devServices = startContainers (devServicesConfig );
50+ devServices = startContainers (devServicesConfig , devServicesSharedNetworkBuildItem );
4651 }
4752
4853 return devServices .stream ()
@@ -79,23 +84,38 @@ private static boolean isEmulatorConfigFileMissing() {
7984 return resourceUrl == null ;
8085 }
8186
82- private List <RunningDevService > startContainers (ServiceBusDevServicesConfig devServicesConfig ) {
83- Network internalNetwork = Network .newNetwork ();
87+ private List <RunningDevService > startContainers (ServiceBusDevServicesConfig devServicesConfig ,
88+ List <DevServicesSharedNetworkBuildItem > devServicesSharedNetworkBuildItem ) {
89+ log .info ("Dev Services for Azure Service Bus starting the Azure Service Bus emulator" );
90+
91+ boolean useSharedNetwork = !devServicesSharedNetworkBuildItem .isEmpty ();
8492
8593 MSSQLServerContainer <?> database = new MSSQLServerContainer <>(devServicesConfig .database ().imageName ())
8694 .acceptLicense ()
87- .withNetwork (internalNetwork );
88-
89- ServiceBusEmulatorContainer emulator = new ServiceBusEmulatorContainer (devServicesConfig .emulator ().imageName ())
95+ .withNetwork (Network .SHARED );
96+
97+ ServiceBusEmulatorContainer emulator = new ServiceBusEmulatorContainer (
98+ devServicesConfig .emulator ().imageName ()) {
99+ @ Override
100+ public String getHost () {
101+ return useSharedNetwork ? getNetworkAliases ().get (0 ) : super .getHost ();
102+ }
103+
104+ @ Override
105+ public Integer getMappedPort (int originalPort ) {
106+ return useSharedNetwork ? DEFAULT_EMULATOR_PORT : super .getMappedPort (originalPort );
107+ }
108+ }
90109 .acceptLicense ()
91110 .withConfig (MountableFile .forClasspathResource (EMULATOR_CONFIG_FILE ))
92111 .withMsSqlServerContainer (database )
93- .withNetwork (internalNetwork );
112+ .withNetwork (Network . SHARED );
94113
95114 emulator .start ();
115+ log .infof ("Azure Service Bus emulator started - connection string is '%s'" , emulator .getConnectionString ());
96116
97- Map <String , String > configOverrides = Map .of (CONFIG_KEY_CONNECTION_STRING ,
98- emulator .getConnectionString ());
117+ Map <String , String > configOverrides = Map .of (
118+ CONFIG_KEY_CONNECTION_STRING , emulator .getConnectionString ());
99119
100120 RunningDevService databaseDevService = new RunningDevService (FEATURE , database .getContainerId (), database ::close ,
101121 Collections .emptyMap ());
0 commit comments