2016-05-11 4 views
0

私はRabbitMQサーバーで直接取引所にメッセージを送信しようとしています。「タイプの値を変換できません」という例外がSpring AMQPで発生しました

私はウサギMQと対話するためのXML構成で春AMQPを使用

。「TEST_QUEUEという」という名前のキュー、キュー「」TEST_QUEUEという」にバインドされているのと同じ名前「TEST_QUEUEという」との直接交換があり、ここに私のconfがある:

<rabbit:template id="amqpTemplate" 
       connection-factory="rabbitConnectionFactory" 
       exchange="test_queue"/> 

<rabbit:admin connection-factory="rabbitConnectionFactory"/> 

<rabbit:queue name="test_queue"/> 

<rabbit:connection-factory id="rabbitConnectionFactory" (...)/> 

<rabbit:direct-exchange name="test_queue"> 
    <rabbit:bindings> 
     <rabbit:binding queue="test_queue"/> 
    </rabbit:bindings> 
</rabbit:direct-exchange> 

そして、私はメッセージをこのように送信しようとしている:私が得た

AbstractApplicationContext ctx = new ClassPathXmlApplicationContext("context.xml"); 
RabbitTemplate template = (RabbitTemplate) ctx.getBean("amqpTemplate"); 
template.convertAndSend("Hello, world!"); 

例外:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.amqp.rabbit.config.BindingFactoryBean#0': Initialization of bean failed; nested exception is org.springframework.beans.ConversionNotSupportedException: Failed to convert property value of type 'org.springframework.amqp.core.DirectExchange' to required type 'org.springframework.amqp.core.Queue' for property 'destinationQueue'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [org.springframework.amqp.core.DirectExchange] to required type [org.springframework.amqp.core.Queue] for property 'destinationQueue': no matching editors or conversion strategy found 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:553) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:305) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:301) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:196) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:753) 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:835) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:537) 
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139) 
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83) 
    at rabbitmq.TestRabbitMq.main(TestRabbitMq.java:14) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:497) 
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140) 
Caused by: org.springframework.beans.ConversionNotSupportedException: Failed to convert property value of type 'org.springframework.amqp.core.DirectExchange' to required type 'org.springframework.amqp.core.Queue' for property 'destinationQueue'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [org.springframework.amqp.core.DirectExchange] to required type [org.springframework.amqp.core.Queue] for property 'destinationQueue': no matching editors or conversion strategy found 
    at org.springframework.beans.AbstractNestablePropertyAccessor.convertIfNecessary(AbstractNestablePropertyAccessor.java:591) 
    at org.springframework.beans.AbstractNestablePropertyAccessor.convertForProperty(AbstractNestablePropertyAccessor.java:603) 
    at org.springframework.beans.BeanWrapperImpl.convertForProperty(BeanWrapperImpl.java:204) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.convertForProperty(AbstractAutowireCapableBeanFactory.java:1527) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1486) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1226) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543) 
    ... 16 more 
Caused by: java.lang.IllegalStateException: Cannot convert value of type [org.springframework.amqp.core.DirectExchange] to required type [org.springframework.amqp.core.Queue] for property 'destinationQueue': no matching editors or conversion strategy found 
    at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:302) 
    at org.springframework.beans.AbstractNestablePropertyAccessor.convertIfNecessary(AbstractNestablePropertyAccessor.java:576) 
    ... 22 more 

答えて

3

でなければなりません。

あなたは、一般的にそうでない場合は、最後のBean定義が勝っ要素に一意のIDを与える必要があり...

<rabbit:queue id="queue" name="test_queue"/> 

<rabbit:connection-factory id="rabbitConnectionFactory" (...)/> 

<rabbit:direct-exchange id="exchange" name="test_queue"> 
    <rabbit:bindings> 
     <rabbit:binding queue="queue"/> 
    </rabbit:bindings> 
</rabbit:direct-exchange> 
+0

それは非常に興味深いですが、ありがとうございました。私はそれについて何かを推測しました。しかし、交換やキューの名前が外部で定義されていて、変更できない場合はどうすればいいですか? – Andremoniy

+0

現在の設定では、キューBeanはありません__ - 交換用Beanはそれを置き換えました。 –

1

bingingsexchangeの設定で問題が発生しました。だから、このブロック:

<rabbit:bindings> 
    <rabbit:binding queue="test_queue"/> 
</rabbit:bindings> 

は不要ですが、それはちょうどそれが本当に_queueとの交流に名前を付けることをお勧めしません

<rabbit:direct-exchange name="test_queue"/> 
関連する問題