ResearchCave Technology

ResearchCave.Messaging (1.1.24)

Published 2026-07-07 22:34:56 +03:00 by admin

Installation

dotnet nuget add source --name ResearchCave --username your_username --password your_token http://git.researchcave.com/api/packages/ResearchCave/nuget/index.json
dotnet add package --source ResearchCave --version 1.1.24 ResearchCave.Messaging

About this package

Wolverine and NATS messaging defaults for ResearchCave applications.

ResearchCave.Messaging

Shared Wolverine + NATS messaging defaults for ResearchCave microservices.

Install

Reference the package from your service project:

<PackageReference Include="ResearchCave.Messaging" Version="1.0.0" />

Or reference the project directly while developing locally.

Configure NATS

Add a Nats section to appsettings.json:

{
  "Nats": {
    "Url": "nats://researchcave:rc_is_nats@server:4222",
    "QueueGroup": "sentient",
    "TimeoutSeconds": 5
  }
}

Recommended keys:

  • Url: NATS broker URL. Credentials may be included in the URL.
  • QueueGroup: queue group for competing consumers in the same microservice group.
  • TimeoutSeconds: timeout used by broker health checks and connection probes.

Service Names

You can point Nats:Url at any host name your environment can resolve. This works well with Docker Compose service names, Kubernetes service DNS, Consul DNS, or normal DNS:

{
  "Nats": {
    "Url": "nats://nats:4222",
    "QueueGroup": "sentient",
    "TimeoutSeconds": 5
  }
}

ResearchCave.Messaging does not own service discovery. It passes the configured NATS URL to Wolverine. Keep service discovery, DNS, and deployment-specific name resolution in ResearchCave.ServiceDefaults or your hosting environment.

Register Messaging

In Program.cs:

using ResearchCave.Messaging.Extensions;

var builder = WebApplication.CreateBuilder(args);

builder.AddResearchCaveMessaging();

var app = builder.Build();

app.Run();

The extension configures:

  • Wolverine
  • NATS transport
  • ResearchCave serialization defaults
  • retry policy
  • NATS broker health check
  • optional durable inbox/outbox defaults
  • optional durable local queues
  • ResearchCave message subject helpers

Send Messages

Inject Wolverine's IMessageBus:

using Wolverine;

public sealed class OrdersService(IMessageBus bus)
{
    public Task PublishAsync(OrderCreated message, CancellationToken cancellationToken)
        => bus.PublishAsync(message).AsTask();
}

Handle Messages

Create a handler class in your service:

public static class OrderCreatedHandler
{
    public static Task Handle(OrderCreated message, CancellationToken cancellationToken)
    {
        // handle message
        return Task.CompletedTask;
    }
}

Message Naming

Use simple message types for cross-service contracts:

public sealed record OrderCreated(Guid OrderId, DateTimeOffset CreatedAt);

The library includes subject naming helpers:

using ResearchCave.Messaging.Conventions;

var subject = ResearchCaveMessageConventions.SubjectFor<OrderCreated>();
// researchcave.order.created

Advanced Overrides

The library owns sensible ResearchCave defaults for Wolverine, NATS, retry, serialization, and health checks. JetStream and durable queues are opt-in so the same service can use plain NATS for transient events and JetStream for durable endpoints.

Configure service-specific message topology in the Wolverine callback:

builder.AddResearchCaveMessaging(
    options =>
{
    options.SubjectPrefix = "researchcave";
    options.StreamName = "RESEARCHCAVE";
},
    wolverine =>
{
    wolverine.PublishMessage<OrderCreated>()
        .ToNatsSubject("researchcave.orders.created");

    wolverine.ListenToNatsSubject("researchcave.orders.critical")
        .UseJetStream("RESEARCHCAVE");
});

For most microservices, prefer the simple Nats config section and builder.AddResearchCaveMessaging().

Dependencies

ID Version Target Framework
ResearchCave.Common 1.1.24 net10.0
WolverineFx.Nats 6.16.0 net10.0
WolverineFx.RuntimeCompilation 6.16.0 net10.0
Details
NuGet
2026-07-07 22:34:56 +03:00
1
ResearchCave.Messaging
16 KiB
Assets (2)
Versions (21) View all
1.1.48 2026-07-28
1.1.47 2026-07-28
1.1.46 2026-07-23
1.1.45 2026-07-20
1.1.44 2026-07-20