2013-05-01 4 views
1

У меня возникают проблемы с настройкой моста темы в HornetQ (related to earlier question). Идея заключается в следующем:HornetQ Тема для сообщения о мостах моста

  • Уведомление будет размещена в теме на сервере HornetQ
  • Это уведомление отправляется в теме на HornetQ сервере В течение основного моста
  • клиент приложение получает уведомление от сервер B.

Проблема, с которой я столкнулся сейчас, заключается в том, что если сервер B не работает, уведомление опускается. Я бы использовал очередь, но нам нужны другие подписчики. Я надеялся, что мост будет прочным, и сообщения будут сделать это к теме на сервере B. так, как я это настроило находится в hornetq-configuration.xml:

<queues> 
    <queue name="jms.topic.topic.dat.cds.internal"> 
     <address>jms.topic.topic.dat.cds.internal</address> 
    </queue> 
</queues> 

<bridges> 
    <bridge name="cds-bridge"> 
     <queue-name>jms.topic.topic.dat.cds.internal</queue-name> 
     <forwarding-address>jms.topic.topic.dat.cds</forwarding-address> 
     <reconnect-attempts>-1</reconnect-attempts> 
     <use-duplicate-detection>true</use-duplicate-detection> 
     <static-connectors> 
      <connector-ref>remote-connector</connector-ref> 
     </static-connectors> 
    </bridge> 
</bridges> 

Это работает только тогда, когда оба сервера вверх.

Есть ли способ сделать мост прочным абонентом? Есть что-то, что мне не хватает?

[EDIT - solution] - Это работает. Фокус в том, что имена тем должны быть одинаковыми.

<queues> 
    <queue name="jms.topic.topic.dat.cds"> 
    <address>jms.topic.topic.dat.cds</address> 
</queue> 

<bridges> 
<bridge name="cds-bridge"> 
    <queue-name>jms.topic.topic.dat.cds</queue-name> 
    <forwarding-address>jms.topic.topic.dat.cds</forwarding-address> 
    <reconnect-attempts>-1</reconnect-attempts> 
    <use-duplicate-detection>true</use-duplicate-detection> 
    <static-connectors> 
     <connector-ref>remote-connector</connector-ref> 
    </static-connectors> 
</bridge> 
</bridges> 

ответ

0

Скажем, у вас есть тема jms.topic.SomeTopic

Вы можете создать ядро-очереди, как это:

<queues> 
    <queue name="SomeTopicBridge"> 
     <address>jms.topic.SomeTopic</address> 
    </queue> 
</queues> 

Обратите внимание, что адрес на Bridge Queue совпадает с именем вашей темы.

Прочные подписки на HornetQ - это только основные очереди на тему «Адрес».

Таким образом, сообщение будет ждать активации, пока вы не перезапустите целевой сервер.

Если это не ответит на ваш вопрос, пожалуйста, предоставьте мне более подробную информацию, и я опубликую отредактировать этот ответ, чтобы лучше ответить на ваш вопрос.

На вашем случае, ваш адрес должен был так:

<queues> 
    <queue name="cds-bridge-queue"> 
     <address>jms.topic.topic.dat.cds</address> 
    </queue> 
</queues> 

С этим, вы будете создавать ядро-очередь на тему адрес, и эта очередь ядра будет получать все сообщения, отправленные на тему , даже если мост отключен.

+0

Я думаю это то, что я есть выше. Основная очередь - «jms.topic.topic.dat.cds.internal». Он переместится через мост в «jms.topic.topic.dat.cds». Если мост отключен (т. Е. Второй сервер отключен), сообщение темы теряется. Я ожидаю, что мост будет функционировать как долговечный подписчик и всегда будет удерживать сообщение темы, пока тема на другой стороне моста не будет доступна. –

+0

Как называется тема в Source? похоже, у вас неправильный адрес –

+0

«jms.topic.topic.dat.cds.internal» - это тема на стороне источника моста. «jms.topic.topic.dat.cds» - это тема на стороне потребителя. –