Apache camel 集群解决方案中的MQTT使用者(akka、vert.x或?)

Apache camel 集群解决方案中的MQTT使用者(akka、vert.x或?),apache-camel,akka,cluster-computing,mqtt,vert.x,Apache Camel,Akka,Cluster Computing,Mqtt,Vert.x,我们正在启动一个项目,在该项目中,我们需要使用来自MQTT主题的一些消息,但我们的解决方案需要在具有多个节点/实例的集群中工作—需要具有可扩展性 问题是,我们不确定选择什么技术。我们面临的问题是:每个集群只需要一个消费者,换句话说,我们需要避免两次消费消息(如果两个节点)…akka据说支持集群中的单例,所以这可能会起作用,但我不确定如何将akka与MQTT集成 另一种可能性是垂直x。akka和vert.x都有到camel的桥,或者它们直接支持协议?我看到了Vertex。有MQTT服务器集成,但我

我们正在启动一个项目,在该项目中,我们需要使用来自MQTT主题的一些消息,但我们的解决方案需要在具有多个节点/实例的集群中工作—需要具有可扩展性

问题是,我们不确定选择什么技术。我们面临的问题是:每个集群只需要一个消费者,换句话说,我们需要避免两次消费消息(如果两个节点)…akka据说支持集群中的单例,所以这可能会起作用,但我不确定如何将akka与MQTT集成


另一种可能性是垂直x。akka和vert.x都有到camel的桥,或者它们直接支持协议?我看到了Vertex。有MQTT服务器集成,但我不太确定这是否正是我们需要的。将camel包装到vert.x或akka集群是否会像我想象的那样工作?

根据我所知,您应该能够在akka集群中创建一个单一的akka camel消费者。你应该这样做:

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")
定义阿克卡骆驼消费者后:

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的经验。

据我所知,您应该能够在整个akka集群中创建一个单一的akka camel消费者。你应该这样做:

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")
定义阿克卡骆驼消费者后:

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的经验。

可能值得一看MQTT共享订阅(某些代理如MessageSight或HiveMQ支持):


共享订阅是一种使用MQTT实现客户端负载平衡的机制,它允许一次性使用消息,因为订阅是在多个客户端之间共享的。这在MQTT标准机制中是可能的。

值得一看MQTT共享订阅(某些代理如MessageSight或HiveMQ支持):


共享订阅是一种使用MQTT实现客户端负载平衡的机制,它允许一次性使用消息,因为订阅是在多个客户端之间共享的。这在MQTT标准机制中是可能的。

您可以使用它来确保在集群中部署一个(单个)垂直实例。

您可以使用它来确保在集群中部署一个(单个)垂直实例。

实际上,我发现vert.x的camel桥用于接收/发送消息到camel,但事实上,我需要我的vert.x应用程序能够从mqtt主题直接消费到事件总线。我在任何地方都找不到对此的支持。如果我错了,请纠正我。事实上,我发现vert.x的camel bridge用于向camel接收/发送消息,但事实上,我需要我的vert.x应用程序能够从mqtt主题直接消费到事件总线。我在任何地方都找不到对此的支持。如果我错了,请纠正我。