1

amqp 端点是否有类似“浏览”选项(请参阅第2.4.3.3 节。浏览以了解详细信息)?

4

3 回答 3

1

我最终想通了,我只是认为该选项应该在骆驼组件选项级别上,即在连接字符串之后以例如“?mode =browse”的形式,但该选项实际上是在amqp连接级别上设置 - “我的队列;{模式:浏览}"。您可以设置骆驼组件选项添加“?选项=值”。

PS 在 amqp 连接级别上设置选项适用于偶数驱动(默认骆驼)路由,但它不适用于轮询驱动的路由,有关详细信息,请参阅https://issues.apache.org/jira/browse/CAMEL-6784 .

于 2013-10-09T12:49:47.663 回答
1

有一个“浏览”组件。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");
于 2013-01-26T09:33:16.943 回答
0

是的。在 AMQP 0-10 中,message.subscribe 上有一个获取模式选项,如果设置为未获取,则会导致浏览订阅。在 AMQP 1.0 中,通过在建立订阅者时为源指定“复制”的分发模式来实现相同的目的关联。

但是,假设您通过 JMS 客户端访问 AMQP,那么正如 Petter 上面所说,您应该能够使用我想象的 JMS 定义的浏览工具(我对骆驼还不够熟悉,不知道它是如何完成的)。

于 2013-01-23T10:15:39.473 回答