我正在使用@ azure / service-bus JavaScript库从Azure Functions发布和订阅Azure Service Bus主题上的消息。 为了接收消息,我使用了从模板创建的Azure Service Bus Topic触发函数,没有进行任何更改。 当我使用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 Service Bus Topic触发函数中未定义。
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
这是图书馆的问题,还是我做错了什么?
答案 0 :(得分:1)
此问题是由@ 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
答案 1 :(得分:1)
在新世界(azure 函数 .net5)中,您不能再使用代理消息。新图书馆不能满足它。
函数应用声明不再是 [FunctionName=] 而是 [Function= 您无法再接收“消息”或字节。但只有一个字符串!!!。
示例;
[函数("TestFA")] public async Task Run([ServiceBusTrigger(topicName,subscribeName, Connection = ???)] string messageText, string id, FunctionContext executionContext)
魔法现在在 FunctionContext executionContext 你可以从中获取属性
例如 KeyValuePair