BrighterCommand / BrighterCommand/Brighter

AzureServiceBusScheduler.ConvertToServiceBusMessage writes RoutingKey instance into AMQP ApplicationProperties[ReplyTo]

Open
#4,150 0 comments 0 reactions 1 assignee Claimed by @DevJonny View on GitHub
.NET 1 - Up Next Bug V10.X
Dominant language
C#
Stars
2.5k
Forks
296
Avg merge
1d 11h
Merged PRs (30d)
21

Description

### Describe the bug

`Paramore.Brighter.MessageScheduler.Azure.AzureServiceBusScheduler.ConvertToServiceBusMessage` writes `message.Header.ReplyTo` (a `Paramore.Brighter.RoutingKey` struct) directly into `ServiceBusMessage.ApplicationProperties["ReplyTo"]`. AMQP cannot serialise this — sending throws `SerializationException: "unsupported type, Paramore.Brighter.RoutingKey"`.

The non-scheduler ASB publisher (`AzureServiceBusMessagePublisher`) correctly writes the string value `ReplyTo.Value` to the same key. The scheduler diverges from that established behaviour, which makes the scheduler unusable for any message with `ReplyTo` set.

### To Reproduce

```csharp
var scheduler = /* construct AzureServiceBusScheduler */;
var message = new Message(
new MessageHeader(Id.Random(), new RoutingKey("topic"), MessageType.MT_EVENT)
{
ReplyTo = new RoutingKey("reply-topic")
},
new MessageBody("payload"));

// Throws on send
await scheduler.ScheduleAsync(message, TimeSpan.FromMinutes(1));
```

### Exceptions

```
System.Runtime.Serialization.SerializationException: unsupported type, Paramore.Brighter.RoutingKey
at Microsoft.Azure.Amqp.Encoding.AmqpEncoding.GetEncoding(...)
at Azure.Messaging.ServiceBus.AmqpMessageConverter...
at Azure.Messaging.ServiceBus.ServiceBusSender.ScheduleMessageAsync(...)
at Paramore.Brighter.MessageScheduler.Azure.AzureServiceBusScheduler.ScheduleAsync(...)
```

### Suggested fix

In `ConvertToServiceBusMessage`, mirror `AzureServiceBusMessagePublisher`:

```diff
- azureServiceBusMessage.ApplicationProperties.Add("ReplyTo", message.Header.ReplyTo);
+ azureServiceBusMessage.ApplicationProperties.Add("ReplyTo", message.Header.ReplyTo?.Value);
```

### Further technical details

- Brighter version: **10.4.1** (`Paramore.Brighter.MessageScheduler.Azure`)
- `dotnet --info`:
```
.NET SDK 10.0.108 (commit 94ea82652c, MSBuild 18.0.11+94ea82652)
Host 10.0.8 (x64)
RID: win-x64
```
- OS: Windows 11 (build 10.0.26200)

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.