amqp 端点是否有类似“浏览”选项(请参阅第2.4.3.3 节。浏览以了解详细信息)?
3 回答
我最终想通了,我只是认为该选项应该在骆驼组件选项级别上,即在连接字符串之后以例如“?mode =browse”的形式,但该选项实际上是在amqp连接级别上设置 - “我的队列;{模式:浏览}"。您可以设置骆驼组件选项添加“?选项=值”。
PS 在 amqp 连接级别上设置选项适用于偶数驱动(默认骆驼)路由,但它不适用于轮询驱动的路由,有关详细信息,请参阅https://issues.apache.org/jira/browse/CAMEL-6784 .
有一个“浏览”组件。to("browse:dummy")
,但这只会使浏览通过此路由的消息成为可能。在某些情况下很方便,但不是真正作为 JMS 浏览选项。
您可以做的是使用 aBrowsableEndpoint
进行 JMS 浏览(也应该与 AMQP 一起使用,因为它基于 JMS 客户端,但尚未尝试过)。
您不能真正收到消息并且不删除它,因此您需要其他东西来触发您的浏览。例如计时器或触发器队列。
from("amqp:queue:trigger")
.process(new Processor(){
@Override
public void process(Exchange arg0) throws Exception {
BrowsableEndpoint browse = arg0.getContext().getEndpoint("amqp:queue:archive", BrowsableEndpoint.class);
List<Exchange> exchanges = browse.getExchanges();
System.out.println("Browsing queue: "+ browse.getEndpointUri() + " size: " + exchanges.size());
for (Exchange exchange : exchanges) {
String payload = exchange.getIn().getBody(String.class);
String msgId = exchange.getIn().getHeader("JMSMessageID", String.class);
System.out.println(msgId + "=" +payload);
}
}
});
你可以做一个预路由来实现这个触发器。
from("amqp:queue:processQueue")
.to("amqp:queue:archive")
.transform().constant("trigger msg")
.to("amqp:queue:trigger");
是的。在 AMQP 0-10 中,message.subscribe 上有一个获取模式选项,如果设置为未获取,则会导致浏览订阅。在 AMQP 1.0 中,通过在建立订阅者时为源指定“复制”的分发模式来实现相同的目的关联。
但是,假设您通过 JMS 客户端访问 AMQP,那么正如 Petter 上面所说,您应该能够使用我想象的 JMS 定义的浏览工具(我对骆驼还不够熟悉,不知道它是如何完成的)。