perl訊息佇列

2021-09-30 06:01:12 字數 1280 閱讀 6548

還記得c語言中訊息佇列這種程序間通訊的方式嗎?perl語言中同樣提供了訊息佇列的機制,而且這兩種語言中的訊息佇列是相互相容的,我猜是因為訊息佇列是由核心來維護的吧。下面是一篇關於perl訊息佇列的文章,**:

perl幾乎可以作任何事情,只要你選對了模組。本節就是乙個例子,使用ipc::sysv和ipc::msg模組可以方便的訪問unix訊息佇列

01 #!/usr/bin/perl

02 use strict;

03 use warnings;

04 use ipc::sysv qw(ipc_private s_irwxu s_irwxg s_irwxo ipc_creat ipc_nowait);

05 use ipc::msg;

06 my ($key,$msg,$msgtype,$buf);

07 $key = ipc::sysv::ftok("/home/hyh/tor/maintain/tor",'a');

08 $msg =new ipc::msg($key,0666|ipc_creat) or die "create message queue:$!";

09 $msgtype = 1;

10 $msg->snd($msgtype,"test",ipc_nowait) or die "send message failed:$!";

11 $msg->rcv($buf,1024) or die "receive message failed:$!";

12 print $buf,"/n";

**解釋:

4.使用ipc::sysv模組,qw(ipc_private s_irwxu s_irwxg s_irwxo ipc_creat ipc_nowait)

等同於("ipc_private s_irwxu s_irwxg s_irwxo ipc_creat ipc_nowait"),

表示本程式將從該模組引入若干符號,在後續的**裡面需要要指定模組名就可以使用這些符號

5.使用ipc::msg模組(訊息佇列)

6.定義私有變數

7.用ftok通過檔名獲得乙個key值,類似c語言中的ftok函式,這個檔案必須實際存在。第4行沒有引入ftok,因此必須指定模組名。

8.獲得msg物件。類似msgget函式

9.指定訊息型別;

10.傳送訊息。類似msgsnd函式。

11.接收訊息。類似msgrcv函式。

此外,還可以獲得訊息佇列的識別符號,msg->id;刪除訊息佇列,msg->remove。更多的資訊,請參考:

訊息佇列 訊息佇列

輪詢排程 一次性分發所有訊息,保證訊息平均分配,不管消費者是否能正常消費 訊息應答 保證消費端能確實消費,不丟失 公平 乙個乙個分發所有訊息,在保證分發到的執行緒確認回覆後,才分發下個訊息給下個空閒的消費者,訊息持久化 保證佇列中的訊息不丟失,包括3要素 交換器 訊息佇列 訊息都必須宣告持久化 發布...

訊息佇列 訊息佇列 kafka

kafka是乙個分布式的基於發布 訂閱模式的訊息佇列,主要用於大資料實時處理領域。要理解kafka首先要有分布式的概念,要有訊息佇列的概念。分布式系統最大的優勢就是解耦和削峰,這種情況下,a系統生成了乙個訊息,b系統非同步獲取,那麼就需要乙個存放訊息的訊息佇列 mq 相比較傳統的訊息佇列,訊息被消費...

linux訊息佇列 Linux訊息佇列

訊息佇列,unix的通訊機制之一,可以理解為是乙個存放訊息 資料 容器。將訊息寫入訊息佇列,然後再從訊息佇列中取訊息,一般來說是先進先出的順序。可以解決兩個程序的讀寫速度不同 處理資料速度不同 系統耦合等問題,而且訊息佇列裡的訊息哪怕程序崩潰了也不會消失。最簡單的訊息記憶體的使用流程 ftok函式生...