0

我有一个关于生产者/消费者设计模式的问题,实际上我的情况是:我有一个类产生多种类型的消息(通知)和多个消费这些消息的消费者。

复杂之处在于我的 Producer 产生不同类型的消息,而我的消费者使用这些消息。

那么这种情况的最佳实施是什么?生产者/消费者设计模式是这种情况的最佳解决方案吗?

4

2 回答 2

0

我认为这里有两个独立的问题。一个是获取“消息”对象。这是一个生产者/消费者的问题,但如果你想要可靠性,你需要考虑各种问题,如线程、恢复等。如果你实际上在多台机器之间执行此操作,请帮自己一个忙,并使用像 JMS 这样的现有框架。

与此不同的是处理不同类型消息的问题。通常,您会拥有某种类型的消息层次结构,所有这些都子类型化为一个共同的“消息”祖先。我不确定您的消息的语义,但是类似于命令模式的内容可能很合适。

您确实需要更多地澄清您的问题,以便我们能够提供更好的建议。

于 2010-06-25T16:30:45.027 回答
0

鉴于听起来您正在同时编码生产者和消费者,我想说使用生产者/消费者模式是一个好主意。由于消息的类型很多,也许最好使用“拉”数据模型(让消费者请求消息,而不是让每个消费者都得到每条消息)。这是一个可能有帮助的大纲:

public interface BrokerProducer
{
    public void addConsumer(BrokerConsumer consumer);        
    public void removeConsumer(BrokerConsumer consumer);

    public Price getPrices();
    public Report getReport();
}

public interface BrokerConsumer
{
    public void update(BrokerProducer brokerProducer);
}

public class Broker implements BrokerProducer
{
    private Collection<BrokerConsumer> consumer = new HashSet<BrokerConsumer>();

    // Implement the interface

    // Notify all consumers- there are messages ready.
    public void notifyConsumers()
    {
        for(BrokerConsumer consumer : consumers)
            consumer.update(this);
    }       
}

public class PricesConsumer implements BrokerConsumer
{
    @Override
    public void update(BorkerProducer producer)
    {
        Prices prices = producer.getPrices();
        // Do something with the prices.
    }
}
于 2011-05-19T08:11:22.360 回答