使用MQTTutils通过身份验证从activemq订阅主题的Spark流

时间:2015-01-05 10:51:34

标签: authentication mqtt spark-streaming

似乎MQTTUtils只提供三种方法, def createStream(jssc:JavaStreamingContext,brokerUrl:String,topic:String,storageLevel:StorageLevel):JavaDStream [String]

创建一个输入流,接收MQTT发布者推送的消息。 def createStream(jssc:JavaStreamingContext,brokerUrl:String,topic:String):JavaDStream [String]

创建一个输入流,接收MQTT发布者推送的消息。 def createStream(ssc:StreamingContext,brokerUrl:String,topic:String,storageLevel:StorageLevel = StorageLevel.MEMORY_AND_DISK_SER_2):DStream [String]

创建一个输入流,接收MQTT发布者推送的消息。

但如果代理启用了身份验证,我该如何提供用户名和密码?

3 个答案:

答案 0 :(得分:0)

您可以尝试在网址中包含用户名和密码:

MQTT://用户名:密码@主机:端口

答案 1 :(得分:0)

请找到MQTT Scala Word Count Example

特殊情况下,您的案例将发布商视为

bin/run-example org.apache.spark.examples.streaming.MQTTPublisher mqtt://username:password@host:port foo

订阅者

bin/run-example org.apache.spark.examples.streaming.MQTTWordCount mqtt://username:password@host:port foo

在执行此操作之前,请确保您已启动ActiveMQ代理。

示例代码

import org.apache.activemq.broker.{TransportConnector, BrokerService}
.
.
.
.
def startActiveMQMQTTBroker() {
    broker = new BrokerService()
    broker.setDataDirectoryFile(Utils.createTempDir())
    connector = new TransportConnector()
    connector.setName("mqtt")
    connector.setUri(new URI("mqtt:" + brokerUri))
    broker.addConnector(connector)
    broker.start()
}

pom文件

<dependency>
  <groupId>org.apache.activemq</groupId>
  <artifactId>activemq-core</artifactId>
  <version>5.7.0</version>
</dependency>

答案 2 :(得分:0)

您可以尝试使用此处提供的自定义spark-streaming-mqtt-connector库 - https://github.com/sathipal/spark-streaming-mqtt-with-security_2.10-1.3.0

此库在原始库

之上添加以下内容
  • 添加了TLS v1.2安全性,以便始终确保通信安全。
  • 存储的主题以及RDD中的有效负载。

因此,请使用以下方法创建流

val lines = MQTTUtils.createStream(ssc, // Spark Streaming Context
            "ssl://URL",                // Broker URL
            "<topic>",                 // MQTT topic
            "MQTT client-ID",          // Unique ID of the application
            "Username", 
            "passowrd")

有重载的构造函数允许您传递RDD存储级别。希望这会有所帮助。