2016-07-21 12 views
0

私は春の統合AMQPを使用してRPCを作成しようとしていますが、私はゲートウェイ内で引数を取らないメソッドを持っていますが、メッセージは私の呼び出し時に私の交換に送られません。ここでスプリング統合ゲートウェイを使用して空のペイロードメッセージを送信する方法はありますか?

@MessagingGateway 
public interface StatusGateway { 
    boolean getStatus(); 
} 

私の統合のcontext.xml

<rabbit:connection-factory id="rabbitConnectionFactory" 
    host="172.17.0.2" virtual-host="/myvhost" 
    username="myuser" password="mypasswd" /> 

<rabbit:template id="default" connection-factory="rabbitConnectionFactory" /> 
<rabbit:topic-exchange name="slr-input" auto-declare="false" /> 

<int:gateway id="statusGateway" 
    service-interface="com.example.StatusGateway" 
    default-request-channel="requestChannel" 
    default-reply-channel="replyChannel" /> 

<int:channel id="requestChannel" /> 
<int:channel id="replyChannel" /> 

<int-amqp:outbound-gateway id="statusRequestGateway" 
    amqp-template="default" 
    exchange-name="slr-input" 
    routing-key="operation.status" 
    request-channel="requestChannel" 
    reply-channel="replyChannel" 
    lazy-connect="true" /> 

そして、私はgetStatusメソッドを呼び出すときに、私は次の例外

java.lang.IllegalStateException: Failed to execute CommandLineRunner 
    at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:803) [spring-boot-1.3.6.RELEASE.jar:1.3.6.RELEASE] 
    at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:784) [spring-boot-1.3.6.RELEASE.jar:1.3.6.RELEASE] 
    at org.springframework.boot.SpringApplication.afterRefresh(SpringApplication.java:771) [spring-boot-1.3.6.RELEASE.jar:1.3.6.RELEASE] 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:307) [spring-boot-1.3.6.RELEASE.jar:1.3.6.RELEASE] 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1185) [spring-boot-1.3.6.RELEASE.jar:1.3.6.RELEASE] 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1174) [spring-boot-1.3.6.RELEASE.jar:1.3.6.RELEASE] 
    at com.example.AmqpTestClientApplication.main(AmqpTestClientApplication.java:14) [classes/:na] 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_91] 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_91] 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_91] 
    at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_91] 
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144) [idea_rt.jar:na] 
Caused by: java.lang.IllegalStateException: receive is not supported, because no pollable reply channel has been configured 
    at org.springframework.util.Assert.state(Assert.java:392) ~[spring-core-4.2.7.RELEASE.jar:4.2.7.RELEASE] 
    at org.springframework.integration.gateway.MessagingGatewaySupport.receive(MessagingGatewaySupport.java:380) ~[spring-integration-core-4.2.8.RELEASE.jar:na] 
    at org.springframework.integration.gateway.GatewayProxyFactoryBean.invokeGatewayMethod(GatewayProxyFactoryBean.java:416) ~[spring-integration-core-4.2.8.RELEASE.jar:na] 
    at org.springframework.integration.gateway.GatewayProxyFactoryBean.doInvoke(GatewayProxyFactoryBean.java:382) ~[spring-integration-core-4.2.8.RELEASE.jar:na] 
    at org.springframework.integration.gateway.GatewayProxyFactoryBean.invoke(GatewayProxyFactoryBean.java:373) ~[spring-integration-core-4.2.8.RELEASE.jar:na] 
    at org.springframework.integration.gateway.GatewayCompletableFutureProxyFactoryBean.invoke(GatewayCompletableFutureProxyFactoryBean.java:64) ~[spring-integration-core-4.2.8.RELEASE.jar:na] 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) ~[spring-aop-4.2.7.RELEASE.jar:4.2.7.RELEASE] 
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:208) ~[spring-aop-4.2.7.RELEASE.jar:4.2.7.RELEASE] 
    at com.sun.proxy.$Proxy44.getStatus(Unknown Source) ~[na:na] 
    at com.example.AmqpTestClientApplication.lambda$commandLineRunner$0(AmqpTestClientApplication.java:20) [classes/:na] 
    at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:800) [spring-boot-1.3.6.RELEASE.jar:1.3.6.RELEASE] 

を取得し、誰もが送信せずに要求を作成する方法を知っています空でないメッセージ?

答えて

0

引数のないゲートウェイメソッドは、デフォルトでは受信操作です。 Messaging Gateway: Invoking No-Argument Methodsを参照してください。

default-payload-expression="''"をゲートウェイに追加するようなもの(空の文字列)を使用できます。

+0

ありがとう、それは完璧に動作します! –

+0

こんにちはゲイリー、私はタグを作成する権限がありませんが、私は見つけていないspring-integration-amqp用のタグを作成することができます。 –

+0

スプリング統合モジュールごとにタグは必要ありません。 spring-integrationを使用してください - spring-amqpタグも追加できますが、この質問はamqp/rabbitmqとはまったく関係ありません。 –

関連する問題