-
Notifications
You must be signed in to change notification settings - Fork 300
/
Copy pathUsage.cs
124 lines (88 loc) · 4.05 KB
/
Usage.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
using System;
using System.IO;
using System.Text.Json;
using Azure.Identity;
using Azure.Messaging.ServiceBus;
using NServiceBus;
using NServiceBus.Transport;
using NServiceBus.Transport.AzureServiceBus;
using Shipping;
class Usage
{
Usage(EndpointConfiguration endpointConfiguration)
{
#region azure-service-bus-for-dotnet-standard
var transport = new AzureServiceBusTransport("Endpoint=sb://[NAMESPACE].servicebus.windows.net/;SharedAccessKeyName=[KEYNAME];SharedAccessKey=[KEY]", TopicTopology.Default);
endpointConfiguration.UseTransport(transport);
#endregion
#region token-credentials
var transportWithTokenCredentials = new AzureServiceBusTransport("[NAMESPACE].servicebus.windows.net", new DefaultAzureCredential(), TopicTopology.Default);
endpointConfiguration.UseTransport(transportWithTokenCredentials);
#endregion
#region custom-prefetch-multiplier
transport.PrefetchMultiplier = 3;
#endregion
#region custom-prefetch-count
transport.PrefetchCount = 100;
#endregion
#region custom-auto-lock-renewal
transport.MaxAutoLockRenewalDuration = TimeSpan.FromMinutes(10);
#endregion
#pragma warning disable CS0618 // Type or member is obsolete
#region asb-sanitization-compatibility
var migrationTopology = TopicTopology.MigrateFromSingleDefaultTopic();
migrationTopology.OverrideSubscriptionNameFor("QueueName", "ShortenedSubscriptionName");
migrationTopology.EventToMigrate<MyEvent>("ShortenedRuleName");
#endregion
#pragma warning restore CS0618 // Type or member is obsolete
#region asb-options-validation-disable
transport.Topology.OptionsValidator = new TopologyOptionsDisableValidationValidator();
#endregion
#region asb-options-options-loading
using var stream = File.OpenRead("topology-options.json");
var options = JsonSerializer.Deserialize<TopologyOptions>(stream, TopologyOptionsSerializationContext.Default.Options);
var jsonTopology = TopicTopology.FromOptions(options);
#endregion
var topology = TopicTopology.Default;
#region asb-interface-based-inheritance
topology.SubscribeTo<IOrderStatusChanged>("Shipping.OrderAccepted");
#endregion
#region asb-interface-based-inheritance-declined
topology.SubscribeTo<IOrderStatusChanged>("Shipping.OrderAccepted");
topology.SubscribeTo<IOrderStatusChanged>("Shipping.OrderDeclined");
#endregion
#region asb-versioning-subscriber-mapping
topology.SubscribeTo<IOrderAccepted>("Shipping.OrderAccepted");
topology.SubscribeTo<IOrderAccepted>("Shipping.OrderAcceptedV2");
#endregion
#region asb-interface-based-inheritance-publisher
topology.PublishTo<OrderAccepted>("Shipping.IOrderStatusChanged");
topology.PublishTo<OrderDeclined>("Shipping.IOrderStatusChanged");
#endregion
#region asb-versioning-publisher-mapping
topology.PublishTo<OrderAcceptedV2>("Shipping.OrderAccepted");
#endregion
#region asb-versioning-publisher-mapping
topology.PublishTo<OrderAcceptedV2>("Shipping.OrderAccepted");
#endregion
#region asb-versioning-publisher-customization
transport.OutgoingNativeMessageCustomization = (operation, message) =>
{
if (operation is MulticastTransportOperation multicastTransportOperation)
{
// Subject is used for demonstration purposes only, choose a property that fits your scenario
message.Subject = multicastTransportOperation.MessageType.FullName;
}
};
#endregion
}
class MyEvent;
}
namespace Shipping
{
interface IOrderAccepted : IEvent { }
interface IOrderStatusChanged : IEvent { }
class OrderAccepted : IOrderAccepted, IOrderStatusChanged { }
class OrderDeclined : IOrderAccepted, IOrderStatusChanged { }
class OrderAcceptedV2 : IOrderAccepted, IOrderStatusChanged { }
}