java - JMS 连接和 session 池

标签 java tcp jms connection-pooling

我目前正在开发一个产品,该产品有自己的 JMS 提供程序,其实现没有详细记录。我必须用 Java 准备一个独立的客户端应用程序,它将消息发送到 JMS 队列。我预计会有巨大的数据量,因此我正在考虑实现 JMS 连接池和 session 池。

在任何对象池中,我们都需要在将对象返回给客户端之前确定对象是否健康。 JMS 似乎没有提供“isHealthy()”方法。另外,我无法依赖 ExceptionListener,主要是因为我不确定 JMS 提供程序的实现,而且 ExceptionListener 调用是异步的。我想知道如果在调用onException之前将连接交给客户端会发生什么。

作为解决方案,我计划使用 TCP 空闲连接超时。我的理解是,只有当 TCP 空闲时间连接超时结束或 JMS 提供程序关闭时,连接才会变得不健康。

因此,我计划创建一个池化的连接包装对象,该对象将在创建连接或由客户端将连接返回到池时存储“上次使用时间”。在将连接移交给客户端之前,池会检查距“上次使用时间”的时间间隔是否小于 3 分钟(假设默认 TCP 空闲连接超时为 5 分钟)。

我的理解和实现是否正确?

最佳答案

这是我要做的:

如果失败,那么我的连接就断了。然后,GenericObjectPool 会自动调用工厂来创建一个全新的连接 (#makeObject) 以替换失效的连接。

关于java - JMS 连接和 session 池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42482192/

相关文章:

tcp - 无法使用 Live555 代理服务器流式传输 RTSP

c - 是否可以读取为 TCP 写入套接字缓冲的字节数?

java - ActiveMQ 中代理的动态名称,可在同一台计算机上运行 2 个或多个实例

java - Android Mediaplayer - 基于seekbar进度更新textview中音频播放时间

java - Spring Controller Advice异常处理程序总是返回404

java - 将基于 Spring Boot 的应用程序部署到 WebLogic 时出现 IllegalArgumentException

java - tibco ems 是否可以通过更多连接进行扩展

Java - 如何编写非常大(20,000x20,000 像素或更大)的 tif 图像

go - 使用 getvar 时如何让 Zebra 打印机返回换行符?

java - 如何判断是否安装了 Oracle Streams?