【问题标题】:Azure ESB scheduled message resulting general errorAzure ESB 计划消息导致一般错误
【发布时间】:2022-01-04 01:06:30
【问题描述】:

我正在使用@azure/service-bus (7.0.0) npm 客户端推送预定消息,但它没有被推送 一切都失败了 错误:{"name":"ServiceBusError","re​​tryable":false,"code":"GeneralError"}}"

const sbClient = this.getInstance();
const sender = sbClient.createSender(queueOrTopic);
await sender.scheduleMessages(message, scheduleTimeUtc);

以上是我如何触发的代码sn-p。

【问题讨论】:

标签: javascript node.js typescript azure azureservicebus


【解决方案1】:

尝试使用以下代码块发送基于计时器的消息。这将被添加到消息队列中,并将在设置的特定时间范围内发送。

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();

通过以上所有代码,就可以实现了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-02
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    相关资源
    最近更新 更多