Java EE 容器中的同步请求-应答模式

2024-03-10

我希望在 Java EE 容器内使用 JMS 实现同步请求-答复模式。顺序会是这样的

  1. 浏览器向 Web 应用程序发出数据请求。这是一个阻塞请求(比如在线程 T1 上)。
  2. Web 应用程序需要连接到远程 Web 服务才能满足上述请求。因此,它形成一个请求并将其放入队列中(还声明了回复队列)。
  3. 远程服务处理请求并将响应放入步骤 2 中声明的回复队列
  4. 该响应是从 Web 应用程序中的回复 Q 中读取的,并可供步骤 1 的阻塞线程 T1 使用。

我遵循了 T.Rob 提供的答案(如何将 MQ Server 回复消息与正确的请求相匹配 https://stackoverflow.com/questions/5021283/how-to-match-mq-server-reply-messages-to-the-correct-request)

QueueReceiver queueReceiver = 
  session.createReceiver(destination, "JMSCorrelationID='customMessageId'");
TextMessage receivedMessage = (TextMessage)queueReceiver.receive( 15000 );

当在可能有多个并发请求传入的 Java EE 容器(Web 模块)中运行时,上述解决方案是否有效?


这取决于对“有效”的看法:它可能会编译并工作。但从设计的角度来看,可以说你确实可以改进它。


如果你的线程是blocking, any 异步沟通不会增加任何价值。相反,它会使速度变慢,会消耗资源,甚至可能会造成麻烦(请参阅下面的链接)。

无论处理消息的系统(可能是 MDB)公开什么服务,都将其提取到单独的服务类中,并以无状态会话 bean 的形式提供另一个前端。因此,您的服务通过同步和异步接口公开,客户端可以选择。

在您的场景中,您的 servlet 仅同步调用 EJB。

至于否则可能出现的问题:看看事务环境中的 JMS 请求/响应模式 https://stackoverflow.com/q/18464499/2390083(此方法使用临时队列)。

使用单个队列(您在问题中引用的方式),您需要一个选择器(条件)来获取相关消息:这might速度很慢,具体取决于队列中的数量。


另一方面,如果你实施你的具有异步支持的 servlet以及(使用@WebServlet(asyncSupported = true)),这是不同的东西。在这种情况下,我会说这是一种有效的方法。

在这种情况下,您可以节省资源(即线程;但 HTTP 连接保持打开状态),因为一个后台线程监听队列可以为多个客户端提供服务。如果您遇到性能或资源问题,请考虑这一点。在此之前我建议使用同步方式,因为它更容易实现。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java EE 容器中的同步请求-应答模式 的相关文章

  • 如何在 Spring Xml 中指定自定义 JMS 消息监听器

    我是 JMS 新手 需要批量请求以便侦听器处理 关联 http sleeplessinslc blogspot in 2010 04 batchmessagelistenercontainer using html http sleeple
  • 如何设置队列生产者超时?

    我正在测试WebLogic 10 3 1 JMS 但有一个问题 我的测试步骤 启动WebLogic服务器 启动 JMS 客户端 客户端将对象发送到 WebLogic JMS 服务器接收该对象 停止 WebLogic 服务器 将另一个对象发送
  • Kafka速度之谜:高性能的幕后秘密大揭秘

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 kafka高性能的原因 Page Cache ZeroCopy 零拷贝 前言 Kafka的介绍 kafka是linkedIn开源的分布式消息系统 归给Ap
  • JMS 客户端工具 - Java 8 的 HermesJMS 的替代品吗?

    HermesJMS 有哪些替代方案 我需要针对 JBoss WildFly 8 进行测试 它使用 Java 8 HermesJms 似乎是为 Java 6 构建的 但我找不到完整的 Java 8 端口 我尝试设置 hermes bat这个配
  • JMS事务

    数据库事务是一个熟悉的概念 try updateDB commit catch error rollback 如果发生任何错误 updateDB 所做的任何更改都将被丢弃 我想知道消息队列事务回滚将撤消什么 try EDIT swapped
  • ActiveMQ:如何使旧消息出队?

    我正在学习如何使用ActiveMQ 现在我们面临以下问题 假设我在 ActiveMQ 上有一个名为 topic test 的主题 它有两个订阅者 在特定时刻 我只有一个订阅者在等待消息 而生产者则为我上面提到的主题发送一条消息 好的 连接的
  • 将 BytesMessage 转换为字符串?

    最好的转换方式是什么ByteMessage to String 我有以下代码 我们有更干净的方法吗 BytesMessage byteMessage set byteMessage byte byteArr new byte int byt
  • 从 PL/SQL 调用/使用 JMS

    是否可以从 PL SQL 调用 使用 JAVA 消息服务 JMS 我知道我们可以从 pl SQL 调用 java 但是调用 java 与调用 JMS 队列或 JMS 主题不同 因为 JMS 依赖于 JNDI 资源命名 当我们使用基于 JND
  • 哪种嵌入式消息传递系统 -> ActiveMQ 或 HornetQ [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我希望得到一些关于这两个消息系统中哪一个的一般性指示和意见 更容易管理 需要了解和避免的陷阱或神奇的东西
  • 在 eclipse 中运行 jms 示例时,资源注入不起作用。

    我想在 eclipse 中运行 jms 教程文件 我已正确配置 glassfish 并添加了 jms 资源 如果我在 netbeans 中运行它 它工作正常 我在 eclipse 中创建了一个 应用程序客户端项目 这是资源注入的地方 Res
  • JavaEE真的可移植吗?

    我正在实施面试时分配给我的 JavaEE 作业 我以前对 EJB 有一些经验 但与 JMS 和 MDB 没有任何关系 以下是我通过大量示例发现的内容 应用程序服务器将其主题和队列绑定到不同的 JNDI 名称 例如topic queue jm
  • JMS/消息队列的实际使用? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我刚刚阅读了一些有关 JMS 和 Apache ActiveMQ 的内容 想知道这里的人们使用 JMS 或类似的消息队列技术在现实世界
  • setEndTime 必须在 setStartTime 之后调用

    尝试使用 JMeter JMS Publisher 推送消息 但低于错误 这是jmeter端错误还是服务器端错误 Error setEndTime must be called after setStartTime java lang Th
  • HornetQ JMSException:无法创建会话工厂

    我正在尝试直接实例化 JMS 资源 而不使用远程 HORNETQ 的 JNDI 我正在 Eclipse IDE 中运行我的测试代码 设置我的类路径以使用 HornetQ 2 2 5 库 目标HornetQ是版本2 1 2 Final 我认为
  • HornetQ 重启后不会保留消息

    我使用 HornetQ 作为队列提供程序 因为它具有持久性功能 但是 在我重新启动应用程序后 队列中的所有消息都会丢失 也许是配置问题 这是代码 Step 1 Create the Configuration and set the pro
  • 将 EJB Jar 部署到 Glassfish 时出现异常

    这是我第一次尝试使用 JMS 我已经成功创建 部署了一个 war 文件 其中包含一个可用于上传文件的 servlet 上传文件时 它会向 JMS 队列发送一条消息 接下来 我编写了一个侦听器来从队列中检索上传的消息 但是当我尝试部署它时 出
  • 为什么 com.ibm.jms.JMSTextMessage 类型的变量会打印截断的内容和省略号 (...)?

    我想了解为什么 com ibm jms JMSTextMessage 类型的变量在转换为字符串时会打印出截断的内容和省略号 我在 JMeter 的 JSR223 Sampler 中有以下代码 import com ibm msg clien
  • Spring Web 连接到嵌入 Jboss 服务器 7.1.1 的 HornetQ JMS

    我正在尝试设置 spring web 以通过以下方式连接到远程 Jboss 7 1 1 HornetQ JMSthis http java dzone com articles connecting spring地点 但我收到以下错误 是否
  • 集群应用程序服务器中的 JMS 主题订阅者如何接收消息?

    假设我创建了一个带有一个订阅者 PropertiesSubscriber 的 JMS 主题 PropertiesTopic PropertiesSubscriber 运行在负载平衡的应用程序服务器集群中 如下图所示 替代文本 http ww
  • HornetQ OutOfMemory 启动时带有大日志

    使用 HornetQ 2 0 0 CR2 独立 非集群服务器的默认配置 当我尝试使用大日志 gt 1Gb 启动服务器时 出现 OutOfMemory 异常 main 12 59 43 505 INFO org hornetq integra

随机推荐

  • Python 大列表排序与存储

    我目前正在处理一些非常大的信息列表 50 到 1 亿个条目 其中列表中的每个项目都采用 float string 1 string 2 的形式 我以未排序的方式将元素添加到列表中 并且最终希望有一个按浮点值排序的列表 例如 我会有一个如下所
  • Azure DevOps 构建子模块

    我有一个连接到 Azure DevOps 构建管道的私有 bitbucket 存储库 私有存储库有一个连接到公共 Github 存储库的子模块 这两个存储库均通过 SSH 访问 我在 DevOps 中勾选了克隆子模块框 如何向 Azure
  • Jquery - 确保事件处理程序在处理程序链中最后执行

    有没有办法确保您附加的事件处理程序是要执行的事件处理程序链中的最后一个 我有一个通过 ajax 提交表单的事件处理程序 但稍后 在附加我的 ajax 提交处理程序后 另一个处理程序将附加到表单以执行验证逻辑 验证逻辑应该发生在 ajax 提
  • 从异步方法返回 IAsyncEnumerable

    采取以下方法 public async IAsyncEnumerable
  • '[' 标记之前应有非限定 ID

    我知道这个错误通常是语法错误 但我似乎找不到这段代码有什么问题 谁能帮我指出来吗 以下是我收到的错误 deli cc 10 7 错误 标记之前预期有不合格的 id int myCashierNums deli cc 11 7 错误 标记之前
  • Django admin list_display 使用外键时异常缓慢

    姜戈 1 2 5 蟒蛇 2 5 5 我的运动模型管理列表速度非常慢 400 条记录需要 5 分钟 它在一秒钟左右就恢复了 直到我们得到 400 场比赛 50 支球队和 2 项运动 我已经以一种糟糕的方式修复了它 所以我想看看是否有人以前见过
  • 如何在不使用 .Compile() 的情况下从 MemberExpression 获取属性值?

    我在尝试不使用 Compile 从表达式树中获取对象的值时遇到问题 该对象非常简单 var userModel new UserModel Email email protected cdn cgi l email protection 给
  • 从 .net dll 返回结构体 (C#)

    我有一个 net DLL C 它通过 TCP 从传感器接收实时 大量 数据 数据以自定义对象数组的形式出现 称之为 SensorPacket 它有大约 20 个字段 主要是浮点型和整数型 我已经通过事件将其发送到 matlab 工作正常 但
  • Whatsapp 或 telegram 等应用程序如何监听 Android 上的来电/消息事件?

    我构建了一个 VoIP 呼叫应用程序 它与服务器保持持久连接以监听任何来电 我实现了一个后台服务来做到这一点 但自从 Oreo 以来 由于引入了后台执行限制 https developer android com about version
  • Android 13 - 如何请求 WRITE_EXTERNAL_STORAGE

    我的 Android 应用程序的目标版本是 Android 13 API 33 WRITE EXTERNAL STORAGE 权限似乎在 API 33 即 Android 12 及以下版本 下运行良好 但在 Android 13 上运行应用
  • CSS - 粘性页脚[重复]

    这个问题在这里已经有答案了 这个问题似乎有很多已解决的问题 但它们似乎都不适合我 我创建了这个小 jsfiddle 来向您展示 jsfiddle 页脚 http jsfiddle net 2jn3J 还有CSS footer width 7
  • Link R闪亮select输入项打开文件actionButton

    使用 R闪亮 是否可以将 selectInput 项目链接到打开文件操作按钮 我想调整操作按钮的 onclick 参数来实现它 请在下面找到一个可重现的示例 假设 www 文件夹中有 file 1 pdf 和 file 2 pdf 如何打开
  • 忽略这些 kotlin 的 proguard 注释是否安全?

    我不明白为什么我会从混淆器那里得到这些注释 也不明白我是否必须采取任何措施来解决它们 Note kotlin internal PlatformImplementationsKt can t find dynamically referen
  • Reactjs如何在map函数中使用ref?

    我正在通过数组进行映射 并为每个项目显示一个带有文本的按钮 假设我希望单击按钮时 下面的文本会将其颜色更改为红色 如何定位按钮的同级按钮 我尝试使用 ref 但由于它是映射的 jsx 因此只会声明最后一个 ref 元素 这是我的代码 cla
  • 在 Apple Appstore 中发布我的应用程序之前,我能否获得该应用程序的链接? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 在将应用程序发布到应用商店之前 我能否获得应用程序的链接 直接从设备打开它 我想在我的应用程序中单击 评价此应用程序 按钮 在 Googl
  • 缓存条目未使用

    我们有一个使用以下技术的 Web 应用程序 JSF 2 0 EJB 3 1 JPA 2 0 JBoss AS 7 1 Final 有时我们会突然出现以下异常 09 46 29 664 ERROR org jboss ejb3 invocat
  • 如何让 GestureDetector 在触摸 Flutter 中的空白区域时也起作用

    我有2个Text里面的小部件GestureDetector The onTap回调仅在我触摸时通知Text但不是我里面的空白空间Container 如何让这个通知就像我触摸按钮一样 Very very very long long ng l
  • Facebook graphApi oAuth - 如何获取访问令牌?

    我正在尝试使用 JavaScript Facebook SDK 获取某个用户的留言墙 当我使用图形 API Explorer 时 它工作正常 但是当我在我的网站上尝试同样的操作时 出现以下错误 code 104 message An acc
  • 实例化列表时 是什么类型?

    我在多个不同的地方看到人们实例化列表或 ArrayList 例如 List
  • Java EE 容器中的同步请求-应答模式

    我希望在 Java EE 容器内使用 JMS 实现同步请求 答复模式 顺序会是这样的 浏览器向 Web 应用程序发出数据请求 这是一个阻塞请求 比如在线程 T1 上 Web 应用程序需要连接到远程 Web 服务才能满足上述请求 因此 它形成