2016-10-17 8 views
0

Мы начинаем проект, где нам нужно использовать некоторые сообщения от темы MQTT, но наше решение должно работать в кластере с несколькими узлами/экземплярами - должен быть масштабируемым.Потребитель MQTT в кластерном решении (akka, vert.x или?)

Проблема в том, что мы не уверены в том, какую технологию выбрать. Мы сталкиваемся с такой проблемой, как: должно быть только 1 потребитель на кластер, другими словами, нам нужно избегать употребления сообщения дважды (если 2 узла) ... akka, как сообщается, поддерживает одноэлементный кластер, поэтому это может работать , но я не уверен, как интегрировать akka с MQTT.

Другая возможность: vert.x. Оба akka и vert.x имеют мосты до camel или они поддерживают протокол напрямую? Я видел, что vertx. имеет интеграцию сервера MQTT, но я не совсем уверен, что это именно то, что нам нужно. Будет ли это работать, как я себе представляю, с помощью верблюда на vert.x или akka-cluster?

+0

https://github.com/akka/akka-stream-contrib/tree/master/mqtt –

ответ

1

Основываясь на том, что я знаю, вы должны иметь возможность создать однопользовательского потребителя верблюдов akka через ваш кластер akka. Вы должны сделать что-то вроде этого:

После того, как вы определили ваш Akka Camel Потребитель:

object CamelConsumer { 
    def props = Props(new CamelConsumer()) 
} 

class CamelConsumer extends Consumer { 
    def endpointUri = "mqtt://..." 

    def receive = { 
     //... 
    } 
} 

Вы можете определить свой синглтон так:

context.actorOf(ClusterSingletonManager.props(
    CamelConsumer.props, 
    PoisonPill, 
    ClusterSingletonManagerSettings(context.system)), "singletonConsumer") 
val singletonConsumer = context.actorOf(ClusterSingletonProxy.props(
    singletonManagerPath = "/user/app/singletonConsumer", 
    settings = ClusterSingletonProxySettings(system)), 
    name = "singletonConsumerProxy") 

У меня нет опыта работы с Vert.x ,

3

Это может быть стоит посмотреть на MQTT общих подписки (которые некоторые брокеры, такие как поддержка MessageSight или HiveMQ): http://www.hivemq.com/blog/mqtt-client-load-balancing-with-shared-subscriptions/

Shared подписка механизм для клиента балансировки нагрузки с MQTT, что позволяет потреблять сообщение один раз, потому что подписка распространяется среди многих клиентов. Это возможно с помощью стандартных механизмов MQTT.

1

Вы можете использовать Vert.x High Availability and Fail-Over, чтобы убедиться, что (один) экземпляр вашей Verticle развернут в кластере.

+0

На самом деле, я узнал, что верблюжий мост для vert.x используется для приема/отправки сообщений верблюду, но в факт, мне нужно мое приложение vert.x, чтобы иметь возможность потреблять из тем mqtt непосредственно на шину событий. Я не могу найти поддержку для этого где угодно. Пожалуйста, поправьте меня, если я ошибаюсь. – Slimer