2017-06-08 10 views
0

私はウサギを使ってお互いに通信する2つのアプリケーションを持っています。ウサギの返信でオブジェクトをJsonに変換するにはどうすればよいですか?

私は今、私はこのエラーが発生します、(APP2に)リスナーに(APP1から)オブジェクトを送信し、(リスナーに)いくつかの工程の後に、それは別のオブジェクトを私に答える必要があり

ClassNotFound

I両方のアプリケーションにウサギのために、この設定を使用しています:

@Configuration 
public class RabbitConfiguration { 

    public final static String EXCHANGE_NAME = "paymentExchange"; 

    public final static String EVENT_ROUTING_KEY = "eventRoute"; 
    public final static String PAYEMNT_ROUTING_KEY = "paymentRoute"; 

    public final static String QUEUE_EVENT = EXCHANGE_NAME + "." + "event"; 
    public final static String QUEUE_PAYMENT = EXCHANGE_NAME + "." + "payment"; 
    public final static String QUEUE_CAPTURE = EXCHANGE_NAME + "." + "capture"; 

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

    @Autowired 
    private ConnectionFactory rabbitConnectionFactory; 

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

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

    @Bean 
    public RabbitTemplate rabbitTemplate() { 
     RabbitTemplate r = new RabbitTemplate(rabbitConnectionFactory); 
     r.setExchange(EXCHANGE_NAME); 
     r.setChannelTransacted(false); 
     r.setConnectionFactory(rabbitConnectionFactory); 
     r.setMessageConverter(jsonMessageConverter()); 
     return r; 
    } 

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

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

     for (int i = 0; i < nomes.length; i++) { 
      result.add(newQueue(nomes[i])); 
      if (nomes[i].equals(QUEUE_EVENT)) 
       result.add(makeBindingToQueue(nomes[i], EVENT_ROUTING_KEY)); 
      else 
       result.add(makeBindingToQueue(nomes[i], PAYEMNT_ROUTING_KEY)); 
     } 
     return result; 
    } 

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

    private static Queue newQueue(String nome) { 
     return new Queue(nome); 
    } 

} 

は、私はこれを使用してメッセージ送信:

String response = (String) rabbitTemplate.convertSendAndReceive(RabbitConfiguration.EXCHANGE_NAME, 
      RabbitConfiguration.PAYEMNT_ROUTING_KEY, domainEvent); 

をと待ちますオブジェクトへのキャストを使用した応答。

この通信は、同じウサギサーバーを使用する2つの異なるアプリケーション間で行われます。

どうすればこの問題を解決できますか?

私はウサギが送信操作でjsonにメッセージを変換し、返信で同じことを期待していましたので、返信のjsonに対応するオブジェクトを作成しました。

+0

これはリスナーのための私の設定です: '@Bean 公共SimpleRabbitListenerContainerFactory rabbitListenerContainerFactory(){ SimpleRabbitListenerContainerFactory工場=新しいSimpleRabbitListenerContainerFactory(); factory.setConnectionFactory(rabbitConnectionFactory); factory.setMessageConverter(jsonMessageConverter()); リターン・ファクトリー; } ' –

答えて

2

リスナーの設定を表示してください。 ListenerContainerにはJackson2JsonMessageConverterと一緒に提供され、__TypeId__ヘッダーを返信することを確認する必要があります。

また、いくつかのヘルプについては、Spring AMQP JSON sampleを参照してください。

関連する問題