ActiveMQ HA при отработке отказа - PullRequest
0 голосов
/ 29 ноября 2018

Обеспечивает ли кластер ActiveMQ (ведущий-ведомый) высокую доступность в режиме отработки отказа?Я публикую сообщения по теме, но когда я уничтожаю активный узел и мой потребитель подключается к другому узлу, он теряет несколько сообщений.Мне нужен только режим темы, потому что мне нужно, чтобы разные модули принимали сообщения одновременно.Мы провели тестирование с надежными сообщениями и подписками с той же проблемой.

Если ActiveMQ не поддерживает эту функцию, есть ли другой брокер, который мог бы сделать это?

Мы использовали Springзагрузка для разработки приложений отправителя и потребителя.

SENDER:

Для отправки сообщений мы использовали API REST, который отправляет 5000 сообщений в тему.Если происходит сбой какого-либо convertAndSend (уничтожен узел ActiveMQ 1), мы повторяем его до восстановления после сбоя.

Это мой класс отправителя:

@RestController
public class RestApiController {

    @Autowired
    private JmsTemplate jmsTemplate;

    @RequestMapping(value = "/produce")
    public String produce() {
        String result = "Done";
        for (int i = 0; i < 5000; i++) {
            boolean repetir = true;
            while (repetir) {
                try {
                    jmsTemplate.convertAndSend("TestTopic", "Message " + i);
                    repetir = false;
                    result = "Done";
                } catch (JmsException e) {
                    e.printStackTrace();
                    result = "ERROR";
                }
            }
        }
        return result;
    }
}

Это приложение отправителя. Свойства: * 10101 *

spring.activemq.broker-url=failover:(tcp://172.18.13.45:61616,tcp://172.18.13.45:61626)?initialReconnectDelay=1&backup=true spring.activemq.user=admin
spring.activemq.password=admin 
spring.jms.pub-sub-domain=true 
server.port=8081

ПОТРЕБИТЕЛЬ:

Это мой класс слушателя:

@Service
public class ContactTransactionReceiver {

    @JmsListener(destination = "TestTopic")
    public void receiveMessageSendMessage(Message message) throws Exception {
        System.out.println(((TextMessage) message).getText());
    }
}

Это приложение потребителя. Свойства:

spring.activemq.broker-url=failover:(tcp://172.18.13.45:61616,tcp://172.18.13.45:61626)?initialReconnectDelay=1&backup=true
spring.activemq.user=admin
spring.activemq.password=admin
spring.jms.pub-sub-domain=true
server.port=8082

ACTIVEMQ NODE 1

Мывключили эту конфигурацию в activemq.xml для HA, который ссылается на узел 2:

    <persistenceAdapter>
        <kahaDB directory="${activemq.data}/kahadb"/>
    </persistenceAdapter>
    <networkConnectors>
        <networkConnector uri="static:(tcp://172.18.13.45:61616,tcp://172.18.13.45:61626)" />
    </networkConnectors>

Мы доказали, что слишком главный-подчиненный:

    <persistenceAdapter>
        <kahaDB directory="${activemq.data}/kahadb"/>
    </persistenceAdapter>
    <networkConnectors>
        <networkConnector uri="masterslave:(tcp://172.18.13.45:61616,tcp://172.18.13.45:61626)" />
    </networkConnectors>

ACTIVEMQ NODE 2

Мы включили эту конфигурацию в activemq.xml для HA, который ссылается на узел 2:

    <persistenceAdapter>
        <kahaDB directory="${activemq.data}/kahadb"/>
    </persistenceAdapter>
    <networkConnectors>
        <networkConnector uri="static:(tcp://172.18.13.45:61626,tcp://172.18.13.45:61616)" />
    </networkConnectors>

Мы доказали, что слишком главный-подчиненный:

    <persistenceAdapter>
        <kahaDB directory="${activemq.data}/kahadb"/>
    </persistenceAdapter>
    <networkConnectors>
        <networkConnector uri="masterslave:(tcp://172.18.13.45:61626,tcp://172.18.13.45:61616)" />
    </networkConnectors>

Вы можете найти полный код и файлы конфигурации ActiveMQ в:

https://github.com/PedroRamirezTOR/ActiveMQ-HA-Sender-Consumer.git

Заранее спасибо!

1 Ответ

0 голосов
/ 29 ноября 2018

ActiveMQ 5.x поддерживает высокую доступность через конфигурацию «ведущий-ведомый».Подробнее см. в документации .

...