RabbitMQ Spring“在使用Java lambda parallelStream时,无法为查找键确定目标ConnectionFactory”

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

我们有一个使用RabbitMQ的Spring Java应用程序,这是场景:

  • [有一个使用者从队列中接收消息并将其发送给另一个。我们使用“ SimpleRabbitListenerContainerFactory”作为容器工厂,但是在将消息发送到“ parallelStream”中的另一个队列时,我们得到了IllegalStateException “无法为查找键确定目标ConnectionFactory”异常
  • 当我们删除“ parallelStream”时,它可以正常工作。

public void sendMessage(final StagingMessage stagingMessage,最终Long时间戳,最终String国家){

    final List<TransformedMessage> messages = processMessageList(stagingMessage);

    messages.parallelStream().forEach(message -> {
        final TransformedMessage transformedMessage = buildMessage(timestamp, ApiConstants.POST_METHOD, country);
        productAssortmentMessageSender.sendQueue(country, transformedMessage);
    });
}
spring rabbitmq spring-amqp
1个回答
0
投票

欢迎堆栈溢出!

当问这样的问题时,您应该始终显示相关的代码和配置Bean。

我假设您正在使用RoutingConnectionFactory

它使用ThreadLocal存储查找关键字,因此发送必须在设置关键字的同一线程上进行。

通常,您绝对不应该在侦听器中成为异步对象;您冒着丢失消息的风险。要增加并发性,请使用容器上的并发属性。

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