`

Spark Streaming 读取RabbitMQ

阅读更多
https://github.com/zlaidandan/java/blob/master/RMQReceiver.cala
private class RMQReceiver[T: ClassTag](
  amqpHost: String,
  amqpPort: Int,
  amqpUsername: String,
  amqpPassword: String,
  amqpVhost: String,
  queueName: String,
  storageLevel: StorageLevel) extends Receiver[T](storageLevel) with Logging {

  val cf = new ConnectionFactory

  cf.setHost(amqpHost)
  cf.setPort(amqpPort)
  cf.setUsername(amqpUsername)
  cf.setPassword(amqpPassword)
  cf.setVirtualHost(amqpVhost)

  val amqpConnection = cf.newConnection();
  val amqpChannel = amqpConnection.createChannel();

  val queueingConsumer = new QueueingConsumer(amqpChannel)
  val amqpConsumerTag = amqpChannel.basicConsume(queueName, true, queueingConsumer)

  var blockPushingThread: Thread = null

  def onStart() {

    val queue = new ArrayBlockingQueue[ByteBuffer](300)

    blockPushingThread = new Thread {
      setDaemon(true)
      override def run() {
        while (true) {
          val buffer = queue.take()
          store(buffer)
        }
      }
    }
    blockPushingThread.start()

    while (true) {
      val delivery = queueingConsumer.nextDelivery(1L)
      if (delivery.getEnvelope().getRoutingKey == "realtime.request") {
        val message = delivery.getBody
        queue.put(ByteBuffer.allocate(message.length).put(message))
      }
    }
  }

  def onStop() {
    if (blockPushingThread != null) blockPushingThread.interrupt()
    if (amqpChannel != null) {
      if (amqpConsumerTag != null) {
        amqpChannel.basicCancel(amqpConsumerTag)
      }
      amqpChannel.close()
    }

    if (amqpConnection != null) {
      amqpConnection.close()
    }

  }

}
分享到:
评论

相关推荐

    spark-rabbitmq:RabbitMQ Spark流媒体接收器

    [ ]( )RabbitMQ Spark流媒体接收器RabbitMQ-Receiver是一个库,允许用户使用读取数据。要求该库需要Spark 2.0 +,Scala 2.11 +,RabbitMQ 3.5+使用图书馆有两种使用RabbitMQ-Receiver库的方法: 第一个是在pom.xml...

    spark-mqtt-sample:使用Spark Streaming的简单MQTT客户端

    **Spark Streaming MQTT客户端详解** 在当今的大数据处理领域,Apache Spark以其高效、实时的数据处理能力备受青睐。Spark Streaming是Spark框架的一个组件,专门用于处理连续的数据流,它提供了丰富的API来构建...

    sparkstreaming:封装sparkstreaming动态调节batch time(有数据就执行计算); 支持运行过程中增删topic; 封装sparkstreaming 1.6 - kafka 010 用以支持 SSL

    用来控制读取速率,由于不是用的sparkstreaming,所有速率控制的一些参数拿不到,得自己去计算。 提供spark-streaming-kafka-0-10_2.10 spark 1.6 来支持 kafka的ssl 支持rdd.updateOffset 来管理偏移量。 :party_...

    DStream输出操作

    在Apache Spark Streaming中,`DStream`(Discretized Stream)是基本的数据抽象单位,代表了一系列的RDD(弹性分布式数据集)。`DStream`允许开发者对实时数据流进行复杂的操作,如窗口化、滑动窗口、更新状态等。...

    使用java、spark和flink连接各种数据集和mq

    同时,Spark Streaming能与多种消息队列集成,如Kafka、Flume,实现实时数据流处理。 Apache Flink则是另一个强大的流处理框架,它提供了一种低延迟、高吞吐量的流处理解决方案。Flink的Java API允许开发者定义有...

    数据中台之结构化大数据存储设计.pdf

    8. **流计算**:如Flink和Spark Streaming,用于实时分析数据流,提供低延迟的业务洞察。 这些组件之间的数据流关系复杂,通常需要通过数据管道进行数据集成和转换。例如,业务数据库的数据可能会被复制到高速缓存...

    flinkTest.zip

    7. **Flink与Spark对比**:尽管Spark Streaming在实时处理领域也有广泛应用,但Flink在低延迟、状态管理和流处理原语方面具有优势,更适合实时分析场景。 在解压后的FlinkTest文件中,可能包含了Flink作业的配置...

    kafka资料全

    - **流处理**:Kafka 结合流处理框架如 Apache Flink 或 Apache Spark Streaming,可以实现实时数据流处理。 - **消息传递**:Kafka 作为消息中间件,可以用来构建消息驱动的应用程序。 ### 结论 Apache Kafka ...

    Apache Kafka 基本介绍.zip

    2. **流处理**:结合流处理框架如Spark Streaming 或Flink,对实时数据进行分析和处理。 3. **事件驱动架构**:作为事件总线,Kafka 可以连接不同的微服务,实现事件驱动的通信。 4. **数据整合**:将来自不同源头...

    kafka_2.9.1-0.8.2.2.tgz

    - **流式处理**:作为流处理平台,Kafka可以连接到Storm或Spark Streaming等系统,实现实时分析。 - **消息传递**:替代传统的消息队列系统,如RabbitMQ或ActiveMQ。 6. **优化与扩展**: - **调整配置**:如...

    电影推荐系统源代码

    如果推荐系统需要支持实时推荐,那么可能需要集成消息队列(如RabbitMQ或Kafka)和流处理框架(如Apache Flink或Spark Streaming),以处理不断变化的用户行为数据。 8. 系统架构: 一个完整的电影推荐系统不仅...

    Kafka介绍.pptx

    - **流式处理**:结合Spark Streaming、Flink等流处理框架,用于实时数据分析。 - **事件驱动架构**:支持基于事件触发的业务流程,提高系统的响应速度和灵活性。 - **数据集成与传输**:作为数据管道的一部分,用于...

    Kafka的初步认识

    - **流式处理**:作为流处理系统如Spark Streaming和Storm的数据源,支持实时分析。 在Kafka中,核心概念有: - **Topic**:消息分类,生产者和消费者围绕主题进行交互。 - **Producer**:消息生产者,将数据发布...

    系统设计资料

    - **流处理框架**:如Apache Storm、Spark Streaming,支持实时数据处理。 #### 十四、数据流采样 **定义与应用场景** 数据流采样是在大规模数据流中抽取代表性样本的过程。 **关键技术** - **概率抽样**:采用...

Global site tag (gtag.js) - Google Analytics