5

TL;博士; 我需要知道是否有一个具有持久阻塞队列的库。

我有一个经典的生产者/消费者计划。他们共享一个LinkedBlockingQueue来共享数据,而我BlockingQueue#take在 Consumers 中使用方法,因为我需要他们永远活着等待新的元素。

问题是我有很多数据而且我不能丢失它们。即使在消费者停止之后,生产者也可以坚持生成一些数据。我正在考虑H2在达到某个阈值后实现我的 BlockingQueue ta 用于存储/获取数据。我的主要问题是我需要性能,并且我需要按照元素的创建顺序来使用它们。

是否有一个持久阻塞队列的实现可以用于这样的事情?如果没有,我有什么建议可以实现这样的目标吗?

4

4 回答 4

3

你可以试试ActiveMQ。ActiveMQ 可以写入您的文件系统,因此如果生产者生成的元素比消费者可以采取的多得多,那么您要么有很多阻塞(无论队列的上限是多少)或过多的数据(如果没有上限到队列中)。

于 2013-03-07T22:29:44.083 回答
3

我会使用 ActiveMQ lib 和 Spring JMS,这是一个使用示例

启动代理

BrokerService broker = new BrokerService();
broker.addConnector("tcp://localhost:61616");
broker.start();

阅读味精

ConnectionFactory cf = new ActiveMQConnectionFactory("tcp://localhost:61616");
JmsTemplate t = new JmsTemplate(cf);
Message msg = t.receive();

发信息

ConnectionFactory cf = new ActiveMQConnectionFactory("tcp://localhost:61616");
JmsTemplate t = new JmsTemplate(cf);
t.send("test", new MessageCreator() {
  public Message createMessage(Session session) throws JMSException {
    return session.createTextMessage("test");
  }
});
于 2013-03-08T00:23:22.150 回答
1

您是否遇到过Amazon SQS,它是一个无界队列,速度非常快,它保证了顺序。您希望将数据保留多长时间?

于 2013-03-07T23:05:48.547 回答
0

您可以使用任何 JMS 实现来支持过多的传入数据。这是一个生产者消费问题,jms 就是为此而设计的。

于 2018-12-04T22:25:02.943 回答