bugfix> java > 投稿

コードを次の構成に編集しました。

@SpringBootApplication
public class EndPoint {

String QUEUE_PROCESSING_TRANSACTION = "processing-process-queue";
String QUEUE_DATABASE_TRANSACTION = "database-transa-queue";
......
@Bean
public Queue queueProcessingTransaction() {
    return new Queue(QUEUE_PROCESSING_TRANSACTION, true);
}
@Bean
public Queue queueDatabaseEventLogs() {
    return new Queue(QUEUE_DATABASE_EVENT_LOGS, true);
}
@Bean
public Binding bindingQueueProcessingTransaction() {
   return BindingBuilder.bind(new Queu........
}
@Bean
public CachingConnectionFactory connectionFactory() {
    CachingConnectionFactory connectionFactory = new CachingConnectionFactory(HOST);
    return connectionFactory;
}
@Bean
public AmqpAdmin amqpAdmin(CachingConnectionFactory connectionFactory) {
RabbitAdmin admin = new RabbitAdmin(connectionFactory);
.........
admin.declareQueue(new Queue(QUEUE_PROCESSING_TRANSACTION, true));
return admin;
}
@Bean
public RabbitTemplate processingTemplate(CachingConnectionFactory connectionFactory) {
RabbitTemplate processingTemplate = new RabbitTemplate(connectionFactory);
processingTemplate.setExchange(EXCHANGE_PROCESSING);
.......
return processingTemplate;
}

以前は、この構成をJavaクラスに使用し、RabbitTemplateにアクセスするために2番目のJavaクラスで拡張しました。 JavaクラスでRabbitTemplateを使用するにはどうすればよいですか?おそらく春に設計された施設が既に実装されていますか?

回答 2 件
  • 接続ファクトリーから始まるテンプレートを作成する別のBeanを追加するだけです。

    @Bean
    public RabbitTemplate rabbitTemplate(CachingConnectionFactory connectionFactory) {
       RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
       return rabbitTemplate;
    }
    
    

    コンテナ管理クラスで自動配線できます:

    @Autowired private RabbitTemplate rabbitTemplate;
    
    

  • RabbitTemplate Beanを別のSpring Beanに挿入して使用できます。たとえば、次のような新しいSpring Bean(コンポーネント)を作成できます。

    @Component
    public class MyComponent {
      @Autowired
      private RabbitTemplate template;
      public void testRabbitTemplate() {
        System.out.println(template);
      }
    }
    
    

    注入は MyComponent を取得する場合にのみ機能することに注意してください  Spring Contextから(つまり、 new を使用してインスタンス化してはいけません  キーワード)。

    同じRabbitTemplateを EndPoint に挿入することもできます  クラス本体に次の行を追加するだけです:

    @Autowired private RabbitTemplate template;
    
    

あなたの答え