如何手动将消息设为死信。(消息不会发送到队列)

问题描述 投票:0回答:1

当 API 响应不是 200 时,我需要对消息进行死信处理。 消息最初不是发送到主队列,我需要直接将消息发送到死信。

遇到 deadLetter() 方法,但参数应为“ServiceBusReceiverClient”类型,并且无法手动转换为 ServiceBusReceiverClient 类型,因为构造函数是私有的。 有没有什么有效的方法可以通过Java应用程序直接对消息进行死信处理? 该队列还用于发送其他有效消息,因此无法实现一些适用于所有消息的配置更改。

java azureservicebus azure-servicebus-queues dead-letter
1个回答
0
投票

正如您提到的,我们可以先将消息发送到队列,然后这些消息将发送到死信队列。

代码:

import com.azure.messaging.servicebus.*;
import com.azure.messaging.servicebus.models.*;

import java.util.List;

public class ServiceBus {

    private static final String SERVICE_BUS_CONNECTION_STRING = "<conec_string>";
    private static final String QUEUE_NAME = "<queue_name>";

    public static void main(String[] args) {
        sendMessageToQueue();
        int responseCode = 404;
        if (responseCode != 200) {
            moveMessageToDeadLetterQueue();
        }
    }

    private static void sendMessageToQueue() {
        ServiceBusSenderClient sender = new ServiceBusClientBuilder()
                .connectionString(SERVICE_BUS_CONNECTION_STRING)
                .sender()
                .queueName(QUEUE_NAME)
                .buildClient();

        ServiceBusMessage message = new ServiceBusMessage("Hi Kamali");

        sender.sendMessage(message);
        System.out.println("Sent message to queue");

        sender.close();
    }
    private static void moveMessageToDeadLetterQueue() {
        ServiceBusReceiverClient receiver = new ServiceBusClientBuilder()
                .connectionString(SERVICE_BUS_CONNECTION_STRING)
                .receiver()
                .queueName(QUEUE_NAME)
                .buildClient();
        Iterable<ServiceBusReceivedMessage> receivedMessages = receiver.receiveMessages(1);

        for (ServiceBusReceivedMessage receivedMessage : receivedMessages) {
            receiver.deadLetter(receivedMessage);
            System.out.println("Moved message to dead-letter queue");
        }
        receiver.close();
    }
}

输出:

运行成功如下,

enter image description here

消息首先发送到主队列,如下所示,

enter image description here

并且,快速将该消息发送到死信队列,如下所示。

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.