Phema.RabbitMq
3.0.0-preview3.0.4
This is a prerelease version of Phema.RabbitMq.
There is a newer version of this package available.
See the version list below for details.
See the version list below for details.
dotnet add package Phema.RabbitMq --version 3.0.0-preview3.0.4
NuGet\Install-Package Phema.RabbitMq -Version 3.0.0-preview3.0.4
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Phema.RabbitMq" Version="3.0.0-preview3.0.4" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Phema.RabbitMq --version 3.0.0-preview3.0.4
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: Phema.RabbitMq, 3.0.0-preview3.0.4"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install Phema.RabbitMq as a Cake Addin #addin nuget:?package=Phema.RabbitMq&version=3.0.0-preview3.0.4&prerelease // Install Phema.RabbitMq as a Cake Tool #tool nuget:?package=Phema.RabbitMq&version=3.0.0-preview3.0.4&prerelease
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
Phema.RabbitMQ
This is an attempt to create a simple way for safe and predictable application deploy with a versioned release-specific topology in a distributed systems
Concepts
- Release immutability
- The topology for each release must be strictly defined and not changed during its existence
- There is no such thing as:
- Canceling consumers
- Removing queues and exchanges
- Change bindings
- There is no such thing as:
- The topology for each release must be strictly defined and not changed during its existence
- Declarativeness and simplicity
- All parts are defined by describing their state
- Intuitive, RabbitMQ-close fluent interfaces
- Built-in modular serialization library, so working with objects, not bytes
- Modularity and flexibility
- If no customers is needed, just do not add
Phema.RabbitMQ.Consumers
package - Each group has its own connection. Managing groups you manage connections
- If no customers is needed, just do not add
Installation
$> dotnet add package {{ PackageName }}
Packages
Phema.RabbitMQ.Core
- Core factories, options and extensionsPhema.RabbitMQ.Exchanges
- Exchanges,.AddExchangeGroup()
extensionPhema.RabbitMQ.Queues
- Queues,.AddQueueGroup()
extensionPhema.RabbitMQ.Producers
- Producers,.AddProducerGroup()
extensionPhema.RabbitMQ.Consumers
- Consumers,.AddConsumerGroup()
extensionPhema.RabbitMQ
- Meta package
Usage
// Search for Phema.Serialization packages
services.AddPhemaJsonSerializer();
// Consumers
services.AddPhemaRabbitMQ("InstanceName", "amqp://connection.string")
.AddQueueGroup(group =>
group.AddQueue("QueueName")
.Durable())
.AddConsumerGroup(group =>
group.AddConsumer<Payload, PayloadConsumer>("QueueName")
.Count(2));
// Producers
services.AddPhemaRabbitMQ("InstanceName", factory => ...)
.AddExchangeGroup(group =>
group.AddDirectExchange("ExchangeName")
.Durable())
.AddProducerGroup(group =>
group.AddProducer<Payload>("ExchangeName", "QueueName")
.Persistent());
Supported
- Consumers and producers priority
- Queue and message time to live
- Max message count and size limitations
- Lazy, durable and exclusive queues
- Batch produce
- Durable, internal, dead letter, bound and alternate exchanges
- Reject-publish when queue is full
- Purge and delete declarative operations
- Confirm and transactional channel modes
- NoWait operations
- Message persistency
- Groups
- Queue
QueueName
inQueuesGroup
group will beQueuesGroup.QueueName
) - Each group has own named connection
- Queue
Queues
- Declare durable queue with
Durable
extension - Declare exclusive queue with
Exclusive
extension - Declare queue without waiting with
NoWait
extension - Bind exchange to exchange with
BoundTo
extension - Declare lazy queue with
Lazy
extension - Set queue max message count with
MaxMessageCount
extension - Set queue max message size in bytes with
MaxMessageSize
extension - Set dead letter exchange with
DeadLetterExchange
extension - Set queue ttl with
WithTimeToLive
extension - Set message ttl with
WithMessageTimeToLive
extension - Set queue max priority with
WithMaxPriority
extension - Explicitly delete queue with
Deleted
extension - Delete queue automatically with
AutoDelete
extension - Add custom arguments with
WithArgument
extension
Exchanges
- Delete exchange automatically with
AutoDelete
extension - Explicitly delete exchange with
Deleted
extension - Bind exchange to exchange with
BoundTo
extension - Add custom arguments with
WithArgument
extension - Declare alternate exchange with
AlternateExchange
extension - Declare durable exchange with
Durable
extension - Declare exchange without waiting with
NoWait
extension - Declare exchange as internal with
Internal
extension - Declare exchange with
AddDirectExchange(...)
,AddFanoutExchange(...)
,AddHeadersExchange(...)
,AddTopicExchange(...)
extensions
Consumers
- Create
IRabbitMqConsumer<TPayload>
- Tag consumers using
WithTag
extension - Limit prefetch count with
PrefetchCount
extension - Scale consumers by using
Count
extension - Declare exclusive consume with
Exclusive
extension - Forbid to consume own producers with
NoLocal
extension - When no need to ack explicitly use
AutoAck
extension - Requeue messages on fail with
Requeue
extension - Set consumer priority with
Priority
extension - Add custom arguments with
WithArgument
extension - All consumers start in
IHostedService
- Use
IRabbitMQConsumerFactory
for custom message handling
Producers
- Inject
IRabbitMQProdicer<TPayload>
and useProduce
orBatchProduce
- Set routing key
RoutingKey
extension - Set mandatory with
Mandatory
extension - Set message priority with
Priority
extension - Set message ttl with
MessageTimeToLive
extension - Use channel transactional mode with
Transactional
extension - Use channel confirm mode with
WaitForConfirms
extension - Use message persistence with
Persistent
extension - Configure headers with
WithHeader
extension - Configure properties with
WithProperty
extension
Limitations
- Uses only
Microsoft.Extensions.DepencencyInjection
package - No dynamic topology declaration
- No queues
- No exchanges
- No producers
- No consumers
- No
.Redeclared()
and.Purged()
because it breaks consistenty- Deploy
first_node
- Purge
queue
first_node
starts produce messages- Deploy
second_node
- Purge
queue
- No
first_node
messages survived
- Deploy
- There is a problem when one type of payload is used in different producers, so
IRabbitMQProducer<TPayload>
abstraction leak
Tips
RoutingKey
isQueue.Name
by default- Do not use same group(connection) for consumers and producers
IRabbitMQConnectionFactory
- singleton dependency inIServiceProvider
per instance for custom connections- If queue or exchange is default or exists, binding goes withot declaration
- Used
ISerializer
fromPhema.Serialization...
search for nuget package to add
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. |
.NET Core | netcoreapp3.0 is compatible. netcoreapp3.1 was computed. |
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
-
.NETCoreApp 3.0
- Phema.RabbitMQ.Consumers (>= 3.0.0-preview3.0.4)
- Phema.RabbitMQ.Exchanges (>= 3.0.0-preview3.0.4)
- Phema.RabbitMQ.Producers (>= 3.0.0-preview3.0.4)
- Phema.RabbitMQ.Queues (>= 3.0.0-preview3.0.4)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
3.1.8 | 1,430 | 10/12/2019 |
3.1.7 | 1,231 | 10/12/2019 |
3.1.6 | 1,234 | 10/12/2019 |
3.1.5 | 1,302 | 9/25/2019 |
3.1.4 | 326 | 9/3/2019 |
3.1.3 | 320 | 9/1/2019 |
3.1.2 | 316 | 8/31/2019 |
3.1.1 | 337 | 8/31/2019 |
3.1.0 | 304 | 8/30/2019 |
3.0.0 | 1,249 | 7/24/2019 |
3.0.0-preview3.0.5 | 325 | 4/1/2019 |
3.0.0-preview3.0.4 | 296 | 3/28/2019 |