This is part of the NServiceBus Upgrade Guide from Version 5 to 6, which also includes the following individual upgrade guides for specific components:
Feature Details
- Assembly Scanning Changes in NServiceBus Version 6
- No Async Suffix
- Dependency Injection Changes in NServiceBus Version 6
- Deprecated TransportMessage in NServiceBus Version 6
- Endpoint API changes in NServiceBus Version 6
- Extension Seam Changes in NServiceBus Version 6
- Migrate handlers and sagas to Version 6
- Header API changes in NServiceBus Version 6
- Messaging Changes in NServiceBus Version 6
- Moving away from IBus in Version 6
- Recoverability Changes in Version 6
- Serialization Changes in NServiceBus Version 6
- Subscription Changes in NServiceBus Version 6
- Transaction Configuration Changes in NServiceBus Version 6
Transports
- Azure Service Bus Transport (Legacy) Upgrade Version 6 to 7
- RabbitMQ Transport Upgrade Version 3 to 4
- SQL Server Transport Upgrade Version 2 to 3
- SQL Server Transport Upgrade - Supporting Unicode in Headers
Persistence
- Upgrade from NServiceBus Azure Version 6
- NHibernate Persistence Upgrade Version 6 to 7
- NHibernate Persistence - Resolving incorrect timeout table indexes
- RavenDB Persistence Upgrade from 3 to 4
Hosting
Other
- Moving to the DataBus AzureBlobStorage Package
- Azure Cloud Services Host Upgrade Version 6 to 7
- NServiceBus.Azure package deprecated
- Gateway Upgrade Version 1 to 2
- NServiceBus Testing Upgrade Version 5 to 6
- Callback Changes in NServiceBus Version 6
- Migrating the distributor to use sender-side distribution
- Tool and Helper Changes in NServiceBus Version 6
The synchronous request-response feature, also known as callbacks, has been moved from the NServiceBus core package to its own NServiceBus.Callbacks NuGet package. This package must be used in order to use the callback functionality in NServiceBus version 6.
The API was also modified. The version 6 API is asynchronous by default and allows access to the response message. It is no longer possible to use callbacks inside handlers or sagas, because extension methods are available only on the message session. The differences in the API are covered in more detail in Callbacks.
The NServiceBus.
package has to be referenced only by the requesting endpoint. The responding endpoint needs NServiceBus.
only if it replies with int
or enum
types.
// For NServiceBus version 5.x
var requestMessage = new RequestMessage();
bus.Send(requestMessage)
.Register(
callback: asyncResult =>
{
var localResult = (CompletionResult) asyncResult.AsyncState;
var response = (ResponseMessage) localResult.Messages[0];
},
state: null);
// For Callbacks version 1.x
var message = new RequestMessage();
var response = await endpoint.Request<ResponseMessage>(message);
In order to use callbacks, the endpoint must be uniquely addressable:
var instanceDiscriminator = ConfigurationManager.AppSettings["InstanceId"];
endpointConfiguration.MakeInstanceUniquelyAddressable(instanceDiscriminator);
This ID should never be hard-coded; it can be read from a configuration file or from the environment (e.g. role ID in Azure) so that it can be changed without code changes and redeployment.