带有条件通知者的消息队列

Posted

技术标签:

【中文标题】带有条件通知者的消息队列【英文标题】:Message queue with conditional notifyer 【发布时间】:2012-12-14 16:02:33 【问题描述】:

假设我有一个消息队列,它接收具有成员nametype 等的消息。

此队列中是否有一种类型的观察者的名称,它需要具有特定内容的消息?

if (message.name.equals(observer.wantedName) 
  observer.notify();

【问题讨论】:

【参考方案1】:

以下只是伪代码中如何解决问题的示例。 MessageQueue 有一个哈希表,其中键是消息类型和值数组,带有此消息类型的侦听器。此外,您还需要向 YourMessageQueue:observe() 添加一个描述条件的附加参数。

class YourMessageQueue extends /* or implements */ EventDispatcher 

    function addMsg(msg) 
        foreach(this.listeners[msg.type] as listener) 
            listener.notify(msg, this);
        
    



class YourObserver implements Observer 

    function createMesssageQueue() 
        msgq = new MessageQueue();
        msgq.addObserver(this, 'foo');
    



class EventDispatcher 

    protected hashtable observers;

    function addObserver(Observer observer, string eventType) 
        this.observers[eventType].push(observer);
    



interface Observer 

    function notify($data, $sender);

【讨论】:

以上是关于带有条件通知者的消息队列的主要内容,如果未能解决你的问题,请参考以下文章

MQ消息队列应用场景比较介绍

消息队列概念

使用单线程等待消息队列和套接字

如何在linux中使用POSIX API发送带有消息队列的整数?

消息队列 RabbitMq 的五种形式队列

如何根据消息头属性仅读取特定队列消息