Я пытаюсь написать образец производителя и потребителя с помощью 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, и все в порядке, cosumer получает его и печатает сообщение, но когда я запускаю метод SendWait, пользователь получает его, но ничего не возвращает, и производитель ждет, чтобы получить ответ: как я могу справиться с этой проблемой?