gpt4 book ai didi

java - 使用 RabbitMQ 和 SpringAMQP 仅使用具有特定 header 的消息

转载 作者:行者123 更新时间:2023-11-30 09:03:53 28 4
gpt4 key购买 nike

我正在尝试将消息发布到队列,然后让某些消费者仅在它包含特定 header 时才使用它,而另一个消费者在它包含另一个 header 时才使用它。

到目前为止我所做的是设置一个 header 交换,仅当它包含该 header 时才将消息路由到特定队列。

enter image description here

这是我用来设置交换器、队列和监听器的配置:

<!-- Register Queue Listener Beans -->
<bean id="ActionMessageListener" class="com.mycee.Action" />

<!-- Register RabbitMQ Connections -->
<rabbit:connection-factory
id="connectionFactory"
port="${rabbit.port}"
virtual-host="${rabbit.virtual}"
host="${rabbit.host}"
username="${rabbit.username}"
password="${rabbit.password}"
connection-factory="nativeConnectionFactory" />

<!-- Register RabbitMQ Listeners -->
<rabbit:listener-container
connection-factory="connectionFactory"
channel-transacted="true"
requeue-rejected="true"
concurrency="${rabbit.consumers}">
<rabbit:listener queues="${queue.myqueue}" ref="ActionMessageListener" method="handle"/>
</rabbit:listener-container>

<!-- Setup RabbitMQ headers exchange -->
<rabbit:headers-exchange id="${exchange.myexchange}" name="${exchange.myexchange}">
<rabbit:bindings>
<rabbit:binding queue="${queue.myqueue}" key="action" value="action3" />
</rabbit:bindings>
</rabbit:headers-exchange>

<rabbit:admin connection-factory="connectionFactory"/>
<rabbit:queue name="${queue.myqueue}" />

所以我使用 action3 的键和 action3 的值将 myqueue 绑定(bind)到 myexchange。

现在当我在交易所发布时:

enter image description here

ChannelAwareMessageListener 正在使用它,即使操作设置为 action1 而不是 action3

public class Action implements ChannelAwareMessageListener {

@Override
public void onMessage(Message message, Channel channel) throws Exception {

System.out.println(message.toString());

}

}

要么我没有正确使用 header 交换,要么我没有正确配置它 - 有什么建议吗?

最佳答案

不是这样的;每个消费者都需要一个单独的队列。参见 the tutorial .

当多个消费者从同一个队列中消费时,他们会竞争所有消息;您不能在消费者端选择消息; “选择”是由交换通过将消息路由到特定队列来完成的。

关于java - 使用 RabbitMQ 和 SpringAMQP 仅使用具有特定 header 的消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25489301/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com