2017-05-09 23 views
2

我們利用當地的ActiveMQ到同時開啓5個進程之間傳輸數據。ActiveMQ的訪問此前公佈的數據上訂閱

我有一些數據我需要發送一個過程,無論是在運行時(這工作完全正常),而且在啓動的默認值。事情是在流程啓動時發佈的,它不會被讀取,因爲它在數據發送時沒有訂閱主題。

我有多個解決方案:我可能會推遲第一個發佈了一會,這樣的過程有時間啓動(這似乎不是非常有吸引力);或者是否有辦法將所有存儲的以前未處理的消息發送給剛訂閱的某個進程?

我編碼在C#。

回答

0

我沒有和ActiveMQ任何經驗,但其他消息系統通常有這標誌着訂閱持久性,這意味着一個選項;第一次認購後;消息隊列本身會檢查某個消息是否傳遞到該系統,並以超時重試。在這種情況下,您至少需要啓動接收器1次。

如果這不是一種選擇,而且您希望事後插入接收器,則可能需要考慮設置消息,以便您檢索完整狀態,即發送total-messages而不是differential- messages

一點谷歌之後,我來到這個定義durable subscribers,我希望這有助於:

參見:

http://activemq.apache.org/how-do-durable-queues-and-topics-work.html

http://activemq.apache.org/manage-durable-subscribers.html

+0

謝謝,我會檢查這些了,回來給你 – Saryk

+0

@Saryk你有沒有發現你的答案? – Stefan

+0

當第二個啓動時,我最終發送了一條消息給主進程,並等待主進程中接收到該消息來傳輸我需要的所有內容。 – Saryk

0

,因爲你正在使用C#客戶端我不知道如果這是支持的

topic = new ActiveMQTopic("TEST.Topic?consumer.retroactive=true"); 

http://activemq.apache.org/retroactive-consumer.html

因此,另一種解決方案是通過添加到activemq.xml中,並重新啓動配置的代理端此行爲:

訂閱恢復策略允許你回去在 您訂閱的主題。

<destinationPolicy> 
    <policyMap> 
    <policyEntries> 
     <policyEntry topic=">" > 
     <subscriptionRecoveryPolicy> 
      <timedSubscriptionRecoveryPolicy recoverDuration="10000" /> 
      <fixedCountSubscriptionRecoveryPolicy maximumSize="10000" /> 
     </subscriptionRecoveryPolicy> 
     </policyEntry> 
    </policyEntries> 
    </policyMap> 
</destinationPolicy> 

http://activemq.apache.org/subscription-recovery-policy.html

0

我去解決這個問題的時候,他們正在發起返回到主之一,然後只送我需要發送的信息由每個進程發送消息。