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 容器中的同步请求-应答模式 的相关文章

  • ActiveMQ:如何使旧消息出队?

    我正在学习如何使用ActiveMQ 现在我们面临以下问题 假设我在 ActiveMQ 上有一个名为 topic test 的主题 它有两个订阅者 在特定时刻 我只有一个订阅者在等待消息 而生产者则为我上面提到的主题发送一条消息 好的 连接的
  • Java 消息服务 (JMS) 的用途是什么?

    我目前正在评估 JMS 但不知道它可以用来做什么 目前 我相信这将是一个用例 我想创建一个 SalesInvoice PDF 并在 SalesOrder 离开仓库时打印它 因此在交付事务期间 我可以发送一个事务打印请求 该请求在 Sales
  • 将 BytesMessage 转换为字符串?

    最好的转换方式是什么ByteMessage to String 我有以下代码 我们有更干净的方法吗 BytesMessage byteMessage set byteMessage byte byteArr new byte int byt
  • 在 RabbitMQ 主题交换中路由与模式不匹配的消息

    两个队列绑定到具有以下路由键的主题交换 队列 A 与路由键模式匹配绑定 foo队列 B 与路由键模式匹配绑定 bar 我想向此交换添加第三个队列 该队列接收的消息都不是foo消息也不bar消息 如果我用一个绑定这个队列 路由密钥 我自然会得
  • ActiveMQ Artemis 前缀为“jms.topic”。到 Spring Boot 客户端上定义的所有主题名称

    我正在使用 ActiveMQ Artemis 2 18 0 和版本 2 5 5spring boot starter artemis对 Spring Boot 客户端的依赖 在我的用例中 客户需要通过主题相互通信 问题是字符串jms top
  • JMS QueueSender 线程安全吗?

    我想在多线程环境中使用 QueueSender Is QueueSender send 线程安全 No a MessageProducer QueueSender不是线程安全的 或者更具体地说 Session http java sun c
  • 如何在 AUTO_ACKNOWLEDGE JMS 会话场景中模拟消息重新传递?

    在下面的测试中 我尝试模拟以下场景 消息队列启动 启动设计为在消息处理期间失败的消费者 产生一条消息 消费者开始处理消息 在处理过程中抛出异常来模拟消息处理失败 失败的消费者被停止 另一个消费者启动的目的是接收重新传递的消息 但我的测试失败
  • 在提交事务之前传送 JMS 消息

    我有一个非常简单的场景 涉及database and a JMS在应用程序服务器 Glassfish 中 场景非常简单 1 an EJB inserts a row in the database and sends a message 2
  • JMS 监听器 - 动态选择目的地

    我在部署在单独服务器上的 ActiveMQ 上有许多目的地 队列 我想从我的程序中动态收听这些目的地 目前我正在收听这些目的地 如下所示
  • 将 EJB Jar 部署到 Glassfish 时出现异常

    这是我第一次尝试使用 JMS 我已经成功创建 部署了一个 war 文件 其中包含一个可用于上传文件的 servlet 上传文件时 它会向 JMS 队列发送一条消息 接下来 我编写了一个侦听器来从队列中检索上传的消息 但是当我尝试部署它时 出
  • JMS 有哪些替代方案? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何优雅地关闭 Spring JMS MessageListenerAdapter

    我有一个消息处理程序 它从 JMS 队列中使用并将结果发送到另一个 JMS 队列 消息处理程序位于 Spring DefaultMessageListenerContainer 中 当容器关闭时 我希望它完成处理它已经消耗的任何请求并发送结
  • JMS 会话寿命长。保持 JMS 连接/JMS 会话总是打开是一种不好的做法吗?

    保持 JMS 连接 会话 消费者始终打开是一种不好的做法吗 代码草案示例 app startup code ConnectionFactory cf ConnectionFactory jndiContext lookup CF JNDI
  • 来自远程客户端的 websphere jms 队列访问

    背景我是 php 和前端 Web 开发人员 使用 Netbeans 开发 Java 应用程序 从 websphere 我认为是 V8 5 JMS 队列中读取数据 然后向适当的脚本 服务器发出命令 这是我大约 10 年来第一次主要接触 Jav
  • 如何发出 JMS 同步请求

    我有一个 Web 应用程序 预计将从外部应用程序获取和显示数据 该外部应用程序只能通过消息传递 JMS 访问 因此 如果用户在浏览器上提交请求 则同一 HTTP 请求线程将必须与消息系统 MQ 系列 交互 以便同一请求线程可以显示从消息系统
  • JMS队列消息接收顺序

    我按顺序在同一目标中添加两条 JMS 消息 这两条消息的接收顺序是否与我添加它们的顺序相同 或者是否有可能进行相反的排序 即首先检索目的地中首先接收到的消息 我将添加到目的地 producer send Msg1 producer send
  • ActiveMQ 的 @SendTo 注释无提示地失败

    我试图使用 SendTo 注释将 JMS 消息推送到 SpringBoot 应用程序中的独立 ActiveMQ 代理 但是执行完成时没有错误 异常 但消息未排队 相反 如果我使用 JmsTemplate 在代码中注释 消息将排队 使用 Se
  • Google Pub/Sub 是否有队列或主题?

    我熟悉 JMS 对 Google Pub Sub 还很陌生 在 JMS 中有 2 个选项 Queue 只有一个消费者可以接受消息 Topic 每个消费者接受来自主题的每条消息 我相信 Google Pub Sub 应该支持这样的东西 但是快
  • 目的地为必填项

    在 Wildfly 8 1 0 服务器中部署 Ear 时出现以下错误 1 Error Caused by javax resource spi InvalidPropertyException Destination is mandator
  • 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 服务才能满足上述请求 因此 它形成