我有一个关于生产者/消费者设计模式的问题,实际上我的情况是:我有一个类产生多种类型的消息(通知)和多个消费这些消息的消费者。
复杂之处在于我的 Producer 产生不同类型的消息,而我的消费者使用这些消息。
那么这种情况的最佳实施是什么?生产者/消费者设计模式是这种情况的最佳解决方案吗?
我有一个关于生产者/消费者设计模式的问题,实际上我的情况是:我有一个类产生多种类型的消息(通知)和多个消费这些消息的消费者。
复杂之处在于我的 Producer 产生不同类型的消息,而我的消费者使用这些消息。
那么这种情况的最佳实施是什么?生产者/消费者设计模式是这种情况的最佳解决方案吗?
我认为这里有两个独立的问题。一个是获取“消息”对象。这是一个生产者/消费者的问题,但如果你想要可靠性,你需要考虑各种问题,如线程、恢复等。如果你实际上在多台机器之间执行此操作,请帮自己一个忙,并使用像 JMS 这样的现有框架。
与此不同的是处理不同类型消息的问题。通常,您会拥有某种类型的消息层次结构,所有这些都子类型化为一个共同的“消息”祖先。我不确定您的消息的语义,但是类似于命令模式的内容可能很合适。
您确实需要更多地澄清您的问题,以便我们能够提供更好的建议。
鉴于听起来您正在同时编码生产者和消费者,我想说使用生产者/消费者模式是一个好主意。由于消息的类型很多,也许最好使用“拉”数据模型(让消费者请求消息,而不是让每个消费者都得到每条消息)。这是一个可能有帮助的大纲:
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.
}
}