当前位置: 首页 > 面试题库 >

消息传递(例如JMS)什么时候可以替代多线程?

锺离烈
2023-03-14
问题内容

我在一个数据处理应用程序上工作,该应用程序通过将多个工作单元放在消息队列上来实现并发性,消息驱动bean(MDB)的多个实例都在侦听该队列。除了以这种方式实现并发之外,我们没有使用消息传递基础结构和MDB的任何特定原因。

这使我思考为什么使用多个线程无法实现相同的目的。

因此,我的问题是,在什么情况下可以使用异步消息传递(例如JMS)替代多线程作为实现并发的手段?使用一种方法相对于另一种方法有哪些优点/缺点?


问题答案:

它不能用作多线程的替代方法,它是一种实现多线程的方法。这里有三种基本的解决方案:

  1. 您应对队列的两端负责;
  2. 您负责发送数据;要么
  3. 您负责接收数据。

接收数据是这里的关键,因为如果没有某种形式的多线程/多处理,实际上是无法做到这一点的,否则您一次只能处理一个请求。在不使用多线程的情况下发送数据要可行得多,但实际上您只是将处理这些消息的责任推到了外部系统上。因此,它不是多线程的替代方案。

在使用消息驱动bean的情况下,容器正在为您创建和管理线程,因此它不是多线程的替代选择,您只是在使用其他人的实现。



 类似资料:
  • 问题内容: 我阅读了今年的UberConf的幻灯片,其中一位发言者认为Spring JMS给您的消息队列系统增加了性能开销,但是在幻灯片中我看不到任何证据支持这一点。演讲者还提出了点对点比传统“发布- 订阅”方法更快的情况,因为每个消息仅发送一次,而不是广播给每个消费者。 我想知道是否有经验的Java消息传递专家可以在这里介绍一些技术问题: 使用Spring JMS而不是单纯的JMS实际上会产生性

  • 此应用程序收到 但是,当不存在web套接字会话,并且JMSProducer将消息发送到QueueSenderSessionBean中的目标“jms/notificationQueue”时,消息会立即在NotificationEndpoint中使用。这不是我的意图。 我的目的是让队列保留消息,直到用户连接到NotificationEndpoint。如果用户没有连接到NotificationEndpo

  • spring XML中的jmsTemplate定义: 有人对问题有什么建议吗/关于如何实现延迟消息传递的其他想法?谢了!

  • 我正在读一条来自Solace的信息。我能够成功地阅读信息。假设我正在阅读一条消息,在侦听器线程上读取/处理消息时,应用程序崩溃。那我怎么能在那上面再读一遍那条信息呢。使用下面的代码,我无法再次阅读该消息。下面是我的配置

  • 问题内容: 什么时候用Java thread.run()代替thread.start()? 问题答案: 你可能要在特定于功能而不是并发的特定单元测试中调用run()。

  • 我读到:http://www.javaworld.com/article/2074123/java-web-development/transaction-and-redelivery-in-jms.html?page=2 "通常,确认特定消息会确认会话接收的所有先前消息"(在客户端确认模式下) “邮件重新传递不是自动的,但在某些情况下会重新传递邮件” 我的问题是: 如何确保每次收到消息时都有一个