[−][src]Struct riker::actor::Channel
A specialized actor for providing Publish/Subscribe capabilities to users.
It is a common actor pattern to provide pub/sub features to other actors especially in cases where choreography (instead of orchestration) is used. See: Service Choreography
A channel can be started as you would any other actor. A channel expects
ChannelMsg
messages.
To publish a message to a channel you send the channel a ChannelMsg::Publish
message containing the topic and the message to publish.
A published message is cloned and sent to each subscriber to the channel where the topic matches.
To subscribe to a channel you send the channel a ChannelMsg::Subscribe
message containing the topic to subscribe to and an ActorRef
of the
subscriber (e.g. .myself()
).
Since channels are actors themselves they provide excellent lightweight facilitators of distributing data among actors that are working together to complete a single goal or interaction (even short lived interactions).
Examples
use riker::actors::ChannelMsg::*; struct MyActor; impl Actor for MyActor { type Msg = String; fn receive(&mut self, ctx: &Context<Self::Msg>, msg: Self::Msg, sender: Option<ActorRef<Self::Msg>>) { println!("Received msg {:?}", msg); } } impl MyActor { fn actor() -> BoxActor<String> { Box::new(MyActor) } } // main let model: DefaultModel<String> = DefaultModel::new(); let sys = ActorSystem::new(&model).unwrap(); // start two instances of MyActor let props = Props::new(Box::new(MyActor::actor)); let sub1 = sys.actor_of(props.clone(), "sub1").unwrap(); let sub2 = sys.actor_of(props, "sub2").unwrap(); // start a channel let chan = sys.actor_of(Channel::props(), "my-channel").unwrap(); // subscribe actors to channel chan.tell(Subscribe("my-topic".into(), sub1), None); chan.tell(Subscribe("my-topic".into(), sub2), None); // publish a message let msg = Publish("my-topic".into(), "Remember the cant!".into()); chan.tell(msg, None);
Methods
impl<Msg: Message> Channel<Msg>
[src]
pub fn new(event_stream: Option<ActorRef<Msg>>) -> BoxActor<Msg>
[src]
pub fn props() -> BoxActorProd<Msg>
[src]
Trait Implementations
impl<Msg: Message> Actor for Channel<Msg>
[src]
type Msg = Msg
fn pre_start(&mut self, ctx: &Context<Self::Msg>)
[src]
fn other_receive(
&mut self,
_: &Context<Msg>,
msg: ActorMsg<Msg>,
sender: Option<ActorRef<Msg>>
)
[src]
&mut self,
_: &Context<Msg>,
msg: ActorMsg<Msg>,
sender: Option<ActorRef<Msg>>
)
fn system_receive(
&mut self,
_: &Context<Self::Msg>,
msg: SystemMsg<Self::Msg>,
sender: Option<ActorRef<Self::Msg>>
)
[src]
&mut self,
_: &Context<Self::Msg>,
msg: SystemMsg<Self::Msg>,
sender: Option<ActorRef<Self::Msg>>
)
fn receive(&mut self, _: &Context<Msg>, _: Msg, _: Option<ActorRef<Msg>>)
[src]
fn post_start(&mut self, ctx: &Context<Self::Msg>)
[src]
Invoked after an actor has started. Read more
fn post_stop(&mut self)
[src]
Invoked after an actor has been stopped.
fn persistence_conf(&self) -> Option<PersistenceConf>
[src]
Return a Some(PersistenceConf) to enable actor persistence. Read more
fn apply_event(
&mut self,
ctx: &Context<Self::Msg>,
evt: Self::Msg,
sender: Option<ActorRef<Self::Msg>>
)
[src]
&mut self,
ctx: &Context<Self::Msg>,
evt: Self::Msg,
sender: Option<ActorRef<Self::Msg>>
)
Invoked after an event is successfully inserted into the event store. Read more
fn replay_event(&mut self, ctx: &Context<Self::Msg>, evt: Self::Msg)
[src]
Invoked for each event when the actor is recovering. Read more
fn supervisor_strategy(&self) -> Strategy
[src]
Return a supervisor strategy that will be used when handling failed child actors.
Auto Trait Implementations
Blanket Implementations
impl<T, U> Into for T where
U: From<T>,
[src]
U: From<T>,
impl<T> From for T
[src]
impl<T, U> TryFrom for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T> Borrow for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> BorrowMut for T where
T: ?Sized,
[src]
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
[src]
impl<T, U> TryInto for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,