2017-12-20 11 views
0

私は使用したい春のamqpアプリがありますが、リスナーサービスを登録する方法を知ることができないようです。これは私の注釈ベースの設定ファイルです。setMessageListenerでリスナーサービスを登録する

package com.jerry.configuration; 

import org.springframework.amqp.core.AmqpAdmin; 
import org.springframework.amqp.core.Queue; 
import org.springframework.amqp.rabbit.connection.CachingConnectionFactory; 
import org.springframework.amqp.rabbit.connection.ConnectionFactory; 
import org.springframework.amqp.rabbit.core.RabbitAdmin; 
import org.springframework.amqp.rabbit.core.RabbitTemplate; 
import org.springframework.amqp.rabbit.config.SimpleRabbitListenerContainerFactory; 
import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.Configuration; 


@Configuration 
public class SpringAmqpConfiguration { 

    protected final String helloWorldQueueName = "hello.world.queue"; 

    @Bean 
    public ConnectionFactory connectionFactory() { 
     CachingConnectionFactory connectionFactory = new CachingConnectionFactory("localhost"); 
     connectionFactory.setUsername("guest"); 
     connectionFactory.setPassword("guest"); 
     return connectionFactory; 
    } 

    @Bean 
    public AmqpAdmin amqpAdmin() { 
     return new RabbitAdmin(connectionFactory()); 
    } 

    @Bean 
    public RabbitTemplate rabbitTemplate() { 
     RabbitTemplate template = new RabbitTemplate(connectionFactory()); 
     //The routing key is set to the name of the queue by the broker for the default exchange. 
     template.setRoutingKey(this.helloWorldQueueName); 
     //Where we will synchronously receive messages from 
     template.setQueue(this.helloWorldQueueName); 
     return template; 
    } 

    @Bean 
    // Every queue is bound to the default direct exchange 
    public Queue helloWorldQueue() { 
     return new Queue(this.helloWorldQueueName); 
    } 

    @Bean 
    public Binding binding() { 
     return declare(new Binding(helloWorldQueue(), defaultDirectExchange())); 
    } 

    //https://docs.spring.io/spring-amqp/docs/1.5.0.BUILD-SNAPSHOT/reference/html/_reference.html#async-annotation-driven 

    @Bean 
    public SimpleRabbitListenerContainerFactory rabbitListenerContainerFactory() { 
     SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory(); 
     factory.setConnectionFactory(connectionFactory()); 
     factory.setConcurrentConsumers(3); 
     //If you want a fixed number of consumers, omit the max. 
     factory.setMaxConcurrentConsumers(10); 
     //Set message listener : container.setMessageListener(this.myFirstListener); 
     return factory; 
    } 


    /** 
    * Listener Bean 
    * Threadpool 
    *  
    <bean id="messageListener" class="com.spring.rabbitmq.service.MessageListenerService" /> 

    <rabbit:listener-container connection-factory="connectionFactory"> 
     <rabbit:listener ref="messageListener" queues="my.first.queue" /> 
    </rabbit:listener-container> 

    */ 


} 

これは私が

package com.jerry.services; 

import org.slf4j.Logger; 
import org.springframework.amqp.core.Message; 
import org.springframework.amqp.core.MessageListener; 


public class MessageListenerService implements MessageListener { 

    private static final Logger LOGGER = org.slf4j.LoggerFactory.getLogger(MessageListenerService.class); 

    @Override 
    public void onMessage(Message message) { 
     LOGGER.info(message.getMessageProperties().toString());; 
     LOGGER.info(new String(message.getBody())); 
    } 
} 

どのように私はこのBeanでリスナー・サービスを登録しないとどのように私は別のキューを聞い複数のリスナーを登録して行くでしょうか?使用したいリスナーサービスですかあなたのリスナクラスの

@Bean 
    public SimpleRabbitListenerContainerFactory rabbitListenerContainerFactory() { 
     SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory(); 
     factory.setConnectionFactory(connectionFactory()); 
     factory.setConcurrentConsumers(3); 
     //If you want a fixed number of consumers, omit the max. 
     factory.setMaxConcurrentConsumers(10); 
     //Set message listener : container.setMessageListener(this.myFirstListener); 
     return factory; 
    } 

答えて

1

MessageListenerServiceため@Beanの定義と作成SimpleMessageListenerContainer@Beanであり、setMessageListener()を使用する。

コンテナファクトリは、ユーザー定義のリスナー用ではありません。@RabbitListener pojoアノテーション用です。

複数のリスナーを異なるキューでリスニングするにはどうすればよいですか?

同じリスナーで複数のキューをリスンする場合は、コンテナ内のキュー名を設定します。

キューごとに異なるリスナーが必要な場合は、それぞれにSimpleMessageListenerContainerが必要です。

または代わりに@RabbitListener注釈を使用してください。

0

あなたはこのような何かを行う必要があります。

@EnableRabbit 
@Service 
public class MessageListenerService { 

    private static final Logger LOGGER = org.slf4j.LoggerFactory.getLogger(MessageListenerService.class); 

    @RabbitListener(queues = { Constant.QUEUE_NAME }) 
    public void onMessage(Message message) { 
    LOGGER.info(message.getMessageProperties().toString());; 
    LOGGER.info(new String(message.getBody())); 
    } 
} 
は、私はこのBeanでリスナーサービスを登録するにはどうすればよい
+0

上記のサービスの設定はどのように見えますか?また、複数のリスナーを使用するにはどうすればよいですか? – Gandalf

+0

springbootを使用していますか? – Hiren

+0

Spring mvc – Gandalf

関連する問題