org.eligosource.eventsourced.core

ReliableChannel

class ReliableChannel extends Channel

A persistent channel that sends event org.eligosource.eventsourced.core.Messages to destination. Every event message sent to this channel is stored in the journal together with an acknowledgement (which is used during replay to decide if the channel should ignore a message or not).

If destination positively confirms the receipt of an event message with Message.confirm() the stored message is deleted from the journal. If destination negatively confirms the receipt of an event message with Message.confirm(false) or no confirmation is made (i.e. a timeout occurs), a re-delivery attempt is made after a certain redelivery delay (specified by policy.redeliveryDelay).

If the maximum number of re-delivery attempts have been made (specified by policy.redeliveryMax), the channel restarts itself after a certain restart delay (specified by policy.restartDelay) and starts again with re-deliveries. If the maximum number of restarts has been reached (specified by policy.restartMax) the channel stops message delivery and publishes a org.eligosource.eventsourced.core.DeliveryStopped event to the event stream of the akka.actor.ActorSystem this channel belongs to. Applications can then re-activate the channel by calling EventsourcingExtension.deliver(Int) with the channel id as argument.

A ReliableChannel stores sender references along with event messages so that they can be forwarded to destinations even after the channel has been restarted. If a stored sender reference is a remote reference, it remains valid even after recovery from a JVM crash (i.e. a crash of the JVM the channel is running in) provided the remote sender is still available.

Usually, a ReliableChannel is used in combination with an Eventsourced processor, as described in the documentation of org.eligosource.eventsourced.core.Channel. A ReliableChannel can also be used independently of an Eventsourced processor (i.e. standalone). For standalone channel usage, senders must set the Message.processorId of the sent Message to 0 (which is the default value):

channel ! Message("my event") // processorId == 0

This is equivalent to directly sending the Message.event:

channel ! "my event"

A ReliableChannel internally wraps a received event into a Message with processorId set to 0. Setting the processorId to 0 causes a reliable channel to skip writing an acknowledgement. An acknowledgement always refers to an event message received by an Eventsourced processor, so there's no need to write one in this case.

See also

org.eligosource.eventsourced.core.JournalProtocol.WriteAck

org.eligosource.eventsourced.core.JournalProtocol.WriteOutMsg

org.eligosource.eventsourced.core.RedeliveryPolicy

org.eligosource.eventsourced.core.Channel

Linear Supertypes
Channel, Actor, AnyRef, Any
Ordering
  1. Alphabetic
  2. By inheritance
Inherited
  1. ReliableChannel
  2. Channel
  3. Actor
  4. AnyRef
  5. Any
  1. Hide All
  2. Show all
Learn more about member selection
Visibility
  1. Public
  2. All

Instance Constructors

  1. new ReliableChannel(id: Int, journal: ActorRef, destination: ActorRef, policy: RedeliveryPolicy, dispatcherName: Option[String] = scala.None)

    id

    channel id. Must be a positive integer.

    journal

    journal of the org.eligosource.eventsourced.core.EventsourcingExtension at which this channel is registered.

    destination

    delivery destination of event messages added to this channel.

    policy

    redelivery policy.

    dispatcherName

    optional dispatcher name.

Type Members

  1. type Receive = PartialFunction[Any, Unit]

    Definition Classes
    Actor

Value Members

  1. final def !=(arg0: AnyRef): Boolean

    Definition Classes
    AnyRef
  2. final def !=(arg0: Any): Boolean

    Definition Classes
    Any
  3. final def ##(): Int

    Definition Classes
    AnyRef → Any
  4. final def ==(arg0: AnyRef): Boolean

    Definition Classes
    AnyRef
  5. final def ==(arg0: Any): Boolean

    Definition Classes
    Any
  6. final def asInstanceOf[T0]: T0

    Definition Classes
    Any
  7. def clone(): AnyRef

    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  8. implicit val context: ActorContext

    Definition Classes
    Actor
  9. val destination: ActorRef

    delivery destination of event messages added to this channel.

    delivery destination of event messages added to this channel.

    Definition Classes
    ReliableChannelChannel
  10. final def eq(arg0: AnyRef): Boolean

    Definition Classes
    AnyRef
  11. def equals(arg0: Any): Boolean

    Definition Classes
    AnyRef → Any
  12. def finalize(): Unit

    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( classOf[java.lang.Throwable] )
  13. final def getClass(): Class[_]

    Definition Classes
    AnyRef → Any
  14. def hashCode(): Int

    Definition Classes
    AnyRef → Any
  15. val id: Int

    channel id.

    channel id. Must be a positive integer.

    Definition Classes
    ReliableChannelChannel
  16. final def isInstanceOf[T0]: Boolean

    Definition Classes
    Any
  17. val journal: ActorRef

    journal of the org.eligosource.eventsourced.core.EventsourcingExtension at which this channel is registered.

  18. final def ne(arg0: AnyRef): Boolean

    Definition Classes
    AnyRef
  19. final def notify(): Unit

    Definition Classes
    AnyRef
  20. final def notifyAll(): Unit

    Definition Classes
    AnyRef
  21. def postRestart(reason: Throwable): Unit

    Definition Classes
    Actor
    Annotations
    @throws( classOf[java.lang.Exception] )
  22. def postStop(): Unit

    De-registers this channel from org.eligosource.eventsourced.core.EventsourcingExtension.

    Definition Classes
    Channel → Actor
  23. def preRestart(reason: Throwable, message: Option[Any]): Unit

    Definition Classes
    Actor
    Annotations
    @throws( classOf[java.lang.Exception] )
  24. def preStart(): Unit

    Definition Classes
    Actor
    Annotations
    @throws( classOf[java.lang.Exception] )
  25. def receive: PartialFunction[Any, Unit]

    Definition Classes
    ReliableChannel → Actor
  26. implicit final val self: ActorRef

    Definition Classes
    Actor
  27. final def sender: ActorRef

    Definition Classes
    Actor
  28. def supervisorStrategy: SupervisorStrategy

    Definition Classes
    Actor
  29. final def synchronized[T0](arg0: ⇒ T0): T0

    Definition Classes
    AnyRef
  30. def toString(): String

    Definition Classes
    AnyRef → Any
  31. def unhandled(message: Any): Unit

    Definition Classes
    Actor
  32. final def wait(): Unit

    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  33. final def wait(arg0: Long, arg1: Int): Unit

    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  34. final def wait(arg0: Long): Unit

    Definition Classes
    AnyRef
    Annotations
    @throws( ... )

Inherited from Channel

Inherited from Actor

Inherited from AnyRef

Inherited from Any

Ungrouped