我创建了多播地址FROM。文本和任播队列来自。此地址中的文本。将此队列配置为具有最大使用者="10"。
<address name="FROM.TEXT">
<multicast>
<queue name="FROM.TEXT" max-consumers="10">
<durable>true</durable>
</queue>
</multicast>
</address>
我创建了 2 个 Camel 路由,这些路由将使用来自此队列的消息并路由到 2 个不同的队列:
public void configure() throws Exception {
InitialContext context = new InitialContext();
from("jms:FROM.TEXT")
.routeId("route1")
.autoStartup(true)
.convertBodyTo(String.class, "UTF-8")
.to("jms:QUEUE1");
getContext().start();
}
当我启动route1 时,它的工作是为队列创建一个消费者,但是当我启动 route2 时,什么也没发生。我需要这样做,因为相同的消息必须路由到 2 个不同的队列。
谢谢。
如果您希望连接到目标的任何客户端获得相同的消息,那么您应该使用 JMS 主题。只需定义一个支持多播的地址:
<address name="FROM.TEXT">
<multicast/>
</address>
那么你的路线将是这样的:
public void configure() throws Exception {
InitialContext context = new InitialContext();
from("jms:topic:FROM.TEXT")
.routeId("route1")
.autoStartup(true)
.convertBodyTo(String.class, "UTF-8")
.to("jms:queue:QUEUE1");
getContext().start();
}
您可以像这样定义to
队列:
<address name="QUEUE1">
<anycast>
<queue name="QUEUE1">
</anycast>
</address>