我一直在网上和 GitHub 上寻找 Azure 服务总线的现成死信查看器。这是为了让我们的 DevOps 团队能够监控、查看和报告我们总线上每个主题的每个订阅的任何死信。
我认为这将是分发给 DevOps 的常见应用程序,因此相信已经有一个应用程序。因此,在我开始使用我自己的 Windows 窗体应用程序之前,是否有我可能错过的现有查看器?
我们使用 Azure 服务总线 SDK 3.1.7 的 SendBatch() 方法将数据发送到 Azure 事件中心。以下是代码片段:
foreach (var packet in transformedPackets)
{
EventData eventData = new EventData(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(packet, settings)));;
try
{
eventData.Properties.Add(AppConstants.TenantDeploymentUniqueIdKey, tenantDeploymentUniqueId);
eventData.Properties.Add(AppConstants.DataTypeKey, DataTypeKey);
byteCount += eventData.SerializedSizeInBytes;
if (byteCount > MaxBatchSize)
{
sender.SendBatch(transformedMessages);
transformedMessages.Clear();
byteCount = eventData.SerializedSizeInBytes;
}
transformedMessages.Add(eventData);
}
catch (System.Exception)
{
eventData.Dispose();
throw;
}
}
Run Code Online (Sandbox Code Playgroud)
在将事件数据添加到批处理之前检查 SerializedSizeInBytes 属性后的事件(最大允许限制:256 KB),我们收到以下异常:
接收到的消息(delivery-id:0,大小:262279 字节)超过了当前链路上允许的限制(262144 字节)。在 Microsoft.ServiceBus.Common.ExceptionDispatcher.Throw(Exception exception) 在 Microsoft.ServiceBus.Common.AsyncResult.End[TAsyncResult](IAsyncResult result) 在 Microsoft.ServiceBus.Common.AsyncResult 1.End(IAsyncResult asyncResult)
at Microsoft.ServiceBus.Messaging.MessageSender.RetrySenderEventDataAsyncResult.End(IAsyncResult r)
at Microsoft.ServiceBus.Messaging.MessageSender.EndSendEventData(IAsyncResult result)
at Microsoft.ServiceBus.Messaging.EventHubSender.SendBatch(IEnumerable1 eventDataList)
使用时,async/await我关心的是在处理消息的过程中处理客户端。考虑以下:
初始化队列客户端queueClient并将对它的引用存储在类的全局范围内
队列客户端处理一条消息并调用一些应用程序代码来处理它,这可能最终会做一些异步数据库工作或调用远程 api。
考虑应用程序是一个 Windows 服务,它的CloseAsync方法是在服务应该关闭时发出信号。在这个方法中,我调用queueClient.CloseAsync()
步骤 2 中正在完成的工作完成并转到调用message.Complete(). 在这一点上,我假设 queueClient 已关闭,消息将被视为失败。
确保队列客户端不再处理消息并等待关闭直到任何当前处理的消息完成的最佳实践是什么?
我有 2 个服务总线命名空间,都位于标准层。
两者中较旧的仅显示“队列”选项,并且创建主题的选项被禁用,但是命名空间中存在现有主题,并且这些选项都可以正常工作。

今天创建的新版本启用了主题。
它们都在门户中显示为标准层:
命名空间缺失主题:
具有主题的命名空间:
如果我尝试将较旧的主题更改为基本主题,则会由于现有主题而失败。我的理论是,这是门户中的一个错误,虽然底层的 Azure 基础设施和门户的扩展部分知道这是一个标准层,但它的某些部分无法识别这一点,因此缺少主题。
还应该注意的是,如果我生成自动化脚本,它希望将此命名空间创建为基本 SKU,而将另一个命名空间创建为标准。可能在过去的某个时候(很多年前),这是一个基本层。
所以我的问题是,是否还有其他我可以检查的旧名称空间可能不正确,我可以解决,或者这是门户中的错误?
我想根据消息的内容创建订阅。这可能吗?我试图摆脱必须添加自定义属性。
谢谢
我有一个前段时间写的客户端,它使用旧库并GetBody<string>()在接收消息时调用读取正文。
现在我有了新客户端Microsoft.Azure.ServiceBus(发送消息),据我所知它总是使用Stream.
所以旧客户端只是因为它期望字符串主体类型而崩溃。我发现了很多关于相反场景(新读者,旧作者)的信息,但无法弄清楚如何让新客户端以所需格式发送数据。
相关链接:
我在事件网格上发送事件。我可以看到他们到达了蔚蓝的仪表板
NomeEmailChange yay = new NomeEmailChange
{
Nome = "cesco",
Email = "cesco"
};
var primaryTopicKey = _config["EventGridConfig:AcessKey"];
var primaryTopic = _config["EventGridConfig:Endpoint"];
var primaryTopicHostname = new Uri(primaryTopic).Host;
var topicCredentials = new TopicCredentials(primaryTopicKey);
var client = new EventGridClient(topicCredentials);
var id = Guid.NewGuid().ToString();
var hey = new List<EventGridEvent>
{
new EventGridEvent()
{
Id = id,
EventType = "cesco-cesco",
Data = (yay),
EventTime = DateTime.Now,
Subject = "MS_Clientes",
DataVersion = "1.0",
}
};
;
client.PublishEventsAsync(primaryTopicHostname, hey);
Run Code Online (Sandbox Code Playgroud)
然后我创建了一个事件网格订阅。我可以确认到达事件网格订阅的事件网格消息。
在另一个项目中,我订阅了如下所示的服务总线。它适用于使用直接发送到总线的消息。
public static IServiceCollection AddBus(this IServiceCollection …Run Code Online (Sandbox Code Playgroud) 我有一系列 Azure Function 应用程序,所有应用程序都使用以下命令将消息输出到 Azure 服务总线IAsyncCollector<Message>:
public async Task Run([ServiceBus(...)] IAsyncCollector<Message> messages)
{
...
await messages.AddAsync(msg);
}
Run Code Online (Sandbox Code Playgroud)
我不时记录错误,如下所示:
Microsoft.Azure.WebJobs.Host.FunctionInvocationException: Exception while executing function: Function
---> Microsoft.Azure.ServiceBus.ServiceBusTimeoutException: The operation did not complete within the allocated time 00:00:59.9999536 for object message.Reference: ..., 7/13/2020 2:46:24 PM
---> System.TimeoutException: The operation did not complete within the allocated time 00:00:59.9999536 for object message.
at Microsoft.Azure.Amqp.AsyncResult.End[TAsyncResult](IAsyncResult result)
at Microsoft.Azure.Amqp.SendingAmqpLink.EndSendMessage(IAsyncResult result)
at System.Threading.Tasks.TaskFactory`1.FromAsyncCoreLogic(IAsyncResult iar, Func`2 endFunction, Action`1 endAction, Task`1 promise, Boolean requiresSynchronization)
--- End of …Run Code Online (Sandbox Code Playgroud) 可以说事件网格只是服务总线的一个子集吗?我发现服务总线可以做事件网格可以做的一切,甚至更多。
Kafka 有流和表的概念。流代表事件的发生,而表代表状态。
Azure 资源上是否有对应的实体?查看事件中心、事件网格、Servicebus 队列和主题。似乎无法找到等价物?
azureservicebus ×10
azure ×7
.net ×2
apache-kafka ×1
azureportal ×1
c# ×1
dead-letter ×1
filter ×1
servicebus ×1
subscription ×1