Skip to content

Commit 4871847

Browse files
Update migration guide (Azure#22797)
* Update migration guide * Fix snippet
1 parent 2286b20 commit 4871847

File tree

4 files changed

+29
-53
lines changed

4 files changed

+29
-53
lines changed

sdk/servicebus/Azure.Messaging.ServiceBus/MigrationGuide.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -440,8 +440,7 @@ using (var ts = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
440440

441441
There are a few features that are yet to be implemented in `Azure.Messaging.ServiceBus`, but were present in the previous library `Microsoft.Azure.ServiceBus`. The plan is to add these features in upcoming releases (unless otherwise noted), but they will not be available in the version 7.0.0:
442442

443-
- **Plugins** - In the previous library, Microsoft.Azure.ServiceBus, users could [register plugins](https://github.com/Azure/azure-sdk-for-net/blob/main/sdk/servicebus/Microsoft.Azure.ServiceBus/src/QueueClient.cs#L527) that would alter an outgoing message before serialization, or alter an incoming message after being deserialized. These extension points allowed users of the Service Bus library to use common OSS extensions to enhance their applications without having to implement their own logic, and without having to wait for the SDK to explicitly support the needed feature. For instance, one use of the plugin functionality is to implement the [claim-check pattern](https://www.nuget.org/packages/ServiceBus.AttachmentPlugin/) to send and receive messages that exceed the Service Bus message size limits. This feature is not yet supported in the new library but will be added in an upcoming release. Support for this feature can be tracked via https://github.com/Azure/azure-sdk-for-net/issues/12943.
444-
443+
- **Plugins** - In the previous library, Microsoft.Azure.ServiceBus, users could [register plugins](https://github.com/Azure/azure-sdk-for-net/blob/main/sdk/servicebus/Microsoft.Azure.ServiceBus/src/QueueClient.cs#L527) that would alter an outgoing message before serialization, or alter an incoming message after being deserialized. These extension points allowed users of the Service Bus library to use common OSS extensions to enhance their applications without having to implement their own logic, and without having to wait for the SDK to explicitly support the needed feature. For instance, one use of the plugin functionality is to implement the [claim-check pattern](https://www.nuget.org/packages/ServiceBus.AttachmentPlugin/) to send and receive messages that exceed the Service Bus message size limits. To achieve similar functionality with `Azure.Messaging.ServiceBus`, you can extend the various types as demonstrated in the [extensibility sample](https://github.com/Azure/azure-sdk-for-net/blob/main/sdk/servicebus/Azure.Messaging.ServiceBus/samples/Sample09_Extensibility.md).
445444
## Additional samples
446445

447446
More examples can be found at:

sdk/servicebus/Azure.Messaging.ServiceBus/samples/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,3 +19,4 @@ description: Samples for the Azure.Messaging.ServiceBus client library
1919
- [Working with Transactions](https://github.com/Azure/azure-sdk-for-net/blob/main/sdk/servicebus/Azure.Messaging.ServiceBus/samples/Sample06_Transactions.md)
2020
- [CRUD Operations](https://github.com/Azure/azure-sdk-for-net/blob/main/sdk/servicebus/Azure.Messaging.ServiceBus/samples/Sample07_CrudOperations.md)
2121
- [Interop](https://github.com/Azure/azure-sdk-for-net/blob/main/sdk/servicebus/Azure.Messaging.ServiceBus/samples/Sample08_Interop.md)
22+
- [Extensibility](https://github.com/Azure/azure-sdk-for-net/blob/main/sdk/servicebus/Azure.Messaging.ServiceBus/samples/Sample09_Extensibility.md)

sdk/servicebus/Azure.Messaging.ServiceBus/samples/Sample09_Extensibility.md

Lines changed: 25 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -90,64 +90,38 @@ public class PluginProcessor : ServiceBusProcessor
9090
```
9191

9292
And a `PluginSessionProcessor`:
93-
```C# Snippet:End2EndPluginSessionProcessor
94-
string connectionString = "<connection_string>";
95-
string queueName = "<queue_name>";
96-
// since ServiceBusClient implements IAsyncDisposable we create it with "await using"
97-
await using var client = new ServiceBusClient(connectionString);
98-
await using ServiceBusSender sender = client.CreatePluginSender(queueName, new List<Func<ServiceBusMessage, Task>>()
93+
```C# Snippet:PluginSessionProcessor
94+
public class PluginSessionProcessor : ServiceBusSessionProcessor
9995
{
100-
message =>
101-
{
102-
message.Subject = "Updated subject";
103-
message.SessionId = "sessionId";
104-
Console.WriteLine("First send plugin executed!");
105-
return Task.CompletedTask;
106-
},
107-
message =>
108-
{
109-
Console.WriteLine(message.Subject); // prints "Updated subject"
110-
Console.WriteLine(message.SessionId); // prints "sessionId"
111-
Console.WriteLine("Second send plugin executed!");
112-
return Task.CompletedTask;
113-
},
114-
});
115-
116-
await sender.SendMessageAsync(new ServiceBusMessage(Encoding.UTF8.GetBytes("First")));
96+
private IEnumerable<Func<ServiceBusReceivedMessage, Task>> _plugins;
11797

118-
await using ServiceBusSessionProcessor processor = client.CreatePluginSessionProcessor(queueName, new List<Func<ServiceBusReceivedMessage, Task>>()
119-
{
120-
message =>
98+
internal PluginSessionProcessor(string queueName, ServiceBusClient client, IEnumerable<Func<ServiceBusReceivedMessage, Task>> plugins, ServiceBusSessionProcessorOptions options) :
99+
base(client, queueName, options)
121100
{
122-
var rawMessage = message.GetRawAmqpMessage();
123-
rawMessage.Properties.Subject = "Received subject";
124-
Console.WriteLine("First receive plugin executed!");
125-
return Task.CompletedTask;
126-
},
127-
message =>
101+
_plugins = plugins;
102+
}
103+
104+
internal PluginSessionProcessor(string topicName, string subscriptionName, ServiceBusClient client, IEnumerable<Func<ServiceBusReceivedMessage, Task>> plugins, ServiceBusSessionProcessorOptions options) :
105+
base(client, topicName, subscriptionName, options)
128106
{
129-
Console.WriteLine(message.Subject); // prints "Received subject"
130-
var rawMessage = message.GetRawAmqpMessage();
131-
rawMessage.Properties.Subject = "Last subject";
132-
Console.WriteLine("Second receive plugin executed!");
133-
return Task.CompletedTask;
134-
},
135-
});
107+
_plugins = plugins;
108+
}
136109

137-
processor.ProcessMessageAsync += args =>
138-
{
139-
Console.WriteLine(args.Message.Subject);
140-
return Task.CompletedTask;
141-
};
110+
protected internal override async Task OnProcessSessionMessageAsync(ProcessSessionMessageEventArgs args)
111+
{
112+
foreach (var plugin in _plugins)
113+
{
114+
await plugin.Invoke(args.Message);
115+
}
142116

143-
processor.ProcessErrorAsync += args =>
144-
{
145-
Console.WriteLine(args.Exception);
146-
return Task.CompletedTask;
147-
};
117+
await base.OnProcessSessionMessageAsync(args);
118+
}
148119

149-
await processor.StartProcessingAsync();
150-
Console.ReadKey();
120+
protected internal override Task OnProcessErrorAsync(ProcessErrorEventArgs args)
121+
{
122+
return Task.CompletedTask;
123+
}
124+
}
151125
```
152126

153127
### Defining extension methods

sdk/servicebus/Azure.Messaging.ServiceBus/tests/Samples/Plugins/PluginSessionProcessor.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
namespace Azure.Messaging.ServiceBus.Tests.Samples
99
{
10+
#region Snippet:PluginSessionProcessor
1011
public class PluginSessionProcessor : ServiceBusSessionProcessor
1112
{
1213
private IEnumerable<Func<ServiceBusReceivedMessage, Task>> _plugins;
@@ -38,4 +39,5 @@ protected internal override Task OnProcessErrorAsync(ProcessErrorEventArgs args)
3839
return Task.CompletedTask;
3940
}
4041
}
42+
#endregion
4143
}

0 commit comments

Comments
 (0)