【发布时间】:2011-11-22 05:49:08
【问题描述】:
如何在 Red Hat MRG/Apache QPID 中强制仅浏览队列,以便客户端只能浏览队列。即使某些客户端尝试从队列中消费消息,他也不应该这样做。
【问题讨论】:
-
您能详细说明您的用例吗?为什么你想要一个队列,客户端浏览但从不消费?谁消费消息?数据库会更适合您的工作流程吗?
如何在 Red Hat MRG/Apache QPID 中强制仅浏览队列,以便客户端只能浏览队列。即使某些客户端尝试从队列中消费消息,他也不应该这样做。
【问题讨论】:
我认为没有配置代理的选项,但您的客户端可以在仅浏览模式下连接到队列。
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);
}
}
}
【讨论】:
N 客户端使用相同的消息,请考虑使用绑定到N 队列的一个交换。然后让每个客户端只从自己的队列中消费消息。要将每个客户端的访问限制为不允许的队列,有 access control lists