[英]Azure Service Bus scheduled message "in" binding undefined
我正在使用 @azure/service-bus JavaScript 庫從 Azure Functions 發布和訂閱有關 Azure 服務總線主題的消息。 為了接收消息,我使用了從模板創建的 Azure 服務總線主題觸發器函數,無需任何更改。 當我使用 sender.send(message) 發布消息時,我收到了很好的消息。
import { AzureFunction, Context, HttpRequest } from "@azure/functions"
import * as sb from "@azure/service-bus"
const PublishToServiceBus: AzureFunction = async function (context: Context, req: HttpRequest): Promise<void> {
const eventDoc = req.body;
const serviceBusConnectionString = process.env["ServiceBusConnection"];
const topicName = process.env["TopicName"]';
const sbClient = sb.ServiceBusClient.createFromConnectionString(serviceBusConnectionString);
const topicClient = sbClient.createTopicClient(topicName);
const sender = topicClient.createSender();
const message: sb.SendableMessageInfo = { body: eventDoc };
// this works
sender.send(message);
// this creates message without body?
const scheduledEnqueueTimeUtc = new Date(Date.now() + 10000);
sender.scheduleMessages(scheduledEnqueueTimeUtc, [message]);
};
export default PublishToServiceBus;
但是當我使用 sender.scheduleMessages() 安排消息時,我的傳入綁定變量在 Azure 服務總線主題觸發器函數中未定義。
import { AzureFunction, Context } from "@azure/functions"
const serviceBusTopicTrigger: AzureFunction = async function (context: Context, mySbMsg: any): Promise<void> {
context.log('ServiceBus topic trigger function processed message', mySbMsg);
};
export default serviceBusTopicTrigger;
輸出: ServiceBus topic trigger function processed message undefined
這是圖書館的問題還是我做錯了什么?
該問題是由 @azure/service-bus sdk 中的錯誤引起的。
解決方法
"@azure/amqp-common"
庫導入DefaultDataTransformer
。
import { DefaultDataTransformer } from "@azure/amqp-common";
const { DefaultDataTransformer } = require("@azure/amqp-common");
scheduleMessage()
方法發送消息之前更新消息體如下
const dt = new DefaultDataTransformer();
message.body = dt.encode(message.body);
有關此錯誤的更多參考和調查 - Azure/azure-sdk-for-js#6816
在新世界(azure 函數 .net5)中,您不能再使用代理消息。 新圖書館不能滿足它。
函數應用聲明不再是 [FunctionName=] 而是 [Function= 你不能再接收“消息”或字節。 但只有一個字符串!!!。
例子;
[Function("TestFA")] public async Task Run([ServiceBusTrigger(topicName,subscribeName, Connection = ???)] string messageText, string id, FunctionContext executionContext )
魔術現在在 FunctionContext executionContext 中,您可以從中獲取屬性
例如 KeyValuePair<string, object> props = executionContext.BindingContext.BindingData.Where(x => x.Key == "UserProperties").FirstOrDefault();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.