首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Azure ESB调度消息导致的常规错误

Azure ESB调度消息导致的常规错误
EN

Stack Overflow用户
提问于 2021-11-25 19:37:33
回答 1查看 33关注 0票数 0

我正在使用@azure/service-bus (7.0.0) npm客户端推送计划的消息,但其未推送的所有消息都失败,错误为:{“name”:“ServiceBusError”,"retryable":false,"code":"GeneralError"}}“

代码语言:javascript
复制
const sbClient = this.getInstance();
const sender = sbClient.createSender(queueOrTopic);
await sender.scheduleMessages(message, scheduleTimeUtc);

上面是我如何触发的代码片段。

EN

回答 1

Stack Overflow用户

发布于 2021-11-29 07:24:23

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

代码语言:javascript
复制
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已使用以下解决方案修复了此问题:

代码语言:javascript
复制
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();

有了上面的所有代码,就可以实现这一点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70116467

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档