【发布时间】:2014-02-12 16:36:42
【问题描述】:
我尝试使用 SpringIntegration 和 RabbitMQ 编写示例生产者和消费者。
这里是我的 rabbit.xml 配置文件:
<rabbit:connection-factory id="connectionFactory" />
<rabbit:template id="amqpTemplate" connection-factory="connectionFactory" />
<rabbit:admin connection-factory="connectionFactory" />
<rabbit:queue name="queue.request" />
<rabbit:queue name="queue.response" />
<rabbit:direct-exchange name="exchange.main">
<rabbit:bindings>
<rabbit:binding queue="queue.request" key="binding.queue.request"/>
<rabbit:binding queue="queue.response" key="binding.queue.response" />
</rabbit:bindings>
</rabbit:direct-exchange>
和
producer.xml 文件:
<context:annotation-config />
<import resource="classpath:META-INF/zcore/integration/rabbit.xml" />
<int:channel id="request" />
<int:channel id="response" />
<int-amqp:outbound-channel-adapter channel="request" amqp-template="amqpTemplate"
exchange-name="exchange.main" routing-key="binding.queue.request"
<int-amqp:inbound-channel-adapter channel="response" queue-names="queue.response"
connection-factory="connectionFactory" />
<int:gateway id="baseGateway" service-interface="org.zcoreframework.integration.gateway.BaseGateway"
default-request-channel="request" default-reply-channel="response" />
和
consumer.xml 文件:
<import resource="classpath:META-INF/zcore/integration/rabbit.xml" />
<context:annotation-config />
<context:component-scan base-package="org.zcoreframework" />
<int:channel id="request" />
<int:channel id="response" />
<int-amqp:inbound-channel-adapter channel="request" queue-names="queue.request"
connection-factory="connectionFactory" />
<int-amqp:outbound-channel-adapter channel="response" amqp-template="amqpTemplate"
exchange-name="exchange.main" routing-key="binding.queue.response" />
<int:service-activator ref="messageConsumer" method="onMessage" input-channel="request"
output-channel="response" />
我为发送消息编写了这段代码并得到了响应:
@Autowired
BaseGateway baseGateway;
@Test
public void testHelloWorld() {
CallMethodMessage callMethodMessage = new CallMethodMessage();
callMethodMessage.setMethod("test");
callMethodMessage.setArgs(null);
System.out.print("send & receive ");
ReturnModel returnModel = this.baseGateway.SendWait(callMethodMessage);
//this.baseGateway.FireForget(callMethodMessage);
}
这是我的界面
public interface BaseGateway {
@Gateway
public void FireForget(CallMethodMessage method);
@Gateway
public ReturnModel SendWait(CallMethodMessage method);
}
好的,现在我单独运行消费者,然后对于第一个我使用 FireForget 方法运行生产者,一切正常,消费者获取它并打印一条消息,但是当我使用 SendWait 方法运行时,消费者获取它但不返回任何内容,生产者等待得到响应,我该如何处理这个问题?
【问题讨论】:
标签: rabbitmq spring-integration