![](/img/trans.png)
[英]Websphere MQ as a data source for Apache Spark Streaming
[英]Spark stream data from IBM MQ
我想从 IBM MQ 流式传输数据。 我已经尝试了我在 Github 上找到的这段代码。
我能够从队列中流式传输数据,但每次流式传输时,它都会从中获取所有数据。 我只想获取推入队列的当前数据。 我查了很多网站,但没有找到正确的解决方案。
在 Kafka 中,我们有类似KafkaStreamUtils
东西来流式传输近实时数据。 是否有类似于 IBM MQ 中的内容,以便它仅流式传输最新数据?
您提供的链接中的示例显示它调用以下方法从 IBM MQ 接收:
CustomMQReciever(String host , int port, String qm, String channel, String qn)
如果您在此处查看 CustomMQReciever ,您会发现它仅浏览队列中的消息。 这意味着该消息仍将在队列中,下次连接时您将收到相同的消息:
MQQueueBrowser browser = (MQQueueBrowser) qSession.createBrowser(queue);
如果您想从队列中删除消息,您需要调用一个方法来从队列中使用它们,而不是从队列中浏览它们。 下面是对CustomMQReciever.java
进行更改的示例,它应该可以完成您想要的操作:
在initConnection()
下,将上面的代码更改为以下内容,以使其从队列中删除消息:
MQMessageConsumer consumer = (MQMessageConsumer) qSession.createConsumer(queue);
摆脱:
enumeration= browser.getEnumeration();
在receive()
更改以下内容:
while (!isStopped() && enumeration.hasMoreElements() )
{
receivedMessage= (JMSMessage) enumeration.nextElement();
String userInput = convertStreamToString(receivedMessage);
//System.out.println("Received data :'" + userInput + "'");
store(userInput);
}
对于这样的事情:
while (!isStopped() && (receivedMessage = consumer.receiveNoWait()) != null))
{
String userInput = convertStreamToString(receivedMessage);
//System.out.println("Received data :'" + userInput + "'");
store(userInput);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.