Skip to content

Azure Service Bus Emulator

Install

1
npm install @testcontainers/azureservicebus --save-dev

Examples

These examples use the following libraries:

Choose an image from the container registry and substitute IMAGE.

Send/receive queue messages

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
await using container = await new ServiceBusContainer(IMAGE).acceptLicense().start();

const client = new ServiceBusClient(container.getConnectionString());
const sender = client.createSender("queue.1");
const receiver = client.createReceiver("queue.1");

await sender.sendMessages({ body: "Hello, World!" });
const res = await receiver.receiveMessages(1, { maxWaitTimeInMs: 5_000 });

expect(res).toHaveLength(1);
expect(res[0].body).toBe("Hello, World!");

await receiver.close();
await sender.close();
await client.close();

Customize queues/topics

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
const queueName = "custom-queue";
const config = JSON.stringify({
  UserConfig: {
    Namespaces: [
      {
        Name: "sbemulatorns",
        Queues: [
          {
            Name: queueName,
            Properties: {
              DeadLetteringOnMessageExpiration: false,
              DefaultMessageTimeToLive: "PT1H",
              DuplicateDetectionHistoryTimeWindow: "PT20S",
              ForwardDeadLetteredMessagesTo: "",
              ForwardTo: "",
              LockDuration: "PT1M",
              MaxDeliveryCount: 3,
              RequiresDuplicateDetection: false,
              RequiresSession: false,
            },
          },
        ],
        Topics: [],
      },
    ],
    Logging: {
      Type: "File",
    },
  },
});

await using container = await new ServiceBusContainer(IMAGE).acceptLicense().withConfig(config).start();

const client = new ServiceBusClient(container.getConnectionString());
const sender = client.createSender(queueName);
const receiver = client.createReceiver(queueName);

Customize the MS SQL container

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
// You are responsible for configuring the SA password on
// BOTH containers when using a custom MSSQL container.
const customPassword = "MyC0mplexP@ssw0rd!";

// @testcontainers/mssqlserver can be used as well
const mssqlContainer = new GenericContainer("mcr.microsoft.com/mssql/server:2022-latest")
  .withEnvironment({
    ACCEPT_EULA: "Y",
    MSSQL_SA_PASSWORD: customPassword,
  })
  .withNetworkAliases("your-network-alias")
  .withWaitStrategy(Wait.forLogMessage(/.*Recovery is complete.*/, 1).withStartupTimeout(120_000));

await using container = await new ServiceBusContainer(IMAGE)
  .acceptLicense()
  .withMssqlContainer(mssqlContainer)
  .withMssqlPassword(customPassword)
  .start();

const client = new ServiceBusClient(container.getConnectionString());