Java 如何在azure服务总线中始终侦听队列并截获每条消息

Java 如何在azure服务总线中始终侦听队列并截获每条消息,java,azure,queue,azure-servicebus-queues,Java,Azure,Queue,Azure Servicebus Queues,我在azure中有一个ServiceBus,它有两个队列:第一个队列是客户端发送消息的地方(我需要截获消息。QUEUE\u in),第二个队列是客户端在我完成处理第一个队列中的消息时接收我发送的消息的队列(QUEUE\u OUT) 我需要一直听队列输入,当他们发送消息时,处理它并将消息发送到队列输出 我遇到的问题是,我无法在中截获队列中的消息,当我运行程序时,我知道队列中有消息,但程序无法看到它们 private void recibirMensaje() throws Exception {

我在azure中有一个ServiceBus,它有两个队列:第一个队列是客户端发送消息的地方(我需要截获消息。
QUEUE\u in
),第二个队列是客户端在我完成处理第一个队列中的消息时接收我发送的消息的队列(
QUEUE\u OUT

我需要一直听
队列输入
,当他们发送消息时,处理它并将消息发送到
队列输出

我遇到的问题是,我无法在中截获
队列中的消息,当我运行程序时,我知道队列中有消息,但程序无法看到它们

private void recibirMensaje() throws Exception {   
        QueueClient queueIn= new QueueClient(new ConnectionStringBuilder(stringConection, nameQueue),
                ReceiveMode.PEEKLOCK);
        ExecutorService executorService = Executors.newSingleThreadExecutor();
        this.interceptMessage(queueIn, executorService);
        recibirMensajeCliente.close();
        executorService.shutdown();

    }

private void interceptMessage(QueueClient queueIn, ExecutorService executorService) throws Exception {
        queueIn.registerMessageHandler(new IMessageHandler() {
            public CompletableFuture<Void> onMessageAsync(IMessage message) {
                if (message.getLabel() != null && message.getContentType() != null
                        && message.getLabel().contentEquals(etiquetaMensajes)
                        && message.getContentType().contentEquals("application/json")) {

                    byte[] body = message.getBody();
                    logger.info("Printing message{}", body);

                }
                return CompletableFuture.completedFuture(null);
            }

            public void notifyException(Throwable throwable, ExceptionPhase exceptionPhase) {
            }
        },
                // 1 concurrent call, messages are auto-completed, auto-renew duration
                new MessageHandlerOptions(1, true, Duration.ofMinutes(1)), executorService);


    }
private void recibirMensaje()引发异常{
QueueClient queueIn=新的QueueClient(新连接StringBuilder(StringConction,nameQueue),
ReceiveMode.peek锁);
ExecutorService ExecutorService=Executors.newSingleThreadExecutor();
此.interceptMessage(queueIn,executorService);
recibirmensajeclient.close();
executorService.shutdown();
}
private void interceptMessage(QueueClient queueIn、ExecutorService ExecutorService)引发异常{
registerMessageHandler(新的IMessageHandler(){
公共CompletableFuture onMessageAsync(IMessage消息){
if(message.getLabel()!=null&&message.getContentType()!=null
&&message.getLabel().contentEquals(etiquetaMensajes)
&&message.getContentType().contentEquals(“应用程序/json”)){
byte[]body=message.getBody();
logger.info(“打印消息{}”,正文);
}
返回CompletableFuture.completedFuture(空);
}
公共无效notifyException(可丢弃可丢弃,ExceptionPhase ExceptionPhase){
}
},
//1个并发呼叫,消息自动完成,自动续订持续时间
新的MessageHandlerOptions(1,true,分钟持续时间(1)),executorService);
}

我没有发布send方法,因为我对它没有问题。我不知道如何一直监听
队列中的
并处理消息,或者如何知道队列中是否有要处理的消息以及如何拦截消息。

您最好使用Azure函数,它具有对服务总线队列的本机支持。它将侦听您的队列,并为您注入消息内容。之后,可以使用输出绑定在作业完成时通知使用者


更多信息:

感谢您的回答,很抱歉,这是我第一次使用队列和azure,我一直在寻找示例,但我没有找到,请您提供一些示例。在我发布的链接中,您可以找到Service bus触发器示例(只需使用右菜单并单击“输入”“输出”linksinput@FunctionName)(“sbprocessor”)公共无效serviceBusProcess(@ServiceBusQueueTrigger(name=“msg”,queueName=“myqueuename”,connection=“myconnvarname”)字符串消息,最终执行上下文){context.getLogger().info(message);}输出@FunctionName(“httpToServiceBusQueue”)@ServiceBusQueueOutput(name=“message”,queueName=“myqueue”,connection=“AzureServiceBusConnection”)公共字符串pushToQueue(@HttpTrigger(name=“request”,methods={HttpMethod.POST},authLevel=AuthorizationLevel.ANONYMOUS)最终字符串消息,@HttpOutput(name=“response”)最终输出绑定结果{result.setValue(message+“has sent.”);return message;}谢谢Thiago。这里的问题是我没有访问azure中的队列,我只知道stringConnection和队列的名称,但我无法在azure中创建HTTP函数触发器。我想我需要用我目前为止的工作方式来完成。