如何在azure服务总线(java)中将消息直接发送到死信队列中?

h6my8fg2  于 2021-07-08  发布在  Java
关注(0)|答案(1)|浏览(510)

我有一个servicebusqueuetrigger函数,它从服务总线上取下一个字符串并调用另一个api,如果该api调用不返回200,我想将该字符串作为meesage移到死信队列中。我该怎么做?
到目前为止我有这个。。。

public class myEventsConsumerFunction {

    @FunctionName("myEventTrigger")
    public void myEventTrigger(
            @ServiceBusQueueTrigger(name = "message", queueName = "%QUEUE_NAME%", connection = "ServiceBusConnection") String message,
            final ExecutionContext context) throws MSPException {
            int responseCode = callApi(message);
                    if(responseCode!=200){
            String ConnectionString = "connectionstring"
            QueueClient sendClient = new QueueClient(new ConnectionStringBuilder(ConnectionString, queueName), ReceiveMode.PEEKLOCK);
            //
            //how do i send my String message to dead letter queue here?
            //

        }

我在queue client中看到了一组名为deadletter的方法,但它们将uuid作为参数(我不确定这是什么),而不是消息字符串。

neskvpey

neskvpey1#

问题的关键在于offcial的基于java的azure sdk包没有编写messagereceiver类(据我所知,官方只实现了c#)的imessagereceiver接口,如果是c#,可以直接使用:
https://docs.microsoft.com/en-us/dotnet/api/microsoft.azure.servicebus.core.messagereceiver?view=azure-dotnet
但是对于java,官方还没有实现这个,只有一个接口:
https://docs.microsoft.com/en-us/java/api/com.microsoft.azure.servicebus.imessagereceiver?view=azure-java-stable
我在queue client中看到了一组名为deadletter的方法,但它们将uuid作为参数(我不确定这是什么),而不是消息字符串。
我知道这一点,但它不是基于消息的,如果您创建queueclient的对象并使用该方法,它将告诉您no receiver:

总之,我认为这是一个未完成的特性,也许它可以在未来的sdk版本中更新。但现在不行,除非您阅读底层代码并自己实现imessagereceiver接口,否则这是不可能的。

相关问题