我有些不明白。我正在使用 Spring Integration 从 RabbitMQ 发送和接收消息。
我的拓扑很简单:
一个 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。
所以我尝试删除routingKey:
<bean id="amqpTemplate" parent="rabbitTemplate">
<property name="queue" value="${queue.name}" />
</bean>
然后我仍然可以将消息发送到队列,但它们再也不会被消费了!有人可以解释一下发生了什么吗?我不能在没有 routingKey 的情况下从一个 JVM 向另一个 JVM 发送消息吗?