【问题标题】:Is JMS queue synchronized between producers and consumers?. How does it handle the queue status between producer and consumers?JMS 队列是否在生产者和消费者之间同步?它如何处理生产者和消费者之间的队列状态?
【发布时间】:2015-08-03 06:39:21
【问题描述】:

生产者和消费者之间的 JMS 队列是否同步?它如何维护生产者和消费者之间的队列状态?如果是,那是否意味着生产者被阻塞,直到消费者退出接收方法?

【问题讨论】:

  • 内部是否使用 Michael-Scott 非阻塞队列?
  • 它使用 ConcurrentLinkedQueue 吗?
  • 你一直提到“它”,但没有它。 JMS 只是一个规范,它自己不做任何事情。您无法下载“jms.jar”并运行它。有许多“它”,每个都有自己的队列实现。 wiki 有很多示例“它的”:en.wikipedia.org/wiki/Java_Message_Service
  • 谢谢。我了解 JMS 是一种规范。我的问题更多是关于 JMS 的实现细节以及队列如何管理非阻塞生产者和消费者。
  • 换句话说,您有兴趣学习消息队列背后的理论,因此您可以自己实现一个,而您只是选择 JMS 作为示例来尝试说明您在说什么?

标签: java jms p2p producer-consumer


【解决方案1】:

排队的全部意义在于确保没有人被阻塞,无论是生产者还是消费者。消费者可能会等待消息,但这不会阻止想要放置消息的生产者。我不知道是否有任何队列实现使用 Michael-Scott 算法,但只要实现满足我的消息传递要求,我就不会担心所有实际目的的实现细节。

【讨论】:

    【解决方案2】:

    队列不同步;队列的全部意义在于允许异步任务提交,因此生产者可以在任务等待处理时继续做其他事情。当消费者在任何有用的 JMS 实现中接收时,生产者不会被阻塞。

    【讨论】:

    • 谢谢。但我的问题是,当生产者和消费者同时对其进行操作时,队列如何维护状态。据我了解,只能对队列执行一项操作,其他线程必须等到该操作完成。它是否使用非阻塞算法?如果是,它是如何处理的。
    • 它是否使用 Michael-Scott 非阻塞队列?
    • JMS 只提供接口;使用的具体算法取决于您决定使用哪个第三方 JMS 实现。但是,我从未见过在消费者接收时阻止生产者的实现。
    猜你喜欢
    • 2012-01-28
    • 2013-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多