- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们正在使用 IBM 的 WebSphere MQ 的 .NET API。
创建 MQQueueManager 对象显然是一项昂贵的操作,因此我们缓存并重用这些对象的池。
目前,对于每个请求,我们访问所需的队列:
//obtain queueManager from pool
IBM.WMQ.MQQueue requestQ= queueManager.AccessQueue(requestQName, mqOptions);
IBM.WMQ.MQQueue responseQ= queueManager.AccessQueue(responseQName, mqOptions);
完成后关闭它们:
requestQ.Close();
responseQ.Close();
这是最佳实践,还是我们还应该池化和重用 MQQueue 对象(除了队列管理器之外)? AccessQueue() 似乎是客户端上的廉价操作。
最佳答案
答案取决于您的线程模型和事务性。一般来说,消息传递客户端应该始终使用事务性,即使这只是单阶段提交。原因是结果存在模糊性,否则可能会导致消息重复或丢失。我对此提供了更详细的解释 in another answer .
问题在于事务是连接范围的。当您提交时,您会对整个连接执行此操作。安全地跨多个线程使用相同的连接将阻止事务的使用,从而使应用程序面临丢失或重复消息的风险。由于队列句柄仅在特定连接的上下文中有效,因此它们继承自线程模型和连接池。
服务提供程序应用程序最常见的模型是在输入队列上维护每个线程的连接,并动态打开/放置/关闭输出队列。例如,在单个工作单元中...
在这种情况下,连接不会不断重建,输入队列也不会关闭。但是,它确实需要每个线程维护一个专用连接。
关于.net - 重用 IBM.WMQ.MQQueue 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4393753/
我正在尝试将原始 MQSTR 消息放入 WebSphere MQ 队列。根据this ,我能做到: ((com.ibm.mq.jms.MQQueue) queue).setTargetClient(J
我正在使用 mqueue在线程之间进行通信,我在传递对象时遇到了问题。 mq_send 和mq_receive 将char* 作为对象的参数。 我按以下方式使用它们。 foo* foo = new f
我正在使用 MQSeries 构建消息系统。出于某种原因,当我执行 q.get(...) 时,我收到异常抛出(我不知 Prop 体的 MQException)。以下是导致错误的代码: private
我正在开发一些 IBM MQ 队列的监视器应用程序。我正在尝试实现一种可以将所有消息从一个队列传输到另一个队列的方法。 get(msg) 方法会从队列中删除消息吗?或者它只会检索它的副本? 这是我的代
我们正在使用 IBM 的 WebSphere MQ 的 .NET API。 创建 MQQueueManager 对象显然是一项昂贵的操作,因此我们缓存并重用这些对象的池。 目前,对于每个请求,我们访问
我的目的是在我的 Java 应用程序中列出一组 MQ 队列中消息的相关 ID。 这是代码片段 public void populateCorrelationIds() throws MQExcepti
.NET 和 Java API for WebSphere MQ 中的 MQQueue 类包含三个相似的方法: PutForwardMessage PutReplyMessage PutReportM
我们在 splunk 收到以下信息消息。 [00004390] debug [java ] [messaging ] Could not find method getJMSDestination i
尝试从 IBM WebSphere MQ V6 迁移到 V7。 我们拥有的其中一条是 ((com.ibm.mq.jms.MQQueue) queue).setTargetClient(JMSC.MQJ
我正在使用 MQ v6 API 类编写一个简单的 Java 应用程序现在我可以在 while 循环中浏览远程队列。该程序作为 Windows 服务运行,必须中断该服务才能停止。首先,我设置 waitI
我是一名优秀的程序员,十分优秀!