何かわかりません。Spring Integration を使用して、RabbitMQ からメッセージを送受信しています。
私のトポロジは非常に単純です。
1 つの JVM が Spring の RabbitTemplate を使用してメッセージを生成する
<rabbit:template id="rabbitTemplate" connection-factory="rabbitConnectionFactory" /> <bean id="amqpTemplate" parent="rabbitTemplate"> <property name="queue" value="${queue.name}" /> <property name="routingKey" value="${queue.name}" /> </bean>
RabbitMQ キューがメッセージを受信
<rabbit:queue name="${queue.name}" durable="true" />
別の JVM がメッセージを消費します (Spring-Batch ジョブを起動するためですが、それは重要ではありません)。
<int-amqp:inbound-channel-adapter queue-names="${queue.name}" channel="amqp-requests" connection-factory="rabbitConnectionFactory" />
使用される送信方法は次のとおりです。
/**
* Convert a Java object to an Amqp {@link Message} and send it to a default exchange with a default routing key.
*
* @param message a message to send
* @throws AmqpException if there is a problem
*/
void convertAndSend(Object message) throws AmqpException;
それは正常に動作しますが、ドキュメントによると、私のユースケースではroutingKeyが必須ではないと思います。誰かがルーティングキーを置いた理由がわかりません。
だから私はroutingKeyを削除しようとしました:
<bean id="amqpTemplate" parent="rabbitTemplate">
<property name="queue" value="${queue.name}" />
</bean>
その後、引き続きメッセージをキューに送信できますが、メッセージが消費されることはありません! 誰かが私に何が起こっているのか説明できますか? routingKey がないと、ある JVM から別の JVM にメッセージを送信できませんか?