Skip to content

Releases: akkadotnet/Akka.Hosting

Akka.Hosting 1.5.55.1

27 Oct 18:06
5b1e040

Choose a tag to compare

1.5.55.1 October 27th 2025

Enhancements

  • Expose options in journal and snapshot builders - resolved issue #690 by adding Options property to AkkaPersistenceJournalBuilder and AkkaPersistenceSnapshotBuilder. Extension methods can now access configuration details without requiring options as explicit parameters, eliminating redundant option passing for connectivity health checks and other plugin-specific features

1.5.55 October 26th 2025

New Features

Enhancements

Updates

1.5.55-beta1 October 26th 2025

New Features

Enhancements

Updates

1.5.53 October 14th 2025

Bug Fixes

  • Fix event adapter callback API not invoking adapters at runtime - resolved critical bug where event adapters configured via the callback API were not being invoked at runtime. This fix is especially important for users who have migrated to the callback pattern following the deprecation of JournalOptions.Adapters property. The issue was caused by unnecessary fallback configuration that interfered with adapter registration during HOCON merging.

Updates

1.5.52 October 9th 2025

API Changes

Updates

1.5.51.1 October 2nd 2025

Bug Fixes

1.5.51 October 1st 2025

New Features

Updates

Akka.Hosting 1.5.55

26 Oct 23:35
1.5.55
86f5e70

Choose a tag to compare

1.5.55 October 26th 2025

New Features

Enhancements

Updates

1.5.55-beta1 October 26th 2025

New Features

Enhancements

Updates

1.5.53 October 14th 2025

Bug Fixes

  • Fix event adapter callback API not invoking adapters at runtime - resolved critical bug where event adapters configured via the callback API were not being invoked at runtime. This fix is especially important for users who have migrated to the callback pattern following the deprecation of JournalOptions.Adapters property. The issue was caused by unnecessary fallback configuration that interfered with adapter registration during HOCON merging.

Updates

1.5.52 October 9th 2025

API Changes

Updates

1.5.51.1 October 2nd 2025

Bug Fixes

1.5.51 October 1st 2025

New Features

Updates

Akka.Hosting 1.5.55-beta1

26 Oct 18:39
1.5.55-beta1
602df3a

Choose a tag to compare

Pre-release

1.5.55-beta1 October 26th 2025

New Features

Enhancements

Updates

Akka.Hosting 1.5.53

14 Oct 15:04
22f3949

Choose a tag to compare

1.5.53 October 14th 2025

Bug Fixes

  • Fix event adapter callback API not invoking adapters at runtime - resolved critical bug where event adapters configured via the callback API were not being invoked at runtime. This fix is especially important for users who have migrated to the callback pattern following the deprecation of JournalOptions.Adapters property. The issue was caused by unnecessary fallback configuration that interfered with adapter registration during HOCON merging.

Updates

1.5.52 October 9th 2025

API Changes

Updates

1.5.51.1 October 2nd 2025

Bug Fixes

1.5.51 October 1st 2025

New Features

Updates

Akka.Hosting 1.5.52

09 Oct 23:47
1.5.52
b3834f9

Choose a tag to compare

1.5.52 October 9th 2025

API Changes

Updates

Akka.Hosting 1.5.51.1

02 Oct 13:51
1.5.51.1
a959561

Choose a tag to compare

1.5.51.1 October 2nd 2025

Bug Fixes

1.5.51 October 1st 2025

New Features

Updates

Akka.Hosting 1.5.51

01 Oct 19:45
3177ad6

Choose a tag to compare

1.5.51 October 1st 2025

New Features

Updates

Akka.Hosting 1.5.50

23 Sep 17:33
6207fa1

Choose a tag to compare

Akka.Hosting 1.5.49

15 Sep 20:33
65ee7ce

Choose a tag to compare

Akka.Hosting 1.5.48.1

02 Sep 15:59
1.5.48.1
c4138d9

Choose a tag to compare

1.5.48.1 September 2nd 2025

Introduces new health check functionality and completey replaces Akka.HealthChecks

Problems with Akka.HealthChecks

There are a few major problems with Akka.HealthChecks:

  1. Hair triggers that can inadvertently nuke an otherwise functioning Akka.NET cluster: see petabridge/akkadotnet-healthcheck#278 and petabridge/akkadotnet-healthcheck#237 - we have had to do constant firefighting to get these right over the years. The fundamental problem is that Akka.HealthChecks tries to do too much and doesn't give the underlying systems time to recover, resulting in wild swings in availability. The new design approaches these things much more carefully and, generally, tries to use fewer, more meaningful health checks.
  2. Clunky and awkward to configure - you have to configure health checks in three places, you have to install several different NuGet packages, and there are a lot of settings + moving parts involved. A lot of this is legacy baggage from before Microsoft.Extensions.Diagnostics.HealthChecks existed.
  3. Difficult to customize - writing custom health checks with Akka.HealthCheck is... arduous, to say the least.

How This Feature Solves Them

  1. No additional packages - Akka.Hosting now takes a direct dependency on Microsoft.Extensions.Diagnostics.HealthChecks and exposes APIs for configuring Akka.NET-specific health checks that will be registered with the HealthCheckService.
  2. Automatic registration of health checks with HealthCheckService - if you call any of the WithHealthCheck overloads on the AkkaConfigurationBuilder, those types will automatically be registered with the Microsoft.Extensions.Diagnostics.HealthChecks.HealthCheckService and they will "just work." No additional API calls required - happens automatically.
  3. Automatic health checks for core Akka and Akka.Cluster - we ship with two built in checks out of the box: an ActorSystem liveness check - if it's dead, the check fails. And an Akka.Cluster "have we joined the cluster yet?" readiness check.

These are not enabled by default - you have to opt-in to turning them on.

You can see what the outputs of this look like by running:

dotnet run --project src/Examples/Akka.Hosting.Asp.LoggingDemo/Akka.Hosting.Asp.LoggingDemo.csproj

This will expose the output of both of these healthchecks as pretty-printed JSON at http://localhost:5000/healthz

{
  "status": "Healthy",
  "totalDuration": "00:00:00.0002317",
  "checks": [
    {
      "name": "ActorSystem Available",
      "status": "Healthy",
      "duration": "00:00:00.0000138",
      "description": "ActorSystem is running.",
      "tags": [
        "akka"
      ],
      "data": {}
    },
    {
      "name": "cluster.join",
      "status": "Healthy",
      "duration": "00:00:00.0000248",
      "description": "Successfully joined Akka.NET cluster after [0:00:06.3427821].",
      "tags": [
        "ready",
        "akka.cluster",
        "akka"
      ],
      "data": {}
    }
  ]
}
  1. Easy to customize - we expose several types of helper methods, all called WithHealthCheck, that make it very easy to define a health check. For example:
builder.WithHealthCheck("FooActor alive", async (system, registry, cancellationToken) =>
        {
            /*
             * N.B. CancellationToken is set by the call to MSFT.EXT.DIAGNOSTICS.HEALTHCHECK,
             * so that value could be "infinite" by default.
             *
             * Therefore, it might be a really, really good idea to guard this with a non-infinite
             * timeout via a LinkedCancellationToken here.
             */
            try
            {
                var fooActor = await registry.GetAsync<FooActor>(cancellationToken);

                try
                {
                    var r = await fooActor.Ask<ActorIdentity>(new Identify("foo"), cancellationToken: cancellationToken);
                    if (r.Subject.IsNobody())
                        return HealthCheckResult.Unhealthy("FooActor was alive but is now dead");
                }
                catch (Exception e)
                {
                    return HealthCheckResult.Degraded("FooActor found but non-responsive", e);
                }
            }
            catch (Exception e2)
            {
                return HealthCheckResult.Unhealthy("FooActor not found in registry", e2);
            }

            return HealthCheckResult.Healthy("fooActor found and responsive");
        });

A basic lambda function can handle it - the only reason this function is as complicated as this is because I wanted to include different reasons for why it failed in the description. You can also implement your own IAkkaHealthCheck and pass it into a WithHealthCheck method that way too.