spring rabbitmq - 同时消费多条消息

问题描述

我在 Spring Boot 应用程序中以这种方式使用 RabbitMQ

发件人:

value_df <- data.frame(recordId = as.character(),vardf = as.character(),value = as.character())
nvar <- 0

xmlEventParse(xmlDoc_clean,list(
                startElement = function (name,attrs) {
                  tagName <<- name
                },text = function (x) {
                  if (nchar(x) > 0) {
                    if (tagName == "recordId") {
                      rec <<- x
                    } else
                    if (tagName == "fieldName") {
                      var_f <<- x
                    } else {
                      if (tagName == 'fieldValue') {
                        v <- x
                         nvar <<- nvar + 1
                       value_df[nvar,1:3] <<- c(rec,var_f,v)
                      }
                    }
                  }
                },endElement = function (name) {
                  if (name == 'record') {
                    print(nvar)
                  }
                }
              ))

听众:

rabbitTemplate.convertAndSend("exchange","routingKey","Message Text");

使用上述代码,当应用程序执行发送方部分时,调用@RabbitListener(queues = "queueName") public void receive(String message) { System.out.println("start"); //send an http request that takes for example 4 seconds System.out.println("end"); } 方法。我的问题是receive 方法正在处理一条消息时,如果发送方将另一条消息放入队列,该方法不会处理新消息,因此不会打印第二个 receive 字直到 start 字前一条消息。换句话说,我想知道,一个消息监听器如何一次处理多个消息我不知道是什么问题。

解决方法

从您所陈述的问题来看,您的侦听器似乎是为单线程配置的。请参阅容器侦听器配置文档 herehere,尤其是并发设置。并发设置控制有多少线程同时处理队列上的消息。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...