【问题标题】:Create a browse only queue in Redhat MRG/Apache QPID在 Redhat MRG/Apache QPID 中创建仅浏览队列
【发布时间】:2011-11-22 05:49:08
【问题描述】:

如何在 Red Hat MRG/Apache QPID 中强制仅浏览队列,以便客户端只能浏览队列。即使某些客户端尝试从队列中消费消息,他也不应该这样做。

【问题讨论】:

  • 您能详细说明您的用例吗?为什么你想要一个队列,客户端浏览但从不消费?谁消费消息?数据库会更适合您的工作流程吗?

标签: java jms messaging qpid


【解决方案1】:

我认为没有配置代理的选项,但您的客户端可以在仅浏览模式下连接到队列。

direct://amq.direct//myqueue?browse=true

--编辑--

另一种让客户端使用browse_only队列的方法。

package foo.bar;

import java.util.Hashtable;
import java.util.Map;

import org.apache.qpid.client.AMQDestination;
import org.apache.qpid.jndi.PropertiesFileInitialContextFactory;
import org.apache.qpid.jndi.ReadOnlyContext;

public class CustomPropertiesFileInitialContextFactory extends PropertiesFileInitialContextFactory {

    @SuppressWarnings({ "rawtypes", "unchecked" })
    @Override
    protected ReadOnlyContext createContext(Map data, Hashtable environment) {
        makeDestinationsReadOnly(data);
        return super.createContext(data, environment);
    }
    protected void makeDestinationsReadOnly(Map<String, AMQDestination> dests) {
        for(AMQDestination dest : dests.values()) {
            dest.setBrowseOnly(true);
        }
    }
}

【讨论】:

  • 我想强制执行此选项。这种方式由客户自行决定是否选择仅浏览。
  • 目前没有办法在经纪人方面做你想做的事。您必须以某种方式让您的客户使用 browse_only 选项。例如,通过自定义 PropertiesFileInitialContextFactory 就像在我编辑的答案中一样。
  • 同意 mijer,除了浏览队列不适合 jms 模型。
  • @mijer 我需要一些可以在代理上强制执行的东西。这样,如果客户想要消费一些消息,他可以在没有任何人阻止他的情况下做到这一点。
  • @ManojGumber,你的用例是什么?使用当前的 MRG/qpid 实现,您无法做到这一点。至少您可以通过联系 MRG 支持来确信这一点。如果您需要N 客户端使用相同的消息,请考虑使用绑定到N 队列的一个交换。然后让每个客户端只从自己的队列中消费消息。要将每个客户端的访问限制为不允许的队列,有 access control lists
猜你喜欢
  • 2012-03-06
  • 2011-04-22
  • 2018-10-26
  • 2019-12-14
  • 2012-06-28
  • 2018-10-28
  • 2022-01-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多