Java 是否有任何优化参数可以加速我的应用程序,使其在向JMS队列发送消息时暂停

Java 是否有任何优化参数可以加速我的应用程序,使其在向JMS队列发送消息时暂停,java,spring,spring-boot,jms,qpid,Java,Spring,Spring Boot,Jms,Qpid,我试图在(合理)负载下执行应用程序。负载下发生的情况是,当尝试将消息放入队列时,应用程序在完成发送之前会暂停约4秒。奇怪的是,执行此操作后,下一条消息立即放入队列需要几毫秒的时间。消息实际上是相同的消息-因此消息大小不是一个因素 应用程序使用SpringBoot2.1.6、ApacheQPID0.43.0作为JMS/AMQP提供程序 正在使用的消息总线是Azure ServiceBus,但我使用Artemis观察到了相同的行为 在ApacheQPIDJMSConnectionFactory上,我

我试图在(合理)负载下执行应用程序。负载下发生的情况是,当尝试将消息放入队列时,应用程序在完成发送之前会暂停约4秒。奇怪的是,执行此操作后,下一条消息立即放入队列需要几毫秒的时间。消息实际上是相同的消息-因此消息大小不是一个因素

应用程序使用SpringBoot2.1.6、ApacheQPID0.43.0作为JMS/AMQP提供程序

正在使用的消息总线是Azure ServiceBus,但我使用Artemis观察到了相同的行为

在ApacheQPIDJMSConnectionFactory上,我尝试处理属性“forceSyncSend”

我已经尝试使用Spring Boot CachingConnectionFactory仅缓存消息生成器。我已将默认缓存大小从1增加到20,但没有成功

我已经查看了JmsTemplate参数,但找不到任何与消息生产者相关的参数(有很多监听器,但那是另一回事)

执行发送的代码非常简单:

private void sendToQueue(Object message, String queueName) {
        jmsTemplate.convertAndSend(queueName, message, (Message jmsMessage) -> {
            jmsMessage.setStringProperty(OBJECT_TYPE_PARAMETER, message.getClass().getSimpleName());
            return jmsMessage;
        });
有什么明显的可以尝试的吗?是否有任何调整参数可阻止此失速发生

系统上的负载不是微不足道的,但也不是过多的(它需要比现在高出很多!)


有什么想法吗?

与其随机尝试,不如分析应用程序并找出根本原因。可能还需要检查可能的信息。由于应用程序位于Azure Kubernetes集群中,因此对概要文件进行分析有点困难。我从日志中知道,暂停线程没有做多少工作,在暂停期间没有大量活动线程。因此,我不知道它为什么会停滞。你在日志中看到类似的东西吗?“由于代理强制流控制,消息发送延迟了5秒”日志中没有显示任何错误。我还建议您调查流控制方面。要明确的是,流量控制不是一个错误。它是AMQP协议的一个基本部分,可以很好地静默执行。