3

プロデューサーとコンシューマーを同時に開始しました。6 時間後、プロデューサは約 6 クローレのメッセージをキューに生成し、6 時間後にプロデューサを停止しましたが、コンシューマは 18 時間実行した後でも継続的に実行されており、まだ 4 クローレのメッセージがキューに入っています。消費者のパフォーマンスが非常に遅い理由を教えてください。

前もって感謝します!

@Bean
    public SimpleMessageListenerContainer listenerContainer() {
        SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
        container.setConnectionFactory(connectionFactory());
        container.setQueueNames(this.queueName);
        container.setMessageListener(new MessageListenerAdapter(new TestMessageHandler(), new JsonMessageConverter()));
        return container;
    }
@Bean
    public ConnectionFactory connectionFactory() {
        CachingConnectionFactory connectionFactory = new CachingConnectionFactory(
                "localhost");
        connectionFactory.setUsername("guest");
        connectionFactory.setPassword("guest");
        return connectionFactory;
    }

    @Bean
    public RabbitTemplate rabbitTemplate() {
        RabbitTemplate template = new RabbitTemplate(connectionFactory());
        template.setMessageConverter(new JsonMessageConverter());
        template.setRoutingKey(this.queueName);
        template.setQueue(this.queueName);
        return template;
    }

    public class TestMessageHandler  {
           // receive messages
        public void handleMessage(MessageBeanTest msgBean) {
                   //  Storing bean data into CSV file
             }
    }
4

2 に答える 2

2

WikiPedia によると、crore == 10,000,000 なので、6000 万を意味します。

コンテナはリスナーと同じ速さでしかメッセージを処理できません。各メッセージで何をしているかを分析する必要があります。

また、最適なパフォーマンスを得るには、コンテナーの同時実行設定 (concurrentConsumers)、プリフェッチなどを試す必要がありますが、処理時間の大部分を占めるのはリスナーです。コンテナには非常に多くのゴミがあります。リスナーが適切に構築されていない場合、同時実行数を増やしても役に立ちません。

トランザクションを使用している場合、消費が大幅に遅くなります。

メッセージに対して何もしないリスナーを使用してみてください。

最後に、このような質問をするときは、常に構成を表示する必要があります。

于 2013-09-11T15:03:03.037 に答える