2017-12-09 9 views
0

私はrabbitmqからメッセージを読み込んでOracleデータベースに書き込むアプリケーションを作っています。私は春のブートバッチを使ってメッセージを読むことができましたが、 "No 'キューが指定されていません"というエラーが表示されて終了しました。RabbitTemplateの設定を確認してください。org.springframework.amqp.AmqpIllegalStateException: 'キュー'が指定されていません。 RabbitTemplateの構成を確認してください

RabbitConfig.java

@Configuration 
public class RabbitMQConfig { 

// @Value("${conveh.rabbitmq.queue}") 
    public String queueName ="hello2"; 

// @Value("${conveh.rabbitmq.exchange}") 
    public String exchange="hello_exchage2"; 

    @Bean 
    public Queue queue() { 
     return new Queue(queueName, false); 
    } 

    @Bean 
    public TopicExchange exchange() { 
     return new TopicExchange(exchange); 
    } 

    @Bean 
    public Binding binding(Queue queue, TopicExchange exchange) { 
     return BindingBuilder.bind(queue).to(exchange).with(queueName); 
    } 

    @Bean 
    public MessageConverter jsonMessageConverter() { 
     return new Jackson2JsonMessageConverter(); 
    } 

    @Bean 
    public AmqpTemplate rabbitTemplate(ConnectionFactory connectionFactory) { 
     RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory); 
     rabbitTemplate.setQueue(queueName); 
     rabbitTemplate.setMessageConverter(jsonMessageConverter()); 
     return rabbitTemplate; 
    } 

    @Bean 
    public ConnectionFactory connectionFactory() { 

     CachingConnectionFactory connectionFactory = new CachingConnectionFactory(); 
     connectionFactory.setHost("host"); 
     connectionFactory.setPort(123); 
     connectionFactory.setVirtualHost("/xxx"); 
     connectionFactory.setUsername("xxx"); 
     connectionFactory.setPassword("xxx"); 
     return connectionFactory; 
    } 
} 

BatchConfig.java私は適切にキュー名を与えるために行方不明です何

@Configuration 
@EnableBatchProcessing 
public class BatchMqListener { 
// private final Logger logger = LoggerFactory.getLogger(ImportJobConfig.class); 

     @Autowired 
     JobBuilderFactory jobBuilderFactory; 
     @Autowired 
     StepBuilderFactory stepBuilderFactory; 
     @Autowired 
     RabbitTemplate rabbitTemplate; 

     @Bean 
     public Job importJob() { 
     return jobBuilderFactory.get("importJob") 
      .listener(new JobExecutionListener() { 
       @Override 
       public void beforeJob(JobExecution jobExecution) { 
//    logger.info("Ready to start the job"); 
        System.out.println("Ready to start the job"); 
       } 

       @Override 
       public void afterJob(JobExecution jobExecution) { 
//    logger.info("Job successfully executed."); 
        System.out.println("Job successfully executed."); 
       } 
      }) 
      .incrementer(new RunIdIncrementer()) 
      .flow(stepBuilderFactory.get("importStep") 
       .<VehicleEvent, VehicleEvent>chunk(2) 
       .reader(new AmqpItemReader<>(rabbitTemplate)) 
       .listener(new QueueListener<VehicleEvent>()) 
       .processor(customProcessor()) 
       .writer(writer()) 
       .build()) 
      .end() 
      .build(); 
     } 

     public ItemProcessor<VehicleEvent, VehicleEvent> customProcessor(){ 
      return null; 
     } 

     @Bean 
     public FlatFileItemWriter<VehicleEvent> writer() { 
//  log.info("writer called"); 
     FlatFileItemWriter<VehicleEvent> writer = new FlatFileItemWriter<>(); 
     writer.setResource(new FileSystemResource("output/item.all.csv")); 
     writer.setAppendAllowed(true); 
     writer.setLineAggregator(new DelimitedLineAggregator<VehicleEvent>() {{ 
      setDelimiter(","); 
      setFieldExtractor(new BeanWrapperFieldExtractor<VehicleEvent>() {{ 
      setNames(new String[]{"id", "itemName"}); 
      }}); 
     }}); 
     return writer; 
     } 
} 

答えて

0

rabbitTemplate()メソッドに間違った戻り値の型を使用しました。これはRabbitTemplateでなければなりません。

@Bean 
    public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) { 
     RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory); 
     rabbitTemplate.setQueue(queueName); 
     rabbitTemplate.setMessageConverter(jsonMessageConverter()); 
     return rabbitTemplate; 
    } 
関連する問題