使用 Spring 集成优化来自 rabbitmq 的消费消息
Optimise Consuming messages from rabbitmq using Spring Integration
我正在尝试构建 IntegrationFlowFactory 以轻松构建集成流以在应用程序上下文之间传递事件。
似乎一切正常,事件发布速度非常快。
但是我不明白为什么消费这么慢。添加 concurrentConsumers 或更改 prefetchCount 似乎没有任何改变。
其他帖子谈论网络速度很慢,但正如您在 RabbitConfig 中看到的,我使用的是本地主机。
我有一个存储库,其中包含我的 spring 集成示例:
https://github.com/teplyuska/spring-integration-example
你的问题在这里:
Amqp.inboundGateway(getListenerContainer(queue, concurrentConsumers, prefetchCount)
同时,您的下游流量是单向并且return没有任何回复:
.handle(p -> {
UpdateSecretEvent payload = (UpdateSecretEvent) p.getPayload();
System.out.println("Account: " + payload.getAccountId() + " has secret: " + payload.getNewSecret());
})
.get();
或
.handle(p -> {
UpdateEmailEvent payload = (UpdateEmailEvent) p.getPayload();
System.out.println("Account: " + payload.getAccountId() + " has email: " + payload.getEmail());
})
.get();
因此,AmqpInboundGateway
在其 MessagingTemplate.sendAndReceive()
中等待 private static final long DEFAULT_TIMEOUT = 1000L;
的回复
切换到 Amqp.inboundAdapter()
就可以了。
我正在尝试构建 IntegrationFlowFactory 以轻松构建集成流以在应用程序上下文之间传递事件。
似乎一切正常,事件发布速度非常快。
但是我不明白为什么消费这么慢。添加 concurrentConsumers 或更改 prefetchCount 似乎没有任何改变。
其他帖子谈论网络速度很慢,但正如您在 RabbitConfig 中看到的,我使用的是本地主机。
我有一个存储库,其中包含我的 spring 集成示例: https://github.com/teplyuska/spring-integration-example
你的问题在这里:
Amqp.inboundGateway(getListenerContainer(queue, concurrentConsumers, prefetchCount)
同时,您的下游流量是单向并且return没有任何回复:
.handle(p -> {
UpdateSecretEvent payload = (UpdateSecretEvent) p.getPayload();
System.out.println("Account: " + payload.getAccountId() + " has secret: " + payload.getNewSecret());
})
.get();
或
.handle(p -> {
UpdateEmailEvent payload = (UpdateEmailEvent) p.getPayload();
System.out.println("Account: " + payload.getAccountId() + " has email: " + payload.getEmail());
})
.get();
因此,AmqpInboundGateway
在其 MessagingTemplate.sendAndReceive()
中等待 private static final long DEFAULT_TIMEOUT = 1000L;
切换到 Amqp.inboundAdapter()
就可以了。