Asterisk stasis message bus

From 탱이의 잡동사니
Revision as of 20:56, 9 April 2019 by Pchero (talk | contribs) (Created page with "== Overview == Asterisk stasis message bus 내용 정리 == Message Bus == The overall stasis-core API can be best described as a publish/subscribe message bus. Data that ne...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Overview

Asterisk stasis message bus 내용 정리

Message Bus

The overall stasis-core API can be best described as a publish/subscribe message bus.

Data that needs to be published on the message bus is encapsulated in a stasis_message, which associates the message data(which is simply an AO2 managed void *) along with a stasis_message_type. (The message also has the timeval when it was created, which is generally useful, since messages are received asynchronously).

Messages are published to a stasis_topic. To receive the messages published to a topic, use stasis_subscribe() to create a subscription.

When topics are subscribed to/unsubscribed to, stasis_subscription_change are sent to all of the topic's subscribers. On unsubscribe, the stasis_subscription_change will be the laste message received by the unsubscriber, which can be used to kick off any cleanup that might be necessary. The convenience function stasis_subscription_final_message() can be used to check if a message is the final unsubscribe message.

To forward all of the messages from one topic to another, use stasis_forward_all(). This is useful for creating aggregation topics, like ast_channel_topic_all(), which collect all of the messages published to a set of other topics.

Routing and caching

In addition to these fundamental concepts, there are a few extra objects in the Stasis Bus arsenal.

For subscriptions that deal with many different types of messages, the stasis_message_router can be used to route messages based on type. This gets rid of a lot of ugly looking if/else chains and replaces them with callback dispatch.


See also