Skip to content

Commit f331bcc

Browse files
committed
Update sqltransport-nhpersistence to v10
1 parent 5999021 commit f331bcc

17 files changed

+384
-0
lines changed
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
using System;
2+
3+
public class Order
4+
{
5+
public virtual Guid OrderId { get; set; }
6+
public virtual decimal Value { get; set; }
7+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
using System;
2+
using System.Threading.Tasks;
3+
using NServiceBus;
4+
using Microsoft.Extensions.Logging;
5+
6+
public class OrderLifecycleSaga(ILogger<OrderLifecycleSaga> logger) :
7+
Saga<OrderLifecycleSagaData>,
8+
IAmStartedByMessages<OrderSubmitted>,
9+
IHandleTimeouts<OrderTimeout>
10+
{
11+
12+
protected override void ConfigureHowToFindSaga(SagaPropertyMapper<OrderLifecycleSagaData> mapper)
13+
{
14+
mapper.ConfigureMapping<OrderSubmitted>(msg => msg.OrderId).ToSaga(saga => saga.OrderId);
15+
}
16+
17+
public Task Handle(OrderSubmitted message, IMessageHandlerContext context)
18+
{
19+
Data.OrderId = message.OrderId;
20+
#region Timeout
21+
return RequestTimeout<OrderTimeout>(context, TimeSpan.FromSeconds(5));
22+
#endregion
23+
}
24+
25+
public Task Timeout(OrderTimeout state, IMessageHandlerContext context)
26+
{
27+
logger.LogInformation("Got timeout");
28+
return Task.CompletedTask;
29+
}
30+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
using System;
2+
using NServiceBus;
3+
4+
public class OrderLifecycleSagaData :
5+
ContainSagaData
6+
{
7+
public virtual Guid OrderId { get; set; }
8+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
using NHibernate.Mapping.ByCode;
2+
using NHibernate.Mapping.ByCode.Conformist;
3+
4+
class OrderMap :
5+
ClassMapping<Order>
6+
{
7+
public OrderMap()
8+
{
9+
Table("Orders");
10+
Id(x => x.OrderId, m => m.Generator(Generators.Assigned));
11+
Property(p => p.Value);
12+
}
13+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
using System.Threading.Tasks;
2+
using NServiceBus;
3+
using Microsoft.Extensions.Logging;
4+
5+
public class OrderSubmittedHandler(ILogger<OrderSubmittedHandler> logger) :
6+
IHandleMessages<OrderSubmitted>
7+
{
8+
9+
public Task Handle(OrderSubmitted message, IMessageHandlerContext context)
10+
{
11+
logger.LogInformation("Order {OrderId} worth {Value} submitted", message.OrderId, message.Value);
12+
13+
#region StoreUserData
14+
15+
var nhibernateSession = context.SynchronizedStorageSession.Session();
16+
var order = new Order
17+
{
18+
OrderId = message.OrderId,
19+
Value = message.Value
20+
};
21+
nhibernateSession.Save(order);
22+
23+
#endregion
24+
25+
#region Reply
26+
27+
var orderAccepted = new OrderAccepted
28+
{
29+
OrderId = message.OrderId,
30+
};
31+
return context.Reply(orderAccepted);
32+
33+
#endregion
34+
}
35+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
public class OrderTimeout
2+
{
3+
}
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
using System;
2+
using Microsoft.Extensions.Hosting;
3+
using NHibernate.Cfg;
4+
using NHibernate.Dialect;
5+
using NHibernate.Driver;
6+
using NHibernate.Mapping.ByCode;
7+
using NHibernate.Tool.hbm2ddl;
8+
using NServiceBus;
9+
using NServiceBus.Persistence;
10+
using NServiceBus.Transport.SqlServer;
11+
12+
Console.Title = "Receiver";
13+
var builder = Host.CreateApplicationBuilder(args);
14+
15+
// for SqlExpress use Data Source=.\SqlExpress;Initial Catalog=NsbSamplesSqlNHibernate;Integrated Security=True;Max Pool Size=100;Encrypt=false
16+
var connectionString = @"Server=localhost,1433;Initial Catalog=NsbSamplesSqlNHibernate;User Id=SA;Password=yourStrong(!)Password;Max Pool Size=100;Encrypt=false";
17+
var hibernateConfig = new Configuration();
18+
hibernateConfig.DataBaseIntegration(x =>
19+
{
20+
x.ConnectionString = connectionString;
21+
x.Dialect<MsSql2012Dialect>();
22+
x.Driver<MicrosoftDataSqlClientDriver>();
23+
});
24+
25+
#region NHibernate
26+
27+
hibernateConfig.SetProperty("default_schema", "receiver");
28+
29+
#endregion
30+
31+
await SqlHelper.CreateSchema(connectionString, "receiver");
32+
var mapper = new ModelMapper();
33+
mapper.AddMapping<OrderMap>();
34+
hibernateConfig.AddMapping(mapper.CompileMappingForAllExplicitlyAddedEntities());
35+
36+
await new SchemaExport(hibernateConfig).ExecuteAsync(false, true, false);
37+
38+
#region ReceiverConfiguration
39+
40+
var endpointConfiguration = new EndpointConfiguration("Samples.SqlNHibernate.Receiver");
41+
endpointConfiguration.UseSerialization<SystemJsonSerializer>();
42+
endpointConfiguration.SendFailedMessagesTo("error");
43+
endpointConfiguration.AuditProcessedMessagesTo("audit");
44+
endpointConfiguration.EnableInstallers();
45+
var transport = new SqlServerTransport(connectionString)
46+
{
47+
DefaultSchema = "receiver"
48+
};
49+
transport.SchemaAndCatalog.UseSchemaForQueue("error", "dbo");
50+
transport.SchemaAndCatalog.UseSchemaForQueue("audit", "dbo");
51+
transport.SchemaAndCatalog.UseSchemaForQueue("Samples.SqlNHibernate.Sender", "sender");
52+
transport.Subscriptions.SubscriptionTableName = new SubscriptionTableName("Subscriptions", "dbo");
53+
transport.TransportTransactionMode = TransportTransactionMode.SendsAtomicWithReceive;
54+
55+
var routing = endpointConfiguration.UseTransport(transport);
56+
routing.RouteToEndpoint(typeof(OrderAccepted), "Samples.SqlNHibernate.Sender");
57+
58+
var persistence = endpointConfiguration.UsePersistence<NHibernatePersistence>();
59+
persistence.UseConfiguration(hibernateConfig);
60+
61+
#endregion
62+
63+
64+
Console.WriteLine("Press any key to exit");
65+
Console.ReadKey();
66+
builder.UseNServiceBus(endpointConfiguration);
67+
68+
await builder.Build().RunAsync();
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
<PropertyGroup>
3+
<TargetFramework>net10.0</TargetFramework>
4+
<OutputType>Exe</OutputType>
5+
<LangVersion>preview</LangVersion>
6+
</PropertyGroup>
7+
<ItemGroup>
8+
<PackageReference Include="NServiceBus.Extensions.Hosting" Version="4.0.0-alpha.2" />
9+
<ProjectReference Include="..\Shared\Shared.csproj" />
10+
<PackageReference Include="NHibernate" Version="5.*" />
11+
<PackageReference Include="NServiceBus.NHibernate" Version="11.0.0-alpha.1" />
12+
<PackageReference Include="NServiceBus.Transport.SqlServer" Version="9.0.0-alpha.2" />
13+
</ItemGroup>
14+
</Project>
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
using System.Threading.Tasks;
2+
using NServiceBus;
3+
using Microsoft.Extensions.Logging;
4+
5+
public class OrderAcceptedHandler(ILogger<OrderAcceptedHandler> logger) :
6+
IHandleMessages<OrderAccepted>
7+
{
8+
9+
public Task Handle(OrderAccepted message, IMessageHandlerContext context)
10+
{
11+
logger.LogInformation("Order {OrderId} accepted.", message.OrderId);
12+
return Task.CompletedTask;
13+
}
14+
}
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
using System;
2+
using Microsoft.Extensions.DependencyInjection;
3+
using Microsoft.Extensions.Hosting;
4+
using NHibernate.Cfg;
5+
using NHibernate.Dialect;
6+
using NHibernate.Driver;
7+
using NServiceBus;
8+
using NServiceBus.Persistence;
9+
using NServiceBus.Transport.SqlServer;
10+
11+
var builder = Host.CreateApplicationBuilder(args);
12+
Console.Title = "Sender";
13+
14+
// for SqlExpress use Data Source=.\SqlExpress;Initial Catalog=NsbSamplesSqlNHibernate;Integrated Security=True;Max Pool Size=100;Encrypt=false
15+
var connectionString = @"Server=localhost,1433;Initial Catalog=NsbSamplesSqlNHibernate;User Id=SA;Password=yourStrong(!)Password;Max Pool Size=100;Encrypt=false";
16+
var endpointConfiguration = new EndpointConfiguration("Samples.SqlNHibernate.Sender");
17+
endpointConfiguration.UseSerialization<SystemJsonSerializer>();
18+
endpointConfiguration.SendFailedMessagesTo("error");
19+
endpointConfiguration.EnableInstallers();
20+
21+
var hibernateConfig = new Configuration();
22+
hibernateConfig.DataBaseIntegration(x =>
23+
{
24+
x.ConnectionString = connectionString;
25+
x.Dialect<MsSql2012Dialect>();
26+
x.Driver<MicrosoftDataSqlClientDriver>();
27+
});
28+
hibernateConfig.SetProperty("default_schema", "sender");
29+
30+
#region SenderConfiguration
31+
32+
var transport = new SqlServerTransport(connectionString)
33+
{
34+
DefaultSchema = "sender",
35+
TransportTransactionMode = TransportTransactionMode.SendsAtomicWithReceive
36+
};
37+
transport.SchemaAndCatalog.UseSchemaForQueue("error", "dbo");
38+
transport.SchemaAndCatalog.UseSchemaForQueue("audit", "dbo");
39+
transport.Subscriptions.SubscriptionTableName = new SubscriptionTableName("Subscriptions", "dbo");
40+
41+
var persistence = endpointConfiguration.UsePersistence<NHibernatePersistence>();
42+
persistence.UseConfiguration(hibernateConfig);
43+
44+
#endregion
45+
46+
var routing = endpointConfiguration.UseTransport(transport);
47+
routing.RouteToEndpoint(typeof(OrderAccepted), "Samples.SqlNHibernate.Sender");
48+
49+
await SqlHelper.CreateSchema(connectionString, "sender");
50+
51+
Console.WriteLine("Press enter to send a message");
52+
Console.WriteLine("Press any key to exit");
53+
builder.UseNServiceBus(endpointConfiguration);
54+
55+
var host = builder.Build();
56+
await host.StartAsync();
57+
58+
var messageSession = host.Services.GetRequiredService<IMessageSession>();
59+
60+
while (true)
61+
{
62+
var key = Console.ReadKey();
63+
Console.WriteLine();
64+
65+
if (key.Key != ConsoleKey.Enter)
66+
{
67+
break;
68+
}
69+
70+
var orderSubmitted = new OrderSubmitted
71+
{
72+
OrderId = Guid.NewGuid(),
73+
Value = Random.Shared.Next(100)
74+
};
75+
76+
await messageSession.Publish(orderSubmitted);
77+
78+
Console.WriteLine("Published OrderSubmitted message");
79+
}

0 commit comments

Comments
 (0)