-
Notifications
You must be signed in to change notification settings - Fork 11
Expand file tree
/
Copy pathMessageHelper.cs
More file actions
97 lines (84 loc) · 3.51 KB
/
MessageHelper.cs
File metadata and controls
97 lines (84 loc) · 3.51 KB
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
using System;
using Azure.Messaging.ServiceBus;
using System.Collections.Generic;
namespace Ev.ServiceBus.Abstractions;
public static class MessageHelper
{
public static string? GetPayloadTypeId(this ServiceBusReceivedMessage message)
{
return TryGetValue(message, UserProperties.PayloadTypeIdProperty);
}
public static TimeSpan GetQueueLatency(this ServiceBusReceivedMessage message)
{
var enqueuedTime = message.ScheduledEnqueueTime == default ? message.EnqueuedTime : message.ScheduledEnqueueTime;
return DateTimeOffset.UtcNow - enqueuedTime;
}
private static string? TryGetValue(ServiceBusReceivedMessage message, string propertyName)
{
message.ApplicationProperties.TryGetValue(propertyName, out var value);
return value as string;
}
public static ServiceBusMessage CreateMessage(string contentType, byte[] body, string payloadTypeId)
{
var message = new ServiceBusMessage(body)
{
ContentType = contentType,
Subject = $"An Ev.ServiceBus message of type '{payloadTypeId}'",
ApplicationProperties =
{
{UserProperties.MessageTypeProperty, "IntegrationEvent"},
{UserProperties.PayloadTypeIdProperty, payloadTypeId}
}
};
return message;
}
public static string[] GetIsolationApps(this ServiceBusReceivedMessage message)
{
var appsString = TryGetValue(message, UserProperties.IsolationApps);
if (string.IsNullOrEmpty(appsString))
return [];
return appsString.Split(',');
}
public static string[] GetIsolationApps(this IReadOnlyDictionary<string, object> applicationProperties)
{
if (applicationProperties == null)
return [];
applicationProperties.TryGetValue(UserProperties.IsolationApps, out var value);
return value == null ? [] : ((string)value).Split(',');
}
public static string? GetIsolationKey(this ServiceBusReceivedMessage message)
{
return TryGetValue(message, UserProperties.IsolationKey);
}
public static string? GetIsolationKey(this IReadOnlyDictionary<string, object> applicationProperties)
{
if (applicationProperties == null) return null;
applicationProperties.TryGetValue(UserProperties.IsolationKey, out var value);
return value == null ? null : (string)value;
}
public static string? GetIsolationKey(this IDictionary<string, object> applicationProperties)
{
applicationProperties.TryGetValue(UserProperties.IsolationKey, out var value);
return value == null ? null : (string)value;
}
public static ServiceBusMessage SetIsolationKey(this ServiceBusMessage message, string? isolationKey)
{
if (string.IsNullOrEmpty(isolationKey))
return message;
message.ApplicationProperties[UserProperties.IsolationKey] = isolationKey;
return message;
}
public static ServiceBusMessage SetIsolationApps(this ServiceBusMessage message, string[] isolationApps)
{
if (isolationApps.Length == 0)
return message;
message.ApplicationProperties[UserProperties.IsolationApps] = string.Join(',', isolationApps);
return message;
}
public static void SetIsolationKey(this IDictionary<string, object> applicationProperties, string? isolationKey)
{
if (string.IsNullOrEmpty(isolationKey))
return;
applicationProperties[UserProperties.IsolationKey] = isolationKey;
}
}