我正在使用@ Azure /服务总线JavaScript库来发布和订阅来自Azure函数的Azure服务总线主题上的消息。为了接收消息,我正在使用Azure Service Bus Topic trigger函数,该函数是从模板创建的,没有任何更改。当我使用sender.send(消息)发布消息时,我可以正常接收到它。
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主题触发器函数中是未定义的。
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
这是库的问题还是我做错了什么?
发布于 2020-01-15 11:49:57
该问题是由@azure/service-bus sdk中的错误引起的。
解决方法
"@azure/amqp-common"库导入DefaultDataTransformer。typescript,import { DefaultDataTransformer } from "@azure/amqp-common";,
const { DefaultDataTransformer } = require("@azure/amqp-common"); javascript
sdk在调用scheduleMessage()方法发送消息之前更新消息体,如下所示
1. When you need to schedule the message, encode the message body before sending:
- `message.body = dt.encode(message.body);`
有关此错误的更多参考资料和调查- Azure/azure-sdk-for-js#6816
发布于 2021-05-21 17:24:39
在新的世界中(azure函数、.net5),您不能再使用代理消息。新的图书馆不能迎合它。
函数应用程序声明不再是消息,而是[Function=您不能再接收‘FunctionName=’或字节。但只有一个字符串!。
示例;
函数(“TestFA”)公共异步任务运行(ServiceBusTrigger(topicName,subscriberName,Connection =?)
例如props = executionContext.BindingContext.BindingData.Where(x => x.Key == "UserProperties").FirstOrDefault();
https://stackoverflow.com/questions/56373956
复制相似问题