2011-11-22 70 views
1

如何強制隊列僅在Red Hat MRG/Apache QPID中瀏覽,以便客戶端只能瀏覽隊列。即使某些客戶端試圖將消息從隊列中消耗掉,他也不應該這樣做。在Redhat MRG/Apache QPID中創建瀏覽只隊列

+0

你能詳細說明一下你的用例嗎?爲什麼你想要一個隊列,客戶端瀏覽但從不消費?誰消費一條消息?數據庫會對你的工作流程更好嗎? – philwb

回答

2

我不認爲有這樣的選項來配置代理,但您的客戶端可以以瀏覽模式連接到隊列。

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); 
     } 
    } 
} 
+0

我想強制執行此選項。這種方式是由客戶自行決定選擇瀏覽。 – ManojGumber

+1

目前在經紀人身邊沒有辦法做你想做的事情。你必須讓你的客戶以某種方式使用browse_only選項。例如通過自定義_PropertiesFileInitialContextFactory_就像我編輯的答案。 – szhem

+0

同意mijer,除了僅瀏覽隊列不適合jms模型。 – jkysam