![]() |
VOOZH | about |
dotnet add package Raycynix.Extensions.Messaging --version 1.0.1
NuGet\Install-Package Raycynix.Extensions.Messaging -Version 1.0.1
<PackageReference Include="Raycynix.Extensions.Messaging" Version="1.0.1" />
<PackageVersion Include="Raycynix.Extensions.Messaging" Version="1.0.1" />Directory.Packages.props
<PackageReference Include="Raycynix.Extensions.Messaging" />Project file
paket add Raycynix.Extensions.Messaging --version 1.0.1
#r "nuget: Raycynix.Extensions.Messaging, 1.0.1"
#:package Raycynix.Extensions.Messaging@1.0.1
#addin nuget:?package=Raycynix.Extensions.Messaging&version=1.0.1Install as a Cake Addin
#tool nuget:?package=Raycynix.Extensions.Messaging&version=1.0.1Install as a Cake Tool
Raycynix.Extensions.Messaging contains the transport-agnostic messaging foundation for Raycynix applications.
AddRaycynixMessaging(...)MessagingBuilderMessagingConfigurationJsonMessagingConfigurationGrpcMessagingConfigurationIMessageSerializerIMessageEnvelopeFactoryIRequestEnvelopeFactoryIDirectRequestClientIMessageCodecIMessageCodecResolverIMessagePublisherIMessageHandler<TMessage>MessageEnvelope<TMessage>RequestEnvelope<TRequest>ResponseEnvelope<TResponse>SerializedMessageNewtonsoft.JsonAddGrpcMessage<TMessage>(...)Example appsettings.json:
{
"MessagingConfiguration": {
"SourceName": "orders-service",
"DefaultFormat": "Json",
"Outbox": {
"Enabled": true,
"EnableRecovery": true,
"AutoDispatchOnPublish": false
},
"IncomingProcessing": {
"TrustedSources": [
"orders.service"
]
}
}
}
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-SourcetraceparentISecurityContext is availableFor a concrete transport, add one of the provider packages:
Raycynix.Extensions.Messaging.KafkaRaycynix.Extensions.Messaging.RabbitMQRaycynix.Extensions.Messaging.HttpJsonRaycynix.Extensions.Messaging.GrpcThe base package also includes:
ISecurityContext projection from messaging headersIf you need durable inbox and outbox storage instead of the built-in in-memory implementation, add Raycynix.Extensions.Messaging.Database on top of the shared database infrastructure.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 net10.0 is compatible. net10.0-android net10.0-android was computed. net10.0-browser net10.0-browser was computed. net10.0-ios net10.0-ios was computed. net10.0-maccatalyst net10.0-maccatalyst was computed. net10.0-macos net10.0-macos was computed. net10.0-tvos net10.0-tvos was computed. net10.0-windows net10.0-windows was computed. |
Showing the top 5 NuGet packages that depend on Raycynix.Extensions.Messaging:
| Package | Downloads |
|---|---|
|
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.HttpJson
HTTP JSON direct request/response transport for Raycynix messaging with shared envelope propagation, HttpClient 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.Grpc
gRPC direct request/response transport for Raycynix messaging with logical operation routing, generated client integration, and configuration-based registration. |
|
|
Raycynix.Extensions.Messaging.Kafka
Kafka transport integration for Raycynix messaging with publisher registration, inbound consumer hosting, retry/dead-letter support, and configuration-based setup. |
This package is not used by any popular GitHub repositories.
See the package-local CHANGELOG.md for the full change history. Override PackageReleaseNotes in the package project file for major release-specific notes.