Skip to content

PostgreSQL Quick Start

Not published by ForkForward Cargo yet

This page refers to a package that ForkForward Cargo does not publish yet: MassTransit.SqlTransport.PostgreSQL. The code is in the repository, but the package name is not decided. Don't add the original MassTransit package instead: a project must not reference ForkForward Cargo and MassTransit packages at the same time, as both contain MassTransit.dll. See Packages.

This tutorial will get you from zero to up and running with SQL and MassTransit.

Walkthrough Video TBD

  • The source for this sample is available on GitHub.

Prerequisites

Info

The following instructions assume you are starting from a completed In-Memory Quick Start

This example requires the following:

  • a functioning installation of the dotnet runtime and sdk (at least 6.0)
  • a functioning installation of Docker with Docker Compose support enabled.

Run PostgreSQL

For this quick start, we recommend running the preconfigured official Docker image of Postgres.

$ docker run -p 5432:5432 postgres

If you are running on an ARM platform

$ docker run --platform linux/arm64 -p 5432:5432 postgres

Once its up and running you can use your preferred tool to browse into the database.

Configure PostgreSQL

Add the MassTransit.SqlTransport.PostgreSQL package to the project.

$ dotnet add package MassTransit.SqlTransport.PostgreSQL

Edit Program.cs

Change UsingInMemory to UsingPostgres as shown below.

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureServices((hostContext, services) =>
        {
            services.AddOptions<SqlTransportOptions>().Configure(options =>
            {
                  options.Host = "localhost";
                  options.Database = "sample";
                  options.Schema = "transport";
                  options.Role = "transport";
                  options.Username = "masstransit";
                  options.Password = "H4rd2Gu3ss!";

                  // credentials to run migrations
                  options.AdminUsername = "migration-user";
                  options.AdminPassword = "H4rderTooGu3ss!!";
            });
            // MassTransit will run the migrations on start up
            services.AddPostgresMigrationHostedService();
            services.AddMassTransit(x =>
            {
                // elided...

                x.UsingPostgres((context,cfg) =>
                {
                    cfg.ConfigureEndpoints(context);
                });
            });

            services.AddHostedService<Worker>();
        });
Setting Description
Host The host to connect to. We are using localhost to connect to the docker container
Port We are using the default 5432, so we aren't setting it.
Database The name of the database to connect to
Schema The schema to place the tables and functions inside of
Role the role to assign for all created tables, functions, etc.
Username The username of the user to login as for normal operations
Password The password of the user to login as for normal operations
AdminUsername The username of the admin user to login as when running migration commands
AdminPassword The password of the admin user to login as when running migration commands

Run the Project

$ dotnet run

The output should have changed to show the message consumer generating the output (again, press Control+C to exit). Notice that the bus address now starts with db.

Building...
info: MassTransit[0]
      Configured endpoint Message, Consumer: GettingStarted.MessageConsumer
info: Microsoft.Hosting.Lifetime[0]
      Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
      Hosting environment: Development
info: Microsoft.Hosting.Lifetime[0]
      Content root path: /Users/chris/Garbage/start/GettingStarted
info: MassTransit[0]
      Bus started: db://localhost/
info: GettingStarted.MessageConsumer[0]
      Received Text: The time is 3/24/2021 12:11:10 PM -05:00

At this point the service is connecting to PostgreSQL on localhost and publishing messages which are received by the consumer.

🎉

What is next