Skip to content

Commit 3b6cd43

Browse files
committed
Automatically setting the value of ProcessorEndpointKey
1 parent c0981d2 commit 3b6cd43

File tree

6 files changed

+20
-25
lines changed

6 files changed

+20
-25
lines changed

src/NServiceBus.NHibernate.Tests/ApprovalFiles/APIApprovals.Approve.approved.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ namespace NServiceBus
2626
}
2727
public static class OutboxSettingsExtensions
2828
{
29-
public static void EndpointName(this NServiceBus.Outbox.OutboxSettings configuration, string endpointName) { }
3029
public static void TransactionIsolationLevel(this NServiceBus.Outbox.OutboxSettings outboxSettings, System.Data.IsolationLevel isolationLevel) { }
3130
public static void UsePessimisticConcurrencyControl(this NServiceBus.Outbox.OutboxSettings outboxSettings) { }
3231
public static void UseTransactionScope(this NServiceBus.Outbox.OutboxSettings outboxSettings) { }

src/NServiceBus.NHibernate.TransactionalSession.AcceptanceTests/When_using_outbox_send_only.cs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -73,11 +73,9 @@ public Task Handle(SampleMessage message, IMessageHandlerContext context)
7373

7474
class ProcessorEndpoint : EndpointConfigurationBuilder
7575
{
76-
public ProcessorEndpoint() => EndpointSetup<TransactionSessionDefaultServer>(c =>
76+
public ProcessorEndpoint() => EndpointSetup<TransactionSessionWithOutboxEndpoint>(c =>
7777
{
78-
c.ConfigureTransport().TransportTransactionMode = TransportTransactionMode.ReceiveOnly;
7978

80-
c.EnableOutbox().EndpointName(Conventions.EndpointNamingConvention.Invoke(typeof(SendOnlyEndpoint)));
8179
});
8280
}
8381

src/NServiceBus.NHibernate.TransactionalSession/NHibernateTransactionalSessionExtensions.cs

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@ public static PersistenceExtensions<NHibernatePersistence> EnableTransactionalSe
2222
/// <summary>
2323
/// Enables the transactional session for this endpoint using the specified TransactionalSessionOptions.
2424
/// </summary>
25-
public static PersistenceExtensions<NHibernatePersistence> EnableTransactionalSession(this PersistenceExtensions<NHibernatePersistence> persistenceExtensions,
25+
public static PersistenceExtensions<NHibernatePersistence> EnableTransactionalSession(
26+
this PersistenceExtensions<NHibernatePersistence> persistenceExtensions,
2627
TransactionalSessionOptions transactionalSessionOptions)
2728
{
2829
ArgumentNullException.ThrowIfNull(persistenceExtensions);
@@ -33,19 +34,28 @@ public static PersistenceExtensions<NHibernatePersistence> EnableTransactionalSe
3334
settings.Set(transactionalSessionOptions);
3435
settings.EnableFeatureByDefault<NHibernateTransactionalSession>();
3536

36-
if (!string.IsNullOrEmpty(transactionalSessionOptions.ProcessorAddress))
37+
if (string.IsNullOrEmpty(transactionalSessionOptions.ProcessorAddress))
3738
{
38-
// remote processor configured, so turn off the outbox cleanup on this instance
39-
ConfigurationManager.AppSettings.Set("NServiceBus/Outbox/NHibernate/FrequencyToRunDeduplicationDataCleanup", Timeout.InfiniteTimeSpan.ToString());
39+
return persistenceExtensions;
4040
}
4141

42+
// remote processor configured, so turn off the outbox cleanup on this instance
43+
ConfigurationManager.AppSettings.Set(
44+
"NServiceBus/Outbox/NHibernate/FrequencyToRunDeduplicationDataCleanup",
45+
Timeout.InfiniteTimeSpan.ToString());
46+
47+
//set the endpoint name to be the processor address, this makes sure that the outbox uses this value when generate qualified message IDs.
48+
//By default, the endpoint name used is automatically managed and set to the originating endpoint's name unless overridden by setting a value to NHibernateOutbox.ProcessorEndpointKey
49+
settings.Set(NHibernateOutbox.ProcessorEndpointKey, transactionalSessionOptions.ProcessorAddress);
50+
4251
return persistenceExtensions;
4352
}
4453

4554
/// <summary>
4655
/// Opens the transactional session
4756
/// </summary>
48-
public static Task Open(this ITransactionalSession transactionalSession, CancellationToken cancellationToken = default)
57+
public static Task Open(this ITransactionalSession transactionalSession,
58+
CancellationToken cancellationToken = default)
4959
=> transactionalSession.Open(new NHibernateOpenSessionOptions(), cancellationToken);
5060
}
5161
}

src/NServiceBus.NHibernate/NServiceBus.NHibernate.csproj

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,9 @@
2525
</ItemGroup>
2626

2727
<ItemGroup>
28-
<InternalsVisibleTo Include="NServiceBus.NHibernate.PersistenceTests" Key="$(NServiceBusTestsKey)" />
28+
<InternalsVisibleTo Include="NServiceBus.NHibernate.PersistenceTests" Key="$(NServiceBusTestsKey)" />
2929
<InternalsVisibleTo Include="NServiceBus.NHibernate.Tests" Key="$(NServiceBusTestsKey)" />
30+
<InternalsVisibleTo Include="NServiceBus.NHibernate.TransactionalSession" Key="$(NServiceBusKey)" />
3031
</ItemGroup>
3132

3233
</Project>

src/NServiceBus.NHibernate/Outbox/NHibernateOutbox.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ class NHibernateOutbox : Feature
2424
internal const string OutboxTransactionModeSettingsKey = "NServiceBus.NHibernate.OutboxTransactionScopeMode";
2525
internal const string OutboxTransactionIsolationLevelSettingsKey = "NServiceBus.NHibernate.OutboxTransactionIsolationLevel";
2626
internal const string OutboxTransactionScopeModeIsolationLevelSettingsKey = "NServiceBus.NHibernate.OutboxTransactionScopeModeIsolationLevel";
27-
internal const string EndpointNameKey = "NHibernate.Outbox.EndpointName";
27+
internal const string ProcessorEndpointKey = "NHibernate.TransactionalSession.ProcessorEndpoint";
2828
/// <summary>
2929
/// Creates a new instance of the feature
3030
/// </summary>
@@ -73,7 +73,7 @@ protected override void Setup(FeatureConfigurationContext context)
7373
context.Services.AddSingleton<IOutboxStorage>(sp =>
7474
{
7575
var holder = sp.GetRequiredService<SessionFactoryHolder>();
76-
var endpointName = context.Settings.GetOrDefault<string>(EndpointNameKey) ?? context.Settings.EndpointName();
76+
var endpointName = context.Settings.GetOrDefault<string>(ProcessorEndpointKey) ?? context.Settings.EndpointName();
7777
var persister = persisterFactory.Create(holder.SessionFactory, endpointName, pessimisticMode, transactionScopeMode, adoIsolationLevel, transactionScopeIsolationLevel);
7878
return persister;
7979
});

src/NServiceBus.NHibernate/Outbox/OutboxSettingsExtensions.cs

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -71,18 +71,5 @@ or IsolationLevel.Snapshot
7171
outboxSettings.GetSettings().Set(NHibernateOutbox.OutboxTransactionModeSettingsKey, true);
7272
outboxSettings.GetSettings().Set(NHibernateOutbox.OutboxTransactionScopeModeIsolationLevelSettingsKey, isolationLevel);
7373
}
74-
75-
/// <summary>
76-
/// Sets the endpoint name used to generate qualified message IDs, ensuring uniqueness and preventing ID collisions.
77-
/// By default, this value is automatically managed and set to the originating endpoint's name.
78-
/// This function allows overriding the default endpoint name for specific scenarios, such as configuring a transactional session processor endpoint.
79-
/// </summary>
80-
public static void EndpointName(this OutboxSettings configuration, string endpointName)
81-
{
82-
ArgumentNullException.ThrowIfNull(configuration);
83-
ArgumentException.ThrowIfNullOrWhiteSpace(endpointName);
84-
85-
configuration.GetSettings().Set(NHibernateOutbox.EndpointNameKey, endpointName);
86-
}
8774
}
8875
}

0 commit comments

Comments
 (0)