当前位置: 首页 > 知识库问答 >
问题:

JMS(Apache Qpid)连接处理

钱飞翼
2023-03-14

我正在使用JMS(Apache Qpid)创建与消息代理的连接。我确实创建了一些连接并将它们缓存在Map(Map

那么,如何管理连接的生命周期呢?是否有方法获取有关连接是否已连接的信息?


共有2个答案

包唯
2023-03-14

我也有同样的问题。由于JMS规范没有获取连接状态的方法,所以您可以使用替代方法来获取状态

我使用getClientID()检查异常侦听器内的连接状态。如果您查看getClientID()操作的实现,那么您可以看到它们首先检查连接状态,然后提供连接ID

protected boolean isConnectionActive() { 
        boolean connectionStatus = false; 
        try { 
            String clientID = getConnection().getClientID(); 
            connectionStatus = true; 
        } catch (Exception e) { 
            connectionStatus = false; 
        } 
        return connectionStatus; }
    

注意-此解决方案肯定可以工作到最新的库0.55,但在未来Qpid团队可以更改getClientID()的实现。

彭仲卿
2023-03-14

我认为您应该向您的异常侦听器(ExceptionListener)实现中添加一些元数据,以便将其与相关连接关联起来。您可能会使用与映射中使用的值相同的字符串

除此之外,您可能会重新考虑首先从客户机创建多个连接。一般来说,每个客户端一个连接就足够了。如果您需要在逻辑上分隔不同的任务(例如生产

最后,JMS API没有提供任何直接机制来测试连接的有效性。通常,可以安全地假设连接有效,除非通过异常侦听器同步或异步接收到异常。

 类似资料:
  • 在Weblogic中,我将JMS模块配置为“外部服务器”类型。在模块中,我设置了一个连接工厂,它有一个本地JNDI名称和一个远程JNDI名称。 我正在使用下面的Spring配置来尝试获取连接,但我在jndiName上不断遇到一个“name not found”错误,其中包含我尝试过的各种名称字符串。 有什么建议我可以试试吗?

  • 我一直有这样一个错误(异常)com.ibm.msg.client.jms.detailedJMSSecurityException:JMSWMQ2013:为连接模式为“Client”、主机名为“LocalHost(1414)”的队列管理器“QM1”提供的身份验证安全性无效。检查所连接的等待队列管理器中提供的用户名和密码是否正确。WebSphere MQ调用失败,完成代码为'2'('mqcc_fai

  • 我希望以代理无关的方式从Java SE应用程序创建JMS连接。 我用数据库连接的URL方案与JDBC进行比较。这将创建与实际实现无关的独立性。 对于JMS,我还没有找到类似的东西。我知道在Java EE中,JNDI将履行这个角色,但这是Java SE。 我不想将我的代码绑定到任何特定的队列代理,因为我的需求非常简单,即JMS 1.1文本消息的发送/接收。 我也看过Spring Boot,因为它通常

  • 我看到公司中的一个应用程序使用 JMS 进行并发调用。该应用程序是在Spring编写的Web服务。这将进行许多外部调用。当收到操作请求时,它会将许多消息发布到JMS队列,MDB处理这些消息。然后,应用程序整理所有响应,将其映射回其数据模型并返回响应。我过去曾使用JMS进行火灾和遗忘调用,但我无法弄清楚应用程序如何等待来自JMS队列的响应。请问您能解释一下是否有办法吗?

  • 我有Spring启动应用程序,它通过注释从组件类中侦听 IBM MQ 队列。MQ 属性(主机名、通道、端口等)是从 yaml 文件设置的。 MQ 依赖项在分级构建中添加,如下所示: 这可以正常工作,只要我使用Tomcat容器在本地运行应用程序即可侦听消息。但是,如果我将其打包为 EAR 并部署到 Wesbphere8.5 服务器,它将引发以下异常,并且侦听器未从队列中读取消息。我确认所有运行时依赖