似乎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发布者推送的消息。
但如果代理启用了身份验证,我该如何提供用户名和密码?
答案 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。
此库在原始库
之上添加以下内容因此,请使用以下方法创建流
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存储级别。希望这会有所帮助。