Raycynix.Extensions.Messaging
0.11.0
See the version list below for details.
dotnet add package Raycynix.Extensions.Messaging --version 0.11.0
NuGet\Install-Package Raycynix.Extensions.Messaging -Version 0.11.0
<PackageReference Include="Raycynix.Extensions.Messaging" Version="0.11.0" />
<PackageVersion Include="Raycynix.Extensions.Messaging" Version="0.11.0" />
<PackageReference Include="Raycynix.Extensions.Messaging" />
paket add Raycynix.Extensions.Messaging --version 0.11.0
#r "nuget: Raycynix.Extensions.Messaging, 0.11.0"
#:package Raycynix.Extensions.Messaging@0.11.0
#addin nuget:?package=Raycynix.Extensions.Messaging&version=0.11.0
#tool nuget:?package=Raycynix.Extensions.Messaging&version=0.11.0
Raycynix.Extensions.Messaging
Raycynix.Extensions.Messaging contains the transport-agnostic messaging foundation for Raycynix applications.
What it contains
AddRaycynixMessaging(...)MessagingBuilderMessagingConfigurationJsonMessagingConfigurationGrpcMessagingConfigurationIMessageSerializerIMessageEnvelopeFactoryIRequestEnvelopeFactoryIDirectRequestClientIMessageCodecIMessageCodecResolverIMessagePublisherIMessageHandler<TMessage>MessageEnvelope<TMessage>RequestEnvelope<TRequest>ResponseEnvelope<TResponse>SerializedMessage- built-in JSON serialization through
Newtonsoft.Json - delegate-based gRPC/protobuf codec registration through
AddGrpcMessage<TMessage>(...) - transport-neutral message envelope creation and serialization
- transport-neutral direct request/response abstractions
- incoming dispatch pipeline with retry, deduplication, and idempotency foundations
- optional metrics/observability integration
- scoped envelope/request factories that can project ambient security context safely
- in-memory inbox/outbox and outbox recovery foundation with dispatch leases
What it does not contain
- broker-specific Kafka client setup
- broker-specific RabbitMQ client setup
- persistent inbox/outbox storage
- database-backed transactional coordination
- broker topology management beyond provider packages
Usage
Register the base package and optional codecs:
builder.Services.AddRaycynixMessaging(builder.Configuration, options =>
{
options.DefaultFormat = MessageFormat.Json;
})
.AddGrpcMessage<MyGrpcMessage>(
message => message.ToByteArray(),
payload => MyGrpcMessage.Parser.ParseFrom(payload.Span));
Register direct request handlers in the shared pipeline:
builder.Services.AddRaycynixMessaging(builder.Configuration)
.AddRequestHandler<GetOrderRequest, GetOrderResponse, GetOrderRequestHandler>("orders.v1/get");
Create and publish a message through a broker transport:
public class OrderService(
IMessageEnvelopeFactory envelopeFactory,
IMessagePublisher messagePublisher)
{
public async Task PublishOrderCreatedAsync(OrderCreatedMessage message, CancellationToken cancellationToken)
{
var envelope = envelopeFactory.Create(
message,
destination: "orders.created",
format: MessageFormat.Json);
await messagePublisher.PublishAsync(envelope, cancellationToken);
}
}
Create and send a direct request through HttpJson or Grpc transport:
public class CatalogGateway(
IRequestEnvelopeFactory envelopeFactory,
IDirectRequestClient directRequestClient)
{
public async Task<CatalogItemResponse> GetAsync(string sku, CancellationToken cancellationToken)
{
var request = envelopeFactory.Create(
new CatalogItemRequest(sku),
destination: "catalog/get-item",
format: MessageFormat.Json);
var response = await directRequestClient.SendAsync<CatalogItemRequest, CatalogItemResponse>(
request,
cancellationToken);
return response.Response;
}
}
Register and dispatch incoming handlers:
builder.Services.AddRaycynixMessaging(builder.Configuration)
.AddMessageHandler<OrderCreatedMessage, OrderCreatedHandler>();
public sealed class OrderConsumer(IMessageDispatcher dispatcher)
{
public async Task ConsumeAsync(OrderCreatedMessage message, CancellationToken cancellationToken)
{
var envelope = new MessageEnvelope<OrderCreatedMessage>
{
Message = message,
Destination = "orders.created",
Format = MessageFormat.Json,
MessageId = Guid.NewGuid().ToString("N")
};
await dispatcher.DispatchAsync(envelope, cancellationToken);
}
}
Contract metadata and propagation headers are added automatically:
X-Contract-NameX-Contract-VersionX-Correlation-IdX-Message-Sourcetraceparent- service identity headers when
ISecurityContextis available
For a concrete transport, add one of the provider packages:
Raycynix.Extensions.Messaging.KafkaRaycynix.Extensions.Messaging.RabbitMQRaycynix.Extensions.Messaging.HttpJsonRaycynix.Extensions.Messaging.Grpc
The base package also includes:
- inbound security-header validation
- scoped inbound
ISecurityContextprojection from messaging headers - declarative handler authorization using shared security attributes
- background outbox recovery service for in-memory recovery scenarios
- dispatch leasing to prevent duplicate outbox recovery publishes
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- Microsoft.Extensions.Configuration (>= 10.0.5)
- Microsoft.Extensions.Configuration.Abstractions (>= 10.0.5)
- Microsoft.Extensions.Configuration.Binder (>= 10.0.5)
- Microsoft.Extensions.DependencyInjection (>= 10.0.5)
- Microsoft.Extensions.Hosting.Abstractions (>= 10.0.5)
- Newtonsoft.Json (>= 13.0.4)
- Raycynix.Extensions.Configuration (>= 0.2.1)
- Raycynix.Extensions.Contracts (>= 0.2.1)
- Raycynix.Extensions.Messaging.Abstractions (>= 0.8.0)
- Raycynix.Extensions.Metrics.Abstractions (>= 0.2.1)
- Raycynix.Extensions.Security.Abstractions (>= 0.3.0)
NuGet packages (5)
Showing the top 5 NuGet packages that depend on Raycynix.Extensions.Messaging:
| Package | Downloads |
|---|---|
|
Raycynix.Extensions.Messaging.HttpJson
HTTP JSON direct request/response transport for Raycynix messaging with shared envelope propagation, HttpClient integration, and configuration-based registration. |
|
|
Raycynix.Extensions.Messaging.Database
Database-backed messaging inbox and outbox persistence with ambient unit-of-work support, optimistic concurrency leasing, retention cleanup, and configuration-based setup on the shared Raycynix DatabaseContext. |
|
|
Raycynix.Extensions.Messaging.Grpc
gRPC direct request/response transport for Raycynix messaging with logical operation routing, generated client integration, and configuration-based registration. |
|
|
Raycynix.Extensions.Messaging.RabbitMQ
RabbitMQ transport integration for Raycynix messaging with topology bootstrap, inbound consumer hosting, retry/dead-letter handling, and configuration-based setup. |
|
|
Raycynix.Extensions.Messaging.Kafka
Kafka transport integration for Raycynix messaging with publisher registration, inbound consumer hosting, retry/dead-letter support, and configuration-based setup. |
GitHub repositories
This package is not used by any popular GitHub repositories.