• 通道
    • 开始一个通道
    • 订阅
    • 发布
    • 示例
    • 普通通道
      • 事件流
      • 默认流

    通道

    Riker频道允许将消息发布给感兴趣的订阅者。 频道是 Actor,因此开始和传递频道的方式与任何其他 Actor的工作方式相同。

    开始一个通道

    Channel :: props()方法返回一个Props,可用于使用actor_of创建一个通道:

    1. let chan = sys.actor_of(Channel::props(), "my-channel").unwrap();

    其他开始的 Actor可以被赋予频道的ActorRef,以便他们可以订阅。

    订阅

    ChannelMsg :: Subscribe消息用于订阅频道:

    1. chan.tell(Subscribe("my-topic".into(), sub1), None);

    如果我们有一个actor sub1,我们可以订阅我们之前开始的chan频道。 由于要在消息中提供要订阅的actor,这意味着任何actor都可以将另一个actor订阅到一个频道。 您还会注意到订阅需要一个主题。

    频道由一个或多个主题组成,通常具有共同主题。 发布消息时,它将发布到通道上的特定主题。

    注意 : 订阅某个主题时,如果该主题尚未存在,则会创建该主题,并将发布给该主题的任何未来消息发送给该订阅者。

    发布

    ChannelMsg :: Publish消息用于发布到频道:

    1. let msg = Publish("my-topic".into(), "Building better worlds".into());
    2. chan.tell(msg, None);

    此消息将被克隆并发送到频道chan上我的主题的每个订阅者。

    示例

    我们来看一个例子:

    1. // start two instances of MyActor
    2. let props = Props::new(Box::new(MyActor::actor));
    3. let sub1 = sys.actor_of(props.clone(), "sub1").unwrap();
    4. let sub2 = sys.actor_of(props, "sub2").unwrap();
    5. // start a channel
    6. let chan = sys.actor_of(Channel::props(), "my-channel").unwrap();
    7. // subscribe actors to channel
    8. chan.tell(Subscribe("my-topic".into(), sub1), None);
    9. chan.tell(Subscribe("my-topic".into(), sub2), None);
    10. // publish a message
    11. let msg = Publish("my-topic".into(), "Remember the cant!".into());
    12. chan.tell(msg, None);

    在这里,我们开始两个将成为订阅者的角色。 启动了一个频道my-channel,我们为每个订阅者发送一个ChannelMsg :: Subscribe进行订阅。 然后我们使用chan.tell发布消息,这将导致sub1和sub2都接收消息的副本。

    普通通道

    当actor系统启动时,会创建几个通道。 这些通道可帮助开发人员接收有关系统事件和失败消息的消

    事件流

    事件流提供系统事件,包括ActorCreated,ActorRestarted和ActorTerminated事件。 每个都被分别作为主题actor.created,actor.restarted和actor.terminated主题。

    1. sys.event_stream().tell(Subscribe("actor.created".into(), sub1), None);

    默认流

    默认流是用户可以使用的通用通道。 它节省了创建专用频道的需要。

    1. sys.default_stream().tell(Subscribe("my-topic".into(), sub1), None);

    渠道构成了Riker系统不可或缺的一部分,并为创建动态应用程序提供必要的服务,其中 Actor协作以实现共同目标。

    接下来,我们将查看将来一次发送的调度消息。