Set up LavinMQ in the Aspire AppHost
This article is the AppHost API reference for the 📦 CommunityToolkit.Aspire.Hosting.LavinMQ package. Start with Get started with LavinMQ and Aspire for the integration workflow, or see Connect Aspire apps to LavinMQ for client examples.
Installation
Section titled “Installation”aspire add CommunityToolkit.Aspire.Hosting.LavinMQOr add the package manually:
#:package CommunityToolkit.Aspire.Hosting.LavinMQ@*<PackageReference Include="CommunityToolkit.Aspire.Hosting.LavinMQ" Version="*" />aspire add CommunityToolkit.Aspire.Hosting.LavinMQThis adds the package to aspire.config.json. After aspire restore, .aspire/modules/aspire.mjs includes addLavinMQ, the persistence APIs, and the exported endpoint properties.
Learn more about aspire add and
aspire restore.
Add a LavinMQ resource
Section titled “Add a LavinMQ resource”var builder = DistributedApplication.CreateBuilder(args);
var lavinmq = builder.AddLavinMQ("lavinmq");
builder.AddProject<Projects.Worker>("worker") .WithReference(lavinmq);
builder.Build().Run();import { function createBuilder(): IDistributedApplicationBuilder
Creates a new distributed application builder
createBuilder } from './.aspire/modules/aspire.mjs';
const const builder: IDistributedApplicationBuilder
builder = await function createBuilder(): IDistributedApplicationBuilder
Creates a new distributed application builder
createBuilder();
const const lavinmq: LavinMQContainerResource
lavinmq = await const builder: IDistributedApplicationBuilder
builder.IDistributedApplicationBuilder.addLavinMQ(name: string, options?: { amqpPort?: number; managementPort?: number;}): LavinMQContainerResource (+1 overload)
Adds a LavinMQ container resource to the distributed application builder. Configures the resource with specified parameters and sets up health checks for the resource.
addLavinMQ('lavinmq');
await const builder: IDistributedApplicationBuilder
builder .IDistributedApplicationBuilder.addNodeApp(name: string, appDirectory: string, scriptPath: string): NodeAppResource
Adds a node application to the application model. Node should be available on the PATH.
addNodeApp('worker', './worker', 'index.js') .ExecutableResource.withReference(source: EndpointReference | string | uri, options?: { connectionName?: string; optional?: boolean; name?: string;} | undefined): NodeAppResource (+1 overload)
Adds a reference to another resource
withReference(const lavinmq: LavinMQContainerResource
lavinmq);
await const builder: IDistributedApplicationBuilder
builder.IDistributedApplicationBuilder.build(): DistributedApplication
Builds the distributed application
build().DistributedApplication.run(cancellationToken?: cancellationToken): void
Runs the distributed application
run();The integration runs docker.io/cloudamqp/lavinmq:2.1.0. The AMQP endpoint uses container port 5672, and the management endpoint uses 15672. The default username and password are both guest.
Configure host ports
Section titled “Configure host ports”Pass fixed host ports when another process needs stable endpoints:
var builder = DistributedApplication.CreateBuilder(args);
var lavinmq = builder.AddLavinMQ( "lavinmq", amqpPort: 5672, managementPort: 15672);
builder.Build().Run();import { function createBuilder(): IDistributedApplicationBuilder
Creates a new distributed application builder
createBuilder } from './.aspire/modules/aspire.mjs';
const const builder: IDistributedApplicationBuilder
builder = await function createBuilder(): IDistributedApplicationBuilder
Creates a new distributed application builder
createBuilder();
const const lavinmq: LavinMQContainerResource
lavinmq = await const builder: IDistributedApplicationBuilder
builder.IDistributedApplicationBuilder.addLavinMQ(name: string, options?: { amqpPort?: number; managementPort?: number;}): LavinMQContainerResource (+1 overload)
Adds a LavinMQ container resource to the distributed application builder. Configures the resource with specified parameters and sets up health checks for the resource.
addLavinMQ('lavinmq', { amqpPort?: number | undefined
amqpPort: 5672, managementPort?: number | undefined
managementPort: 15672,});
await const builder: IDistributedApplicationBuilder
builder.IDistributedApplicationBuilder.build(): DistributedApplication
Builds the distributed application
build().DistributedApplication.run(cancellationToken?: cancellationToken): void
Runs the distributed application
run();When you omit these parameters, the integration binds host ports 5672 and
15672. Pass alternative values when either port is already occupied.
Persist data in a volume
Section titled “Persist data in a volume”WithDataVolume and withDataVolume require a volume name and mount it at /var/lib/lavinmq:
var builder = DistributedApplication.CreateBuilder(args);
var lavinmq = builder.AddLavinMQ("lavinmq") .WithDataVolume("lavinmq-data");
builder.Build().Run();import { function createBuilder(): IDistributedApplicationBuilder
Creates a new distributed application builder
createBuilder } from './.aspire/modules/aspire.mjs';
const const builder: IDistributedApplicationBuilder
builder = await function createBuilder(): IDistributedApplicationBuilder
Creates a new distributed application builder
createBuilder();
const const lavinmq: LavinMQContainerResource
lavinmq = await const builder: IDistributedApplicationBuilder
builder.IDistributedApplicationBuilder.addLavinMQ(name: string, options?: { amqpPort?: number; managementPort?: number;}): LavinMQContainerResource (+1 overload)
Adds a LavinMQ container resource to the distributed application builder. Configures the resource with specified parameters and sets up health checks for the resource.
addLavinMQ('lavinmq');await const lavinmq: LavinMQContainerResource
lavinmq.LavinMQContainerResource.withDataVolume(name: string, options?: { isReadOnly?: boolean;}): LavinMQContainerResource (+1 overload)
Configures a data volume for the LavinMQ container resource by specifying its name and read-only status.
withDataVolume('lavinmq-data');
await const builder: IDistributedApplicationBuilder
builder.IDistributedApplicationBuilder.build(): DistributedApplication
Builds the distributed application
build().DistributedApplication.run(cancellationToken?: cancellationToken): void
Runs the distributed application
run();Persist data in a bind mount
Section titled “Persist data in a bind mount”Use a bind mount when you need direct access to broker files on the host:
var builder = DistributedApplication.CreateBuilder(args);
var lavinmq = builder.AddLavinMQ("lavinmq") .WithDataBindMount(@"C:\LavinMQ\Data");
builder.Build().Run();import { function createBuilder(): IDistributedApplicationBuilder
Creates a new distributed application builder
createBuilder } from './.aspire/modules/aspire.mjs';
const const builder: IDistributedApplicationBuilder
builder = await function createBuilder(): IDistributedApplicationBuilder
Creates a new distributed application builder
createBuilder();
const const lavinmq: LavinMQContainerResource
lavinmq = await const builder: IDistributedApplicationBuilder
builder.IDistributedApplicationBuilder.addLavinMQ(name: string, options?: { amqpPort?: number; managementPort?: number;}): LavinMQContainerResource (+1 overload)
Adds a LavinMQ container resource to the distributed application builder. Configures the resource with specified parameters and sets up health checks for the resource.
addLavinMQ('lavinmq');await const lavinmq: LavinMQContainerResource
lavinmq.LavinMQContainerResource.withDataBindMount(source: string, options?: { isReadOnly?: boolean;}): LavinMQContainerResource (+1 overload)
Configures a bind mount for the LavinMQ container resource to allow data persistence. The method mounts a specified source path on the host to the container's data directory.
withDataBindMount('./lavinmq-data');
await const builder: IDistributedApplicationBuilder
builder.IDistributedApplicationBuilder.build(): DistributedApplication
Builds the distributed application
build().DistributedApplication.run(cancellationToken?: cancellationToken): void
Runs the distributed application
run();Both persistence methods accept an optional isReadOnly value. A read-only mount isn’t suitable for a broker that needs to write data.
Use endpoint properties
Section titled “Use endpoint properties”The resource exports its AMQP endpoint and connection expressions for use in custom AppHost expressions:
var builder = DistributedApplication.CreateBuilder(args);
var lavinmq = builder.AddLavinMQ("lavinmq");var primaryEndpoint = lavinmq.Resource.PrimaryEndpoint;var host = lavinmq.Resource.Host;var port = lavinmq.Resource.Port;var uri = lavinmq.Resource.UriExpression;var connectionString = lavinmq.Resource.ConnectionStringExpression;
builder.Build().Run();import { createBuilder } from './.aspire/modules/aspire.mjs';
const builder = await createBuilder();
const lavinmq = await builder.addLavinMQ('lavinmq');const primaryEndpoint = await lavinmq.primaryEndpoint();const host = await lavinmq.host();const port = await lavinmq.port();const uri = await lavinmq.uriExpression();const connectionString = await lavinmq.connectionStringExpression();
await builder.build().run();Management UI
Section titled “Management UI”The management endpoint is added automatically. Open the management HTTP endpoint from the Aspire dashboard, then sign in with the broker credentials.
Hosting integration health checks
Section titled “Hosting integration health checks”The hosting integration registers a RabbitMQ-compatible health check against the AMQP endpoint. The dashboard reports the resource healthy after a client connection succeeds.