我正在使用@azure/service-bus (7.0.0) npm客户端推送计划的消息,但其未推送的所有消息都失败,错误为:{“name”:“ServiceBusError”,"retryable":false,"code":"GeneralError"}}“
const sbClient = this.getInstance();
const sender = sbClient.createSender(queueOrTopic);
await sender.scheduleMessages(message, scheduleTimeUtc);上面是我如何触发的代码片段。
发布于 2021-11-29 07:24:23
尝试使用下面的代码块发送基于计时器的消息。这将被添加到消息队列中,并将在设置的特定时间范围内发送。
public static async sendScheduleMessage(
content: Message): Promise<string> {
const serviceConnection =
AzureServiceBus.createConnection();
const client = serviceConnection.createQueueClient(
"" + process.env.AZURE_SERVICEBUS_QUEUE);
const sender = client.createSender();
let response = "";
try {
const scheduledEnqueueTimeUtc
= moment().utc().add(1, "m").toDate();
const sequenceId = await sender.scheduleMessage(
scheduledEnqueueTimeUtc,
{body: JSON.stringify(content),
label: "MyTopic"});
response = sequenceId.toString();
await client.close();
} catch (error) {
} finally {
await serviceConnection.close();
}
return resp;
}基本上,在某些情况下,sequenceid会有问题,因为它需要编码,因为没有传递正确的sequenceid来获取该消息的信息。为此,Azure已使用以下解决方案修复了此问题:
import { DefaultDataTransformer }
from "@azure/amqp-common";
...
...
const dt = new DefaultDataTransformer();
const sequenceId = await sender.scheduleMessage(
scheduledEnqueueTimeUtc,
{body: dt.encode(JSON.stringify(content)),
label: "MyTopic"});
response = sequenceId.toString();有了上面的所有代码,就可以实现这一点。
https://stackoverflow.com/questions/70116467
复制相似问题