Nservicebus: Make sure that implementing a custom TimeoutManager is possible

Created on 1 Mar 2016  路  6Comments  路  Source: Particular/NServiceBus

Context

This is the result of TimeoutManager v6 meeting between @andreasohlund @danielmarbach @SzymonPobiega @timbussmann @Scooletz.

We agreed that we should not be changing TM implementation in V6 (it will be the same as for V5). What we want to make sure though is that currently available extensions points in V6 will enable us to have ability to change TM at the persister level in minor releases of V6.

Goal

The goal of this issue is to create a spike that will prove we are able to freely change Timeouts implementation at the persister level with minor releases of V6. For example we might want to remove any satellites and store timeouts directly in sql tables in case of NHiberante.

One of the approaches proposed was to allow disabling Timeouts feature and register a behavior what will handle message differal.

Most helpful comment

if we want to fix it in the minor release by having an external package (say NServiceBus.TimeoutManager) then we can prove we can do it outside of the transport.

Yes it would mean that we would need to release a minor of the transport to allow for it to be plugged in. I'd say that's something we can live with?

install-package NServiceBus.NewPerformantTM

update-package NServiceBus.RabbitMQ

.UseTransport<RabbitMQ>().WithExternalMessageDeferal<PerformantTM>()

where

PerformantTM: IDeferMessages ?

All 6 comments

Ping the squad if you want to get approval

Event if I was not there I'd like to be involved in this, at least at the architectural level.

Since we know, AzureServiceBus proves this, that the tranport can take full control over deferred messaging I'm going to close this one since we can always release a transport that provides a full customized timeoutmanager as a non breaking change.

@andreasohlund this was not the point of this issue. The point was to prove that we can build an alternative to the built-in timeout manager _outside of the transport_. The problem is, we can provide a built-in defer capability for SQL Server transport but not for RabbitMQ and MSMQ. If we want to fix it in the minor release by having an external package (say NServiceBus.TimeoutManager) then we can prove we can do it outside of the transport.

if we want to fix it in the minor release by having an external package (say NServiceBus.TimeoutManager) then we can prove we can do it outside of the transport.

Yes it would mean that we would need to release a minor of the transport to allow for it to be plugged in. I'd say that's something we can live with?

install-package NServiceBus.NewPerformantTM

update-package NServiceBus.RabbitMQ

.UseTransport<RabbitMQ>().WithExternalMessageDeferal<PerformantTM>()

where

PerformantTM: IDeferMessages ?

:+1:

Was this page helpful?
0 / 5 - 0 ratings

Related issues

SeanFeldman picture SeanFeldman  路  9Comments

andreasohlund picture andreasohlund  路  8Comments

timbussmann picture timbussmann  路  10Comments

andreasohlund picture andreasohlund  路  7Comments

marinkobabic picture marinkobabic  路  8Comments