pub struct Queue(/* private fields */);
Expand description
Shared Queues in proxy-wasm are a FIFO MPMC queue with no message duplication. Any WASM VM can resolve a queue or register new ones in their own VM ID. Any WASM VM can dequeue data, which will globally dequeue that item. Messages are not replicated to each WASM VM. When broadcasting data to many WASM VMs, it’s advised to have a scheme where each thread can register it’s own inbound queue, then enqueue the name of said queue to the centralized source of data. That source then enqueues to each WASM VM’s queue individually.
Implementations§
Source§impl Queue
impl Queue
Sourcepub fn register(name: impl AsRef<str>) -> Result<Self, Status>
pub fn register(name: impl AsRef<str>) -> Result<Self, Status>
Registers a new queue under a given name. Names are globally unique underneath a single VM ID. Re-registering the same name from any WASM VM in the same VM ID will overwrite the previous registration of that name, and is not advised.
Sourcepub fn resolve(
vm_id: impl AsRef<str>,
name: impl AsRef<str>,
) -> Result<Option<Self>, Status>
pub fn resolve( vm_id: impl AsRef<str>, name: impl AsRef<str>, ) -> Result<Option<Self>, Status>
Resolves an existing queue for a given name in the given VM ID.
Sourcepub fn dequeue(&self) -> Result<Option<Vec<u8>>, Status>
pub fn dequeue(&self) -> Result<Option<Vec<u8>>, Status>
Remove an item from this queue, if any is present. Returns Ok(None)
when no data is enqueued.
Note that this is not VM-local and any message can only be received by one dequeue operation anywhere.
Sourcepub fn enqueue(&self, value: impl AsRef<[u8]>) -> Result<(), Status>
pub fn enqueue(&self, value: impl AsRef<[u8]>) -> Result<(), Status>
Enqueues a new item into this queue.
Sourcepub fn on_enqueue<R: RootContext>(
self,
callback: impl FnMut(&mut R, Queue) + 'static,
) -> Self
pub fn on_enqueue<R: RootContext>( self, callback: impl FnMut(&mut R, Queue) + 'static, ) -> Self
Registers a callback that is called whenever data is available in the queue to be dequeued.
Only one of on_enqueue
or on_receive
can be set at the same time.
Sourcepub fn on_receive<R: RootContext>(
self,
callback: impl FnMut(&mut R, Queue, Vec<u8>) + 'static,
) -> Self
pub fn on_receive<R: RootContext>( self, callback: impl FnMut(&mut R, Queue, Vec<u8>) + 'static, ) -> Self
Registers a callback that is called whenever data is available in the queue to be dequeued.
Also dequeues anything on the queue. It may call the callback multiple times for each item, if multiple are present.
Only one of on_enqueue
or on_receive
can be set at the same time.