Bot releases are hidden (Show)
Published by johnsimons about 10 years ago
As part of this release we fixed 2 issues.
This fixes the polarity that checks when to run the clean-up procedure
We updated NService Bus from 3.0.3.32 to 4.6.4. The old version saga stop work.
You can download this release from nuget
Published by johnsimons about 10 years ago
As part of this release we fixed 2 issues.
This fixes the polarity that checks when to run the clean-up procedure
We updated NService Bus from 3.0.3.32 to 4.6.4. The old version saga stop work.
You can download this release from nuget
Published by johnsimons about 10 years ago
As part of this release we fixed 2 issues.
This fixes the polarity that checks when to run the clean-up procedure
We updated NService Bus from 3.0.3.32 to 4.6.4. The old version saga stop work.
You can download this release from nuget
Published by johnsimons about 10 years ago
As part of this release we fixed 2 issues.
This fixes the polarity that checks when to run the clean-up procedure
We updated NService Bus from 3.0.3.32 to 4.6.4. The old version saga stop work.
You can download this release from nuget
Published by johnsimons about 10 years ago
As part of this release we had 3 commits which resulted in 1 issue being closed.
This fixes the polarity that checks when to run the clean-up procedure
You can download this release from nuget
Published by indualagarsamy about 10 years ago
http://docs.particular.net/nservicebus/upgradeguides/4to5
As part of this release we had 97 issues closed.
In order to better follow the release cycle of RavenDB, the RavenDB functionality has been removed from the core into its own repository https://github.com/Particular/NServiceBus.RavenDB and nuget
https://www.nuget.org/packages/NServiceBus.RavenDB
Moved to a separate repo https://github.com/Particular/NServiceBus.Distributor.Msmq and NuGet https://www.nuget.org/packages/NServiceBus.Distributor.MSMQ/
In order to provide the same level of consistency as users that are running with DTC transactions enabled we should introduce a mode of operations that provides those same guarantees without requiring a DTC compliant transport and storage.
The following is the high-level design
Content trimmed. See full issue
To simplify the api by not exposing IBus
methods not relevant for a sendonly bus
The extension points IConfigureRole
, IConfigureRole<T>
and IRole
no longer exist.
AsA_Client
and AsA_Server
can still be used.
AsA_Publisher
has been deprecated and should be replaced with AsA_Server
So where previously this was used
Bus.Publish(Bus.CreateInstance<OrderCancelled>(o =>
{
o.OrderNumber = message.OrderNumber;
o.ClientId = message.ClientId;
}));
Now this is used
Bus.Publish<OrderCancelled>(o =>
{
o.OrderNumber = message.OrderNumber;
o.ClientId = message.ClientId;
});
When the timeout persister logs a warning about a failure it will now include the exception in the log entry
The Action
parameter overload of UnicastBus.Start(Action)` has been removed
This was an overly complex approach to running installers. As such it has been simplified
Too many people forget to override this method. As such it will now be abstract.
by using FormatterServices.GetUninitializedObject
The NSB interfaces dll was created to allow people to have a smaller dependency when creating a messages assembly. With the introduction of unobtrusive messages that is no longer required. As such NServiceBus.dll
will be merged into NServiceBus.Core.dll
. Also the NServiceBus.Interfaces
nuget will be deprecated.
In version 5 multi-message sends is being removed. So serialization of an array of messages is no longer required.
Note that deserialization to an array is still required for backwards compatibility with earlier versions of NSB
In version 5 multi-message sends is being removed. So Wrapping messages is no longer required. It only remains for compatibility with 3.0 endpoints
ISaga
looks like an extension point. But in reality it is an internal concern which allows the framework to gain access to a non-generic version of the sagadata. See #1762
So ISaga
(#1762) and ISaga<T>
(#1765) were obsoleted
The replacement for the is a non-generic base class Saga
. This class is a legitimating extension point, although most scenarios would still use Saga<T>
. All functionality of Saga<T>
will be pushed up to Saga
. Saga<T>
will now inherit from Saga
.
Not used for anything.
With the removal of ISaga
and ISaga<T>
the IConfigurable
interface is redundant.
Since the Predicate is executed at the subscriber side it is not efficient. Also this is a confusing API since
consumer often, incorrectly, believe it is publisher side filtering. Instead create a Handler that does this
filtering logic and then, optionally, calls DoNotContinueDispatchingCurrentMessageToHandlers
. This
Handler should be ordered to run before other handlers.
related to https://github.com/Particular/NServiceBus/issues/1546
The reasons for doing this are as follows
What this means for consumers
Note the earlier versions of NServiceBus will still be compatible and supported for .net 4
For more information on .net 4.5 see
so if a user forgets to have this line Feature.Enable<Sagas>();
but still has a saga no guidance is given as to why that saga is not executed
In fact there is misinformation
Could not find a saga for the message type "Message1". Going to invoke SagaNotFoundHandlers.
When you call Disable on transactions, your call is still wrapped in a transactionscope
So to get rid of all transactional behavior you need to do both
Configure.Transactions.Advanced(a => a.DoNotWrapHandlersExecutionInATransactionScope());
Configure.Transactions.Disable();
Would be better to remove the scope automatically
Fix the incorrect message:
No message found with ID 'NServiceBus.MessageId'. Going to check headers of all messages for one with 'NServiceBus.MessageId' or 'NServiceBus.CorrelationId'.
Since the gateway is a optional component we should pull it out of the core and auto enable it if users reference it.
If one configures the Bus with
Configure.Transactions.Disable();
then no transactions should be used at all (at least I understand this that way).
But even if Transactions are disabled, the MsmqDequeueStrategy
calls TransportReceiver.TryProcess(TransportMessage): bool
which starts a new Transaction scope.
This behavior can currently be fixed, if one set explicitly
Configure.Transactions.Disable(s => s.DoNotWrapHandlersExecutionInATransactionScope());
Content trimmed. See full issue
https://github.com/Particular/NServiceBus.NLog
https://github.com/Particular/NServiceBus.Lo4Net
The startupAction
parameter of UnicastBus.Start
simply executed the action immediately before the actual start of the bus. This provided no real value since a consumer can simply execute said action prior to calling Start
.
Each of the messaging APIs that involve multiple messages on IBus
have been removed. Below is the table on how to replace these.
Old Method | Replacement Method |
---|---|
Publish(T[] messages); | Publish(T message); |
SendLocal(object[] messages); | SendLocal(object message); |
Send(object[] messages); | Send(object message); |
Send(string destination, object[] messages); | Send(string destination, object message); |
Send(Address address, object[] messages); | Send(Address address, object message); |
Send(string destination, string correlationId, object[] messages); | Send(string destination, string correlationId, object message); |
SendToSites(IEnumerable siteKeys, object[] messages); | SendToSites(IEnumerable siteKeys, object message); |
Defer(TimeSpan delay, object[] messages); | Defer(TimeSpan delay, object message); |
Defer(DateTime processAt, object[] messages); | Defer(DateTime processAt, object message); |
Reply(object[] messages); | Reply(object message); |
To capture the version of the users endpoint that is running. Extract the current code (used in side by side mode in the host) and make it available on the core.
var configuration = new BusConfiguration();
configuration.EndpointVersion("1.2.1"))
Replacement is IBus
RavenDB has been split out of the core to a separate NServiceBus.RavenDB assembly. This new assembly targets RavenDB 2.5. Please see docs.particular.net for more information
The new api requires the endpoint name to be specified up front:
configuration.EndpointName("someName");
Replacement is TransportConfig
section instead
Throw an exception if IWantCustomInitialization
is used on anything which doesn't also implement IConfigureThisEndpoint
.
Which means they are global (last one wins) across all bus instances
In PerformanceMonitorUsersInstaller
we have hardcoded the group name to "Performance Monitor Users", which means that for non English OSs, that will not work.
IWantToRunWhenBusStartsAndStops.Start
throws
This case is now explicitly detected and a better exception will be thrown.
In Version 5 log4net is no longer embedded inside NServiceBus
So now this code
builder.ConfigureProperty(typeof(DuplicateClass), "SomeProperty", false);
builder.ConfigureProperty(typeof(DuplicateClass), "SomeProperty", true); // this should remove/override the previous property setting
Will result in SomeProperty
being injected as true
Version 5 now has sensible defaults for logging. So logging will still occur from ProfileManager
even if logging is not yet configured.
In Version 5 reading of the logging config bypasses IConfigurationSource
and goes directly to ConfigurationManager.GetSection
Remove the ordering issues that can result in endpoint name being ignored
You can download this release from nuget
Published by andreasohlund about 10 years ago
It's now 4.6.5 , should be 4.6.0
This needs to be hotfixed since it will force users to add asm redirect when upgrading from 4.6.X to 4.6.5
You can download this release from:
Published by indualagarsamy about 10 years ago
As part of this release we had 16 commits which resulted in 2 issues being closed.
In NServiceBus 4.6.3, in a clustered distributor setup, timeouts and deferred messages are delivered to local queue on workers and not to clustered queue.
Timeout messages and deferred messages are delivered directly to a specific local queue (on the server which requested the timeout/deferring) and not to the clustered queue. This bypasses the regular path which involves removing a message from the storage queue and deliver the destination queue on the worker. The worker does not know this and reports back that it is ready to handle a new message after handling the timeout message, which causes the storage queue to grow.
See question on StackOverflow for more information
When an endpoint tries to send a message and if no routing information has been specified in the configuration, then the endpoint throws an unfriendly exception.
You can download this release from nuget
Published by johnsimons about 10 years ago
As part of this release we had 3 issues closed.
Since the dawn of time we've only supported 1 encryption key in the ootb encryption(AES) and this makes it close to impossible to switch keys without losing data, messages in SLR, or ERROR queues would have the wrong key and fail to decrypt.
The users only options is either to not switch keys which is no good in terms of security best practices or implement their own ISecurityService
The proposed solution is to allow for secondary keys that we fall back to if decryption fails. This way users can add new primary keys (used to encrypt) but still keep the old key(s) around long enough to be able to process messages in SLR or the error queue.
This bug needs to be backported to all supported versions (v3.3 and up)
Docs here: http://docs.particular.net/nservicebus/unobtrusive-mode-messages suggest that you should use a namespace convention for detecting messages. This is cool and I like this convention however if you follow the convention for events/commands and apply the same convention to messages (eg .DefiningMessagesAs(t => t.Namespace != null && t.Namespace.EndsWith(".Messages"))
it exceptions with the following:
An exception of type 'System.NotSupportedException' occurred in NServiceBus.Core.dll but was not handled in user code
Additional information: IDictionary<T, K> is not a supported property type for serialization, use Dictionary<T,K> instead. Type: NServiceBus.Unicast.UnicastBus Property: MessageDispatcherMappings. Consider using a concrete Dictionary<T, K> instead, where T and K cannot be of type 'System.Object'
I think either the docs should be updated to note this issue and suggest a better pattern or the code should exclude NServiceBus.*.Messages and Unicast.Messages from the scan types.
NServiceBus ships with RavenDB Client v2 embedded as part of the core.
As highlighted previously in this discussion a new nuget/dll was released to work against RavenDB v2.5.
So currently anyone using NServiceBus v4 with RavenDB v2.5 Server need to be running the new integration package otherwise them may lose messages!
To ensure that the correct version of the RavenDB integration is being used we need to modify the Raven check that we do in the Core to restrict the upper bound version to be < 2.5
You can download this release from nuget
Published by johnsimons about 10 years ago
As part of this release we had 2 issues closed.
Since the dawn of time we've only supported 1 encryption key in the ootb encryption(AES) and this makes it close to impossible to switch keys without losing data, messages in SLR, or ERROR queues would have the wrong key and fail to decrypt.
The users only options is either to not switch keys which is no good in terms of security best practices or implement their own ISecurityService
The proposed solution is to allow for secondary keys that we fall back to if decryption fails. This way users can add new primary keys (used to encrypt) but still keep the old key(s) around long enough to be able to process messages in SLR or the error queue.
This bug needs to be backported to all supported versions (v3.3 and up)
NServiceBus ships with RavenDB Client v2 embedded as part of the core.
As highlighted previously in this discussion a new nuget/dll was released to work against RavenDB v2.5.
So currently anyone using NServiceBus v4 with RavenDB v2.5 Server need to be running the new integration package otherwise them may lose messages!
To ensure that the correct version of the RavenDB integration is being used we need to modify the Raven check that we do in the Core to restrict the upper bound version to be < 2.5
You can download this release from nuget
Published by andreasohlund about 10 years ago
Legacy release, release notes TBD
Published by johnsimons about 10 years ago
As part of this release we had 1 issues closed.
Since the dawn of time we've only supported 1 encryption key in the ootb encryption(AES) and this makes it close to impossible to switch keys without losing data, messages in SLR, or ERROR queues would have the wrong key and fail to decrypt.
The users only options is either to not switch keys which is no good in terms of security best practices or implement their own ISecurityService
The proposed solution is to allow for secondary keys that we fall back to if decryption fails. This way users can add new primary keys (used to encrypt) but still keep the old key(s) around long enough to be able to process messages in SLR or the error queue.
This bug needs to be backported to all supported versions (v3.3 and up)
You can download this release from nuget
Published by johnsimons about 10 years ago
As part of this release we had 2 issues closed.
Since the dawn of time we've only supported 1 encryption key in the ootb encryption(AES) and this makes it close to impossible to switch keys without losing data, messages in SLR, or ERROR queues would have the wrong key and fail to decrypt.
The users only options is either to not switch keys which is no good in terms of security best practices or implement their own ISecurityService
The proposed solution is to allow for secondary keys that we fall back to if decryption fails. This way users can add new primary keys (used to encrypt) but still keep the old key(s) around long enough to be able to process messages in SLR or the error queue.
This bug needs to be backported to all supported versions (v3.3 and up)
NServiceBus ships with RavenDB Client v2 embedded as part of the core.
As highlighted previously in this discussion a new nuget/dll was released to work against RavenDB v2.5.
So currently anyone using NServiceBus v4 with RavenDB v2.5 Server need to be running the new integration package otherwise them may lose messages!
To ensure that the correct version of the RavenDB integration is being used we need to modify the Raven check that we do in the Core to restrict the upper bound version to be < 2.5
You can download this release from nuget
Published by johnsimons about 10 years ago
As part of this release we had 2 issues closed.
Since the dawn of time we've only supported 1 encryption key in the ootb encryption(AES) and this makes it close to impossible to switch keys without losing data, messages in SLR, or ERROR queues would have the wrong key and fail to decrypt.
The users only options is either to not switch keys which is no good in terms of security best practices or implement their own ISecurityService
The proposed solution is to allow for secondary keys that we fall back to if decryption fails. This way users can add new primary keys (used to encrypt) but still keep the old key(s) around long enough to be able to process messages in SLR or the error queue.
This bug needs to be backported to all supported versions (v3.3 and up)
NServiceBus ships with RavenDB Client v2 embedded as part of the core.
As highlighted previously in this discussion a new nuget/dll was released to work against RavenDB v2.5.
So currently anyone using NServiceBus v4 with RavenDB v2.5 Server need to be running the new integration package otherwise them may lose messages!
To ensure that the correct version of the RavenDB integration is being used we need to modify the Raven check that we do in the Core to restrict the upper bound version to be < 2.5
You can download this release from nuget
Published by johnsimons about 10 years ago
As part of this release we had 3 issues closed.
Since the dawn of time we've only supported 1 encryption key in the ootb encryption(AES) and this makes it close to impossible to switch keys without losing data, messages in SLR, or ERROR queues would have the wrong key and fail to decrypt.
The users only options is either to not switch keys which is no good in terms of security best practices or implement their own ISecurityService
The proposed solution is to allow for secondary keys that we fall back to if decryption fails. This way users can add new primary keys (used to encrypt) but still keep the old key(s) around long enough to be able to process messages in SLR or the error queue.
This bug needs to be backported to all supported versions (v3.3 and up)
Docs here: http://docs.particular.net/nservicebus/unobtrusive-mode-messages suggest that you should use a namespace convention for detecting messages. This is cool and I like this convention however if you follow the convention for events/commands and apply the same convention to messages (eg .DefiningMessagesAs(t => t.Namespace != null && t.Namespace.EndsWith(".Messages"))
it exceptions with the following:
An exception of type 'System.NotSupportedException' occurred in NServiceBus.Core.dll but was not handled in user code
Additional information: IDictionary<T, K> is not a supported property type for serialization, use Dictionary<T,K> instead. Type: NServiceBus.Unicast.UnicastBus Property: MessageDispatcherMappings. Consider using a concrete Dictionary<T, K> instead, where T and K cannot be of type 'System.Object'
I think either the docs should be updated to note this issue and suggest a better pattern or the code should exclude NServiceBus.*.Messages and Unicast.Messages from the scan types.
NServiceBus ships with RavenDB Client v2 embedded as part of the core.
As highlighted previously in this discussion a new nuget/dll was released to work against RavenDB v2.5.
So currently anyone using NServiceBus v4 with RavenDB v2.5 Server need to be running the new integration package otherwise them may lose messages!
To ensure that the correct version of the RavenDB integration is being used we need to modify the Raven check that we do in the Core to restrict the upper bound version to be < 2.5
You can download this release from nuget
Published by johnsimons about 10 years ago
As part of this release we had 3 issues closed.
Since the dawn of time we've only supported 1 encryption key in the ootb encryption(AES) and this makes it close to impossible to switch keys without losing data, messages in SLR, or ERROR queues would have the wrong key and fail to decrypt.
The users only options is either to not switch keys which is no good in terms of security best practices or implement their own ISecurityService
The proposed solution is to allow for secondary keys that we fall back to if decryption fails. This way users can add new primary keys (used to encrypt) but still keep the old key(s) around long enough to be able to process messages in SLR or the error queue.
This bug needs to be backported to all supported versions (v3.3 and up)
Docs here: http://docs.particular.net/nservicebus/unobtrusive-mode-messages suggest that you should use a namespace convention for detecting messages. This is cool and I like this convention however if you follow the convention for events/commands and apply the same convention to messages (eg .DefiningMessagesAs(t => t.Namespace != null && t.Namespace.EndsWith(".Messages"))
it exceptions with the following:
An exception of type 'System.NotSupportedException' occurred in NServiceBus.Core.dll but was not handled in user code
Additional information: IDictionary<T, K> is not a supported property type for serialization, use Dictionary<T,K> instead. Type: NServiceBus.Unicast.UnicastBus Property: MessageDispatcherMappings. Consider using a concrete Dictionary<T, K> instead, where T and K cannot be of type 'System.Object'
I think either the docs should be updated to note this issue and suggest a better pattern or the code should exclude NServiceBus.*.Messages and Unicast.Messages from the scan types.
NServiceBus ships with RavenDB Client v2 embedded as part of the core.
As highlighted previously in this discussion a new nuget/dll was released to work against RavenDB v2.5.
So currently anyone using NServiceBus v4 with RavenDB v2.5 Server need to be running the new integration package otherwise them may lose messages!
To ensure that the correct version of the RavenDB integration is being used we need to modify the Raven check that we do in the Core to restrict the upper bound version to be < 2.5
You can download this release from nuget
Published by johnsimons about 10 years ago
As part of this release we had 3 issues closed.
Since the dawn of time we've only supported 1 encryption key in the ootb encryption(AES) and this makes it close to impossible to switch keys without losing data, messages in SLR, or ERROR queues would have the wrong key and fail to decrypt.
The users only options is either to not switch keys which is no good in terms of security best practices or implement their own ISecurityService
The proposed solution is to allow for secondary keys that we fall back to if decryption fails. This way users can add new primary keys (used to encrypt) but still keep the old key(s) around long enough to be able to process messages in SLR or the error queue.
This bug needs to be backported to all supported versions (v3.3 and up)
Docs here: http://docs.particular.net/nservicebus/unobtrusive-mode-messages suggest that you should use a namespace convention for detecting messages. This is cool and I like this convention however if you follow the convention for events/commands and apply the same convention to messages (eg .DefiningMessagesAs(t => t.Namespace != null && t.Namespace.EndsWith(".Messages"))
it exceptions with the following:
An exception of type 'System.NotSupportedException' occurred in NServiceBus.Core.dll but was not handled in user code
Additional information: IDictionary<T, K> is not a supported property type for serialization, use Dictionary<T,K> instead. Type: NServiceBus.Unicast.UnicastBus Property: MessageDispatcherMappings. Consider using a concrete Dictionary<T, K> instead, where T and K cannot be of type 'System.Object'
I think either the docs should be updated to note this issue and suggest a better pattern or the code should exclude NServiceBus.*.Messages and Unicast.Messages from the scan types.
NServiceBus ships with RavenDB Client v2 embedded as part of the core.
As highlighted previously in this discussion a new nuget/dll was released to work against RavenDB v2.5.
So currently anyone using NServiceBus v4 with RavenDB v2.5 Server need to be running the new integration package otherwise them may lose messages!
To ensure that the correct version of the RavenDB integration is being used we need to modify the Raven check that we do in the Core to restrict the upper bound version to be < 2.5
You can download this release from nuget
Published by johnsimons about 10 years ago
As part of this release we had 1 issue closed.
MsmqWorkerAvailabilityManager.ClearAvailabilityForWorker()
throws "System.InvalidOperationException: Property ResponseQueue was not retrieved when receiving the message. Ensure that the PropertyFilter is set correctly" if you put some stress on it with NSB 3.3.9 on .NET 4+.
The problem is that Microsoft made almost everything on MessageQueue NOT thread safe between .NET 3.5 and .NET 4.
3.5 docu: http://msdn.microsoft.com/en-us/library/system.messaging.messagequeue(v=vs.90).aspx vs
4 docu: http://msdn.microsoft.com/en-us/library/system.messaging.messagequeue(v=vs.100).aspx
Those changes by Microsoft makes the MsmqWorkerAvailabilityManager implementation in 3.3.9 not safe, as it needs locking to work. The proposed fix, which fixes the repro, is basically to revert @7de28f8f1dbfdf39a810800b841b0df49f02aac6. Bad luck on that one, @andreasohlund. :)
Check out repro, available here.
Content trimmed. See full issue
You can download this release from nuget
Published by SimonCropp about 10 years ago
NServiceBus V4.0 requires the latest RavenDB v2.x to be installed on the same machine.
As you can see, a large number of features were added to NServiceBus. As a result, NServiceBus V4.0 is not compatible with NServiceBus V2.6. Furthermore, only messages marked as events (IEvent or DefiningEventsAs()) will be auto-subscribed.
NServiceBus.Host no longer supports /installinfrastructure. Use PowerShell cmdlets instead.
PowerShell cmdlets have been renamed so that they do not clash with any existing cmdlets. See details below.
Only messages marked as events (IEvent or DefiningEventsAs()) will be auto-subscribed.
The default transaction isolation level is now ReadCommitted. To revert to Serializable, use this code:
Configure.Transactions.Advanced(settings =>
settings.IsolationLevel(IsolationLevel.Serializable));
The Management Service (installed with NServiceBus V4.0) consumes the messages from the defined MSMQ Error and Audit queues. While the Management Service is running, you can view the the Error messages by viewing the Error.log queue, and auditing data can be viewed using ServiceInsight. You can manage the Management Service (named "Particular.Management") like any other Windows Service (see MSDN article on how to "Start, stop, pause, resume, or restart a service").
When using a broker based transport endpoints will use a unique input per machine by default unless running the NServiceBus Host in As_aServer
or As_aPublisher
. This ensures callbacks work as expected when scaling out. If you are not using callbacks use Configure.ScaleOut(s=>s.UseSingleBrokerQueue());
to use the same central queue.
INeedInitialization: Prior to NServicebus 4.0, The interface INeedInitialization was defined in NServiceBus.Config. In NServicebus 4.0, it is defined at the higher namespace level, i.e NServiceBus. If you receive the following compiler error, please remove the using reference to NServiceBus.Config and resolve using NServiceBus: error CS0104:
'INeedInitialization' is an ambiguous reference between 'NServiceBus.INeedInitialization' and 'NServiceBus.Config.INeedInitialization'
NServiceBus.WebService: Exposing an endpoint as a WebService using NServiceBus.Webservice<YourMessage, YourEnum>
has been deprecated in 4.0. Use the WcfService option instead. For example:
YourWcfService : WcfService<YourMessage, YourEnum>
SecondLevelRetries: The type SecondLevelRetries (used in the NServiceBus.Management.Retries namespace to configure the retry and the timeout policy) has been moved to the NServiceBus.Features namespace. While version 3.3.x had a separate policy for managing second level retries and timeouts, this has been merged into the new RetryPolicy in NServiceBus 4.0 and it is capable of achieving both functions.
TransactionalTransport: The type TransactionalTransport, which used to be defined in the namespace NServiceBus.Unicast.Transport.Transactional has been renamed to TransportReceiver and moved to the namespace NServiceBus.Unicast.Transport. If you receive the following compiler error, resolve using the new namespace specified above.
error CS0246: The type or namespace name 'TransactionalTransport' could not be found (are you missing a using directive or an assembly reference?)
These new transport samples were added to the NServiceBus samples, illustrating how to configure the new transports:
New configuration APIs simplify the transports configuration and make it consistent across all transports. In your config file, specify a connection string, like this:
<connectionStrings>
<!-- MSMQ -->
<add name="NServiceBus/Transport" connectionString="deadLetter=true;
journal=true;useTransactionalQueues=true;
cacheSendConnection=true"/>
<!-- ActiveMQ -->
<add name="NServiceBus/Transport"
connectionString="ServerUrl=activemq:tcp://localhost:61616"/>
<!-- RabbitMQ-->
<add name="NServiceBus/Transport"
connectionString="host=localhost"/>
<!-- SqlServer -->
<add name="NServiceBus/Transport"
connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=nservicebus;
Integrated Security=True"
/>
</connectionStrings>
You then have two options to specify the transport:
Specify it as part of the IConfigureThisEndpoint
class declaration, e.g.:
public class EndpointConfig : IConfigureThisEndpoint, AsA_Server,
UsingTransport<RabbitMQ>
Or specify it in the IWantCustomInitialization.Init
method,
public class EndpointConfig : IConfigureThisEndpoint, AsA_Server,
IWantCustomInitialization
{
public void Init(){
Configure.With().DefaultBuilder()
.UseTransport<RabbitMQ>()
}
}
These NuGet packages are also available:
Example of how to install the NServiceBus.ActiveMQ package
PM> Install-Package NServiceBus.ActiveMQ
Add a reference to the new transport DLLs (in the Binaries directory):
MSMQ is currently in NServiceBus.Core.dll and does not require any additional reference. NuGet adds the reference automatically.
XmlMessageSerializer now supports not wrapping messages in a element for single messages. This makes interoperability with other systems easier.
To turn on this feature:
.XmlSerializer( dontWrapSingleMessages: true )
The MsmqTransportConfig section has been deprecated in favour of TransportConfig section, like this:
<section name="TransportConfig"
type="NServiceBus.Config.TransportConfig, NServiceBus.Core"/>
<TransportConfig MaximumConcurrencyLevel="10" MaxRetries="3"
MaximumMessageThroughputPerSecond="10"/>
INeedToInstallSomething: The INeedToInstallSomething interface is now resolved via the container.
NHibernate settings have been simplified, as follows:
<appSettings><
!-- dialect is the only required NHibernate property -->
<add key="NServiceBus/Persistence/NHibernate/dialect"
value="NHibernate.Dialect.MsSql2008Dialect"/>
<!-- other optional settings examples -->
<add key="NServiceBus/Persistence/NHibernate/connection.provider"
value="NHibernate.Connection.DriverConnectionProvider"/>
<add key="NServiceBus/Persistence/NHibernate/connection.driver_class"
value="NHibernate.Driver.Sql2008ClientDriver"
/>
<!-- For more settings:
see http://www.nhforge.org/doc/nh/en/#configuration-hibernatejdbc
and http://www.nhforge.org/doc/nh/en/#configuration-optional
-->
</appSettings><
connectionStrings>
<!-- Default connection string for all Nhibernate/Sql persisters -->
<add name="NServiceBus/Persistence"
connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=nservicebus;
Integrated Security=True"/>
<!-- Optional overrides per persister -->
<add name="NServiceBus/Persistence/NHibernate/Timeout"
connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=timeout;
Integrated Security=True"/>
<add name="NServiceBus/Persistence/NHibernate/Saga"
connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=sagas;
Integrated Security=True"/>
<add name="NServiceBus/Persistence/NHibernate/Subscription"
connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=subscription;
Integrated Security=True"/>
<add name="NServiceBus/Persistence/NHibernate/Gateway"
connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=gateway;
Integrated Security=True"/>
<add name="NServiceBus/Persistence/NHibernate/Distributor"
connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=distributor;
Integrated Security=True"/>
</connectionStrings>
New throughput performance counters and updated performance counters are available:
Licenses can now be installed in HKLM, allowing you to install one license per server instead of installing a license per endpoint or per Windows account.
LicenseInstaller.exe C:\License.xml
NServiceBus PowerShell cmdlets have moved to NServiceBus.PowerShell.dll. To import it, run this:
PM> Import-Module .\NServiceBus.PowerShell.dll
NServiceBus Powershell cmdlets have been renamed so they do not clash with any existing cmdlets:
Install-NServiceBusLicense
Get-NServiceBusMSMQMessage
Get-NServiceBusVersion
Install-NServiceBusDTC
Install-NServiceBusRavenDB
Install-NServiceBusPerformanceCounters
Install-NServiceBusMSMQ
Test-NServiceBusDTCInstallation
Test-NServiceBusRavenDBInstallation
Test-NServiceBusPerformanceCountersInstallation
Test-NServiceBusMSMQInstallation
Add-NServiceBusMessageForwardingInCaseOfFaultConfig
Get-NServiceBusLocalMachineSettings
Set-NServiceBusLocalMachineSettings
Sample usage:
Configure.Endpoint.AsSendOnly()
.Advanced(settings => settings.DisableDurableMessages());
Configure.Transactions.Enable()
.Advanced(settings => settings.IsolationLevel(IsolationLevel.Serializable)
.DefaultTimeout(TimeSpan.FromSeconds(40))
.DisableDistributedTransactions());
RavenDB is not ilmerged anymore. It is embedded instead, using https://github.com/Fody/Costura#readme.
The embedding enables client updates (but may require binding redirects). It also allows passing your own DocumentStore, thereby providing full configuration flexibility.
Audit and Error Queue Defaults
Server defaults for audit and error queues can now be specified in the registry (see new PowerShell cmdlet Get/Set-NServiceBusLocalMachineSettings, above).
The NServiceBus installer can be executed in quiet, unattended mode by running the following command:
Particular.NServiceBus-4.0.x.exe /q /l install.log
This will run the installer in quiet mode and create a log file called install.log.
Note that the name of the installer file may differ from the above example, and that running the installer in quiet mode still opens a browser window to the Particular Software website when the installation is completed.
ActiveMQ requires enabling the Scheduler.
You can do this by setting the schedulerSupport="true" attribute to the configuration in activemq.xml:
<broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost"
dataDirectory="${activemq.data}" schedulerSupport="true">
ActiveMQ Client connection fails when hostname includes a hyphen
See https://issues.apache.org/jira/browse/AMQNET-399.
The release contains a custom build of Apache.NMS.ActiveMQ.1.5.6 client. This custom build fixes the following issues:
The custom build will be removed as soon as the official NMS client is updated with the above fixes.
When installing NServiceBus V4.x on a machine where an instance of RavenDB v1.x exists (default listening on port 8080), the installer will identify the existing RavenDB instance and try to capture the next available port (8081, 8082, etc.) instead of the default 8080 port. Once an available port is found, the installer installs RavenDB v2.x instance as a new Windows service, side-by-side with the existing RavenDB v1.x installation.
By the end of the installation there will be two RavenDB services running side by side on the machine:
To uninstall RavenDB v2, follow these steps:
%Program Files%\NServiceBus.Persistence.V4
Raven.Server.exe –uninstall –service-name=RavenDB-v2
Note that uninstalling NServiceBus (via the installer or through Control Panel > Programs) does not uninstall any RavenDB installations.
###Transport samples do not work with Visual Studio 2010
All the new transports introduced with NServiceBus 4.0 do not work with Visual Studio 2010. The supplied samples currently work only with Visual Studio 2012.
Windows Azure
Updated to the version 2.0 of the storage client.
NHibernate is no longer needed when using NServiceBus on Windows Azure (details).
RabbitMQ
Has improved support for high performance polymorphic pub/sub (details).
Thanks to Fawad Halim and Jeff Sogolov from ADP!
NHibernate
Sagas are now mapped using the table per concrete class strategy to avoid join tables when using base classes for sagas. This improves performance when reading/writing sagas to the database (details).
SQL Server Transport
NOTE: Due to schema changes from NServiceBus V4.0 Beta, to use SQL Server Transport with NServiceBus V4.0, delete any tables created with NServiceBus V4.0 Beta.
Published by johnsimons about 10 years ago
As part of this release we had 1 issue closed.
When a user is using the Scheduler API and creates to schedule tasks, one that runs every 5secs and another one that runs every 1min.
Every so often the 5sec schedule task stops from reoccurring.
Here are the logs
And here is one of the timeouts stored in Raven:
{
"Destination": {
"Queue": "Flyt.TiosCtcAgent",
"Machine": "GMBSANNTID"
},
"SagaId": "00000000-0000-0000-0000-000000000000",
"State": "PD94bWwgdmVyc2lvbj0iMS4wIiA/Pg0KPE1lc3NhZ2VzIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zPSJodHRwOi8vdGVtcHVyaS5uZXQvTlNlcnZpY2VCdXMuU2NoZWR1bGluZy5NZXNzYWdlcyI+CjxTY2hlZHVsZWRUYXNrPgo8VGFza0lkPmU2YjZlN2NmLTlmYjMtNDhiZS1iZGUwLTc0NmJhZmE3MmRlNzwvVGFza0lkPgo8TmFtZT5Cb290c3RyYXA8L05hbWU+CjxFdmVyeT5QVDVTPC9FdmVyeT4KPC9TY2hlZHVsZWRUYXNrPgo8L01lc3NhZ2VzPg0K",
"Time": "2014-05-21T08:18:00.2114720Z",
"CorrelationId": "2f849e22-d760-4ce6-846b-a33200a9b784\\0",
"OwningTimeoutManager": "Flyt.TiosCtcAgent",
"Headers": {
"NServiceBus.MessageId": "2f849e22-d760-4ce6-846b-a33200a9b784",
"NServiceBus.CorrelationId": "2f849e22-d760-4ce6-846b-a33200a9b784",
"NServiceBus.OriginatingEndpoint": "Flyt.TiosCtcAgent",
"$.diagnostics.originating.hostid": "522caf7d3f53a790fdcc328b6cb0d627",
"NServiceBus.MessageIntent": "Send",
"NServiceBus.Version": "4.4.2",
"NServiceBus.TimeSent": "2014-05-21 08:17:55:211472 Z",
"NServiceBus.OriginatingMachine": "GMBSANNTID",
"NServiceBus.ContentType": "text/xml",
"NServiceBus.EnclosedMessageTypes": "NServiceBus.Scheduling.Messages.ScheduledTask, NServiceBus.Core, Version=4.4.0.0, Culture=neutral, PublicKeyToken=9fc386479f8a226c",
"CorrId": "2f849e22-d760-4ce6-846b-a33200a9b784\\0",
"WinIdName": "GMBDOMENE1\\sanntidintegrasjon",
"NServiceBus.RelatedTo": "5da0ead5-1701-4e2e-9b43-a33200a9b16e",
"NServiceBus.ConversationId": "a00caaba-1eab-48a7-854f-a33100a5c243",
"NServiceBus.IsDeferredMessage": "True",
"NServiceBus.Temporary.DelayDeliveryWith": "00:00:05",
"NServiceBus.Timeout.Expire": "2014-05-21 08:18:00:211472 Z",
"NServiceBus.Timeout.RouteExpiredTimeoutTo": "Flyt.TiosCtcAgent@GMBSANNTID",
"NServiceBus.Timeout.ReplyToAddress": "Flyt.TiosCtcAgent@GMBSANNTID"
}
}
The only explanation I have is if the index is stale, we could end-up skipping over timeouts.
See full issue
You can download this release from nuget