Package org.apache.storm.spout

## Class SpoutOutputCollector

- java.lang.Object
- - org.apache.storm.spout.SpoutOutputCollector

- All Implemented Interfaces:
    `ISpoutOutputCollector`, `IErrorReporter`

      public class SpoutOutputCollector
      extends Object
      implements ISpoutOutputCollector

  This output collector exposes the API for emitting tuples from an `IRichSpout`. The main difference between this output collector and `OutputCollector` for `IRichBolt` is that spouts can tag messages with ids so that they can be acked or failed later on. This is the Spout portion of Storm's API to guarantee that each message is fully processed at least once.

- - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `SpoutOutputCollector​(ISpoutOutputCollector delegate)` |

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `List<Integer>` | `emit​(String streamId, List<Object> tuple)` | Emits a tuple to the specified output stream with a null message id.
    `List<Integer>` | `emit​(String streamId, List<Object> tuple, Object messageId)` | Emits a new tuple to the specified output stream with the given message ID.
    `List<Integer>` | `emit​(List<Object> tuple)` | Emits a tuple to the default output stream with a null message id.
    `List<Integer>` | `emit​(List<Object> tuple, Object messageId)` | Emits a new tuple to the default output stream with the given message ID.
    `void` | `emitDirect​(int taskId, String streamId, List<Object> tuple)` | Emits a tuple to the specified task on the specified output stream.
    `void` | `emitDirect​(int taskId, String streamId, List<Object> tuple, Object messageId)` | Emits a tuple to the specified task on the specified output stream.
    `void` | `emitDirect​(int taskId, List<Object> tuple)` | Emits a tuple to the specified task on the default output stream.
    `void` | `emitDirect​(int taskId, List<Object> tuple, Object messageId)` | Emits a tuple to the specified task on the default output stream.
    `void` | `flush()` |
    `long` | `getPendingCount()` |
    `void` | `reportError​(Throwable error)` |

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### SpoutOutputCollector

          public SpoutOutputCollector​(ISpoutOutputCollector delegate)

  - ### Method Detail

    - #### emit

          public List<Integer> emit​(String streamId,
                                    List<Object> tuple,
                                    Object messageId)

      Emits a new tuple to the specified output stream with the given message ID. When Storm detects that this tuple has been fully processed, or has failed to be fully processed, the spout will receive an ack or fail callback respectively with the messageId as long as the messageId was not null. If the messageId was null, Storm will not track the tuple and no callback will be received. Note that Storm's event logging functionality will only work if the messageId is serializable via Kryo or the Serializable interface. The emitted values must be immutable.
      Specified by:
        `emit` in interface `ISpoutOutputCollector`
      Returns:
        the list of task ids that this tuple was sent to

    - #### emit

          public List<Integer> emit​(List<Object> tuple,
                                    Object messageId)

      Emits a new tuple to the default output stream with the given message ID. When Storm detects that this tuple has been fully processed, or has failed to be fully processed, the spout will receive an ack or fail callback respectively with the messageId as long as the messageId was not null. If the messageId was null, Storm will not track the tuple and no callback will be received. Note that Storm's event logging functionality will only work if the messageId is serializable via Kryo or the Serializable interface. The emitted values must be immutable.
      Returns:
        the list of task ids that this tuple was sent to

    - #### emit

          public List<Integer> emit​(List<Object> tuple)

      Emits a tuple to the default output stream with a null message id. Storm will not track this message so ack and fail will never be called for this tuple. The emitted values must be immutable.

    - #### emit

          public List<Integer> emit​(String streamId,
                                    List<Object> tuple)

      Emits a tuple to the specified output stream with a null message id. Storm will not track this message so ack and fail will never be called for this tuple. The emitted values must be immutable.

    - #### emitDirect

          public void emitDirect​(int taskId,
                                 String streamId,
                                 List<Object> tuple,
                                 Object messageId)

      Emits a tuple to the specified task on the specified output stream. This output stream must have been declared as a direct stream, and the specified task must use a direct grouping on this stream to receive the message. Note that Storm's event logging functionality will only work if the messageId is serializable via Kryo or the Serializable interface. The emitted values must be immutable.
      Specified by:
        `emitDirect` in interface `ISpoutOutputCollector`

    - #### emitDirect

          public void emitDirect​(int taskId,
                                 List<Object> tuple,
                                 Object messageId)

      Emits a tuple to the specified task on the default output stream. This output stream must have been declared as a direct stream, and the specified task must use a direct grouping on this stream to receive the message. Note that Storm's event logging functionality will only work if the messageId is serializable via Kryo or the Serializable interface. The emitted values must be immutable.

    - #### emitDirect

          public void emitDirect​(int taskId,
                                 String streamId,
                                 List<Object> tuple)

      Emits a tuple to the specified task on the specified output stream. This output stream must have been declared as a direct stream, and the specified task must use a direct grouping on this stream to receive the message. The emitted values must be immutable.

      Because no message id is specified, Storm will not track this message so ack and fail will never be called for this tuple.

    - #### emitDirect

          public void emitDirect​(int taskId,
                                 List<Object> tuple)

      Emits a tuple to the specified task on the default output stream. This output stream must have been declared as a direct stream, and the specified task must use a direct grouping on this stream to receive the message. The emitted values must be immutable.

      Because no message id is specified, Storm will not track this message so ack and fail will never be called for this tuple.

    - #### flush

          public void flush()

      Specified by:
        `flush` in interface `ISpoutOutputCollector`

    - #### reportError

          public void reportError​(Throwable error)

      Specified by:
        `reportError` in interface `IErrorReporter`

    - #### getPendingCount

          public long getPendingCount()

      Specified by:
        `getPendingCount` in interface `ISpoutOutputCollector`