首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DeliverCallback deliverCallback = (consumerTag,delivery)函数未被调用

DeliverCallback deliverCallback = (consumerTag,delivery)函数未被调用
EN

Stack Overflow用户
提问于 2019-07-05 14:17:28
回答 2查看 1.1K关注 0票数 3

我正在尝试从rabbitmq队列中检索响应,在第一次使用相同的代码时,我能够正确地检索响应,但每当我第二次或第三次运行它时,它都不会调用我试图检索响应的delivercallback函数

代码语言:javascript
复制
DeliverCallback deliverCallback = (consumerTag, delivery) -> {
    String message = new String(delivery.getBody(), "UTF-8");

    System.out.println(" [x] Received '" + message + "'");

};
boolean autoAck = true; // acknowledgment is covered below
channel.basicConsume(QUEUE_NAME, autoAck, deliverCallback, consumerTag -> { });

期望的:响应应该被打印出来,它在DeliverCallbackλ表达式中。实际:未调用DeliverCallback lambda表达式这就是我无法从rabbitmq队列检索响应的原因

EN

回答 2

Stack Overflow用户

发布于 2021-03-22 01:48:59

发回确认消息将消息从队列中移除,因此当消费者应用程序第二次和第三次被触发时,消息是不可检索的。

票数 2
EN

Stack Overflow用户

发布于 2019-09-19 14:20:46

试试这个:

代码语言:javascript
复制
private static void LogMsg(String msg) {
    System.out.println(msg);
}

// ...

DeliverCallback deliverCallback = new DeliverCallback() {
    public void handle(String s, Delivery delivery) throws IOException {
        LogMsg("s - "+s);
        LogMsg("Tag: "+delivery.getEnvelope().getDeliveryTag());

        String message = new String(delivery.getBody(), "UTF-8");
        LogMsg(message);
    }
};

channel.basicConsume(queueName, true, deliverCallback, new CancelCallback() {
    public void handle(String consumerTag) throws IOException {
    }
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56897478

复制
相关文章

相似问题

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