You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Scheduler发送至Service Bus主题的消息,如何提取原始输入内容?

解决Azure Scheduler发送Service Bus消息时的额外元数据问题

我之前也碰到过这个问题!当Azure Scheduler往Service Bus主题发送消息时,它确实会自动给你输入的内容套一层元数据封装,导致你接收时拿到的不是纯粹的原始消息。

先搞清楚问题根源

Azure Scheduler发送的消息体其实是一个结构化的JSON对象,里面既包含了你在Message属性里输入的内容,还附带了Scheduler自身的作业信息(比如JobId、JobStartTime这些)。举个例子,你输入的是"用户提交的订单数据",实际收到的消息体可能长这样:

{
  "JobId": "a1b2c3d4-xxxx-xxxx-xxxx-1234567890ab",
  "JobName": "MyOrderPushJob",
  "JobStartTime": "2024-05-20T14:30:00Z",
  "Message": "用户提交的订单数据"
}

方法一:解析JSON提取原始内容

最直接的方式就是解析这个JSON对象,取出Message字段的值就行。这里以C#为例给你演示:

  1. 先定义一个匹配Scheduler消息结构的类(用来序列化解析):
public class SchedulerMessageWrapper
{
    public string JobId { get; set; }
    public string JobName { get; set; }
    public DateTime JobStartTime { get; set; }
    public string Message { get; set; } // 这就是你要的原始消息内容
}
  1. 接收消息时进行解析:
// 读取Service Bus消息体
var messageBody = await receivedMessage.Body.ReadAsStringAsync();
// 反序列化为定义好的类
var wrappedMessage = JsonSerializer.Deserialize<SchedulerMessageWrapper>(messageBody);
// 提取原始内容
var originalMessage = wrappedMessage.Message;

如果不想定义实体类,也可以用动态解析的方式快速获取:

var messageBody = await receivedMessage.Body.ReadAsStringAsync();
var jsonDoc = JsonDocument.Parse(messageBody);
var originalMessage = jsonDoc.RootElement.GetProperty("Message").GetString();

方法二:用自定义属性绕过封装

如果你不想处理JSON解析,还可以换一种发送方式:

  • 在Azure Scheduler的配置页面,不要在Message属性里填内容,而是切换到Custom Properties区域,添加一个自定义属性(比如键设为OriginalContent,值设为你要发送的消息)。
  • 接收消息时,直接从消息的自定义属性中读取:
var originalMessage = receivedMessage.ApplicationProperties["OriginalContent"].ToString();

这种方式下,消息体是空的,你要的内容直接存在自定义属性里,完全不会有额外封装。


内容的提问来源于stack exchange,提问作者Per B

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 07:34:40