2017-09-11 8 views
2

ここでいくつかの関連する質問を見ましたが、うまくいきませんでした。ウサギは別のアプリケーションからのメッセージをシリアル化しません。RabbitMQはメッセージをシリアライズしません。エラー変換

Caused by: org.springframework.amqp.AmqpException: No method found for class [B 

メッセージを受け取るための設定クラス以下。この他の構成を使用して

@Configuration 
public class RabbitConfiguration implements RabbitListenerConfigurer{ 

    public final static String EXCHANGE_NAME = "wallet-accounts"; 
    public final static String QUEUE_PAYMENT = "wallet-accounts.payment"; 
    public final static String QUEUE_RECHARGE = "wallet-accounts.recharge"; 

    @Bean 
    public List<Declarable> ds() { 
     return queues(QUEUE_PAYMENT, QUEUE_RECHARGE); 
    } 

    @Autowired 
    private ConnectionFactory rabbitConnectionFactory; 

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

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

    private List<Declarable> queues(String ... names){ 
     List<Declarable> result = new ArrayList<>(); 

     for (int i = 0; i < names.length; i++) { 
      result.add(makeQueue(names[i])); 
      result.add(makeBinding(names[i])); 
     } 
     return result; 
    } 

    private static Binding makeBinding(String queueName){ 
     return new Binding(queueName, DestinationType.QUEUE, EXCHANGE_NAME, queueName, null); 
    } 

    private static Queue makeQueue(String name){ 
     return new Queue(name); 
    } 

    @Bean 
    public MappingJackson2MessageConverter jackson2Converter() { 
     MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter(); 
     return converter; 
    } 

    @Bean 
    public DefaultMessageHandlerMethodFactory myHandlerMethodFactory() { 
     DefaultMessageHandlerMethodFactory factory = new DefaultMessageHandlerMethodFactory(); 
     factory.setMessageConverter(jackson2Converter()); 
     return factory; 
    } 

    @Override 
    public void configureRabbitListeners(RabbitListenerEndpointRegistrar registrar) { 
     registrar.setMessageHandlerMethodFactory(myHandlerMethodFactory()); 
    } 
} 

、誤差がほぼ同じである:

Caused by: org.springframework.amqp.support.converter.MessageConversionException: failed to resolve class name. Class not found [br.com.beblue.wallet.payment.application.accounts.PaymentEntryCommand] 

構成:

@Configuration 
public class RabbitConfiguration { 

    public final static String EXCHANGE_NAME = "wallet-accounts"; 

    public final static String QUEUE_PAYMENT = "wallet-accounts.payment"; 
    public final static String QUEUE_RECHARGE = "wallet-accounts.recharge"; 

    @Bean 
    public List<Declarable> ds() { 
     return queues(QUEUE_PAYMENT, QUEUE_RECHARGE); 
    } 

    @Autowired 
    private ConnectionFactory rabbitConnectionFactory; 

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

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

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

    private List<Declarable> queues(String ... names){ 
     List<Declarable> result = new ArrayList<>(); 

     for (int i = 0; i < names.length; i++) { 
      result.add(makeQueue(names[i])); 
      result.add(makeBinding(names[i])); 
     } 
     return result; 
    } 

    private static Binding makeBinding(String queueName){ 
     return new Binding(queueName, DestinationType.QUEUE, EXCHANGE_NAME, queueName, null); 
    } 

    private static Queue makeQueue(String name){ 
     return new Queue(name); 
    } 
} 

誰もがこれらの設定で間違っているか、何が欠けているものを教えてもらえますか?

答えて

3

クラスが見つかりません方法[B

は、あなたの着信application/jsonを変換することはできませんデフォルトSimpleMessageConverterがあることを意味します。それはちょうどそのcontent-typeを意識していないとちょうど戻ってbyte[]に落ちる。

クラス[br.com.beblue.wallet.payment.application.accounts.PaymentEntryCommand]見つからない

Jackson2JsonMessageConverterを変換できないことを意味あなたのapplication/jsonためのクラスを表す着信__TypeId__ヘッダ、内容は、ローカルクラスパスで見つけることができません。

確かにDefaultMessageHandlerMethodFactoryの設定は、AMQP変換には意味がありません。 bean定義のSimpleRabbitListenerContainerFactoryとそのsetMessageConverterを使用することを検討する必要があります。はい、適切なorg.springframework.amqp.support.converter.MessageConverter実装を注入することを検討してください。春ブーツの観点から

https://docs.spring.io/spring-amqp/docs/1.7.3.RELEASE/reference/html/_reference.html#async-annotation-conversion

が問題に構成することSimpleRabbitListenerContainerFactoryConfigurerがあります:

https://docs.spring.io/spring-boot/docs/1.5.6.RELEASE/reference/htmlsingle/#boot-features-using-amqp-receiving

+0

Tyのアルテム、問題は、私は消費者法に工場を設定していなかったということです。 @RabbitListener(id = "listenerPayment"、キュー= RabbitConfiguration.QUEUE_PAYMENT、containerFactory = "myFactory") –

関連する問題