繁体   English   中英

来自 IBM MQ 的 Spark 流数据

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM