问题标签 [openmq]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
apache-camel - 从 ServiceMix+Camel 访问 OpenMQ JMS Broker
我正在尝试让 ServiceMix+Camel 与 OpenMQ JMS Broker 交谈。我在 Blueprint DSL 中定义了一个 Camel 路由定义,它将消息发布到 ActiveMQ JMS 队列中。这工作正常,但我现在尝试将其转换为将消息发布到在 Glassfish4 容器内运行的 OpenMQ 实例。
我正在运行以下配置:JDK 1.7.0_60 ServiceMix 5.1.1(所以 Camel 2.13.2)
关于这个主题的文档有点少,但我在这里和这里从谷歌搜索中收集了各种片段,并提出了以下内容(仅相关部分):
我在 Servicemix/OSGI 中启用了以下与 JMS 相关的“功能”:
我安装并激活了以下 OSGI 包:
我遇到的问题是在将 Came Route 蓝图部署到 ServiceMix 时出现 ClassNotFoundException。以下是 Stacktrace 记录的相关片段:
因此,假设这是一个 OSGI 捆绑问题,我已经深入研究了 Camel 的“功能”,只是为了确认依赖关系:
因此,似乎是“geronimo-jms_1.1_spec”导致堆栈跟踪,因为它找不到 JMSContext。我做了一个很大的假设,因为 ApacheMQ 必须使用相同的 JMS 类,所以它必须在某个环境中。此外,JMSContext 似乎是一个 JMS 2.0 API 接口,那么这里的问题是 geronimo-jms_1.1_spec 包试图引用 JMS2 API 吗?
我还有将 OpenMQ 的客户端 JAR 安装到环境中的问题。Glassfish4 附带的 OpenMQ 客户端 JAR 是普通 JAR,而不是 OSGI 包(请参阅https://java.net/jira/browse/MQ-328),因此我计划使用“file:wrap”功能将其部署到ServiceMix,或者以其他方式解压并重新打包到包含我的 Bean 的 JAR 中。我不认为这与这个问题有关,但我可能是错的。
openmq - 环回地址不支持 OpenMq 集群
如果我在环回地址上启动代理的单个实例,我会得到以下信息:
我有一个设置(实际上是 Azure Compute Emulator),它允许多个 vms/进程使用它们自己的 127.XXX 形式的唯一 IP 地址启动,就 java.net.InetAddress 而言,这些地址实际上是环回地址。因此,尽管我成功地将这些地址用于这些 vm/进程之间的套接字到套接字通信,但我不能使用它们来运行 OpenMq 集群。
作为一种解决方法,我已将代理设置为绑定到单个非环回地址并使用不同的端口,这很有效。因此,并非不能在一个 ipaddress 上进行集群。
为什么不允许环回?如果理论上可行,是否有设置可以启用集群?
glassfish - 在分配连接时遇到错误
我的环境是 Glassfish 3.1.2 b23,在带有 JDK 1.7.0_45 的 Windows Server 2008 上以嵌入式模式捆绑了 OpenMQ(以及 FWIW,我也尝试了具有相同结果的 LOCAL 模式)。
我有一个包含一个非常简单的 JMS 组件的应用程序。JMS 组件由一个无状态会话 bean 组成,该 bean 生成发送到队列并由 MDB 使用的消息。JMS 连接池和队列是使用 Glassfish 管理 UI 创建的管理对象。
问题是,在创建和使用消息一段时间后,通常会出现以下错误:
这似乎发生在由@Asynchronous
无状态 EJB 方法启动的自动化过程翻阅项目列表并为每个项目调用最终触及此消息生成的代码路径时。当从稍微不同的代码路径调用消息生成时,一次只生成一条消息,我们看不到这个问题。
消息只需毫秒。生产和女士。消费。连接的最大等待时间为 1 分钟。也是最大值。可以同时生成消息的线程数少于与 JMS 连接工厂关联的最大连接数(大约 2 倍)。
会话是非 jms 事务和 AUTO-ACK 的生产者可以多快被背靠背调用?我会假设一旦 producer.send(..) 返回 jms 连接将被返回并可供下一个生产者使用,或者在连接被释放以用于下一次调用 .send 之前有一些非常小的延迟时间()?
消费者是一个 MDB,我假设它也使用来自生产者正在使用的同一个池的 JMS 连接(因为这是唯一的 JMS 连接池)。下面的 imqcmd 输出表明有 1 个活动使用者,但由于 MDB 是池化的,这是否意味着使用者端也可能使用 X #(MDB 实例数)的连接,或者 MDB 将只使用一个连接,而不管 # of池化 MDB 实例?
我也很好奇 MDB 中的异常处理。该模式取自 JavaEE6 示例和捕获/日志 Throwable。Throwable 中缺少对 mdc.setRollback 的调用会泄漏 JMS 连接吗?
在调试这个问题时,我一直在使用imqcmd命令。具体来说:
imqcmd查询 dst -tq -n MyQueue -u admin
生产者:ADetailBean.java
MDB:MyMessageListener.java
MyConnectionFactory 受管对象设置
在连接池高级选项卡中:
队列管理对象设置如下所示:
openmq - 由于非守护线程,嵌入式 OpenMQ HA 代理未关闭
com.sun.messaging.jmq.jmsserver.service.HAMonitorService 类包含 HATimerThread,它启动一个 java 线程,然后运行它( HATimerThread 是一个 Runnable )。
该线程不是守护线程。
运行代码如下;
该线程可以退出的唯一方法是如果repeatItr == 0。但是,一旦在构造函数中设置(由HAMonitorService 的构造函数调用,它调用它使其不为0)似乎没有任何改变。这意味着循环永远不会退出,这意味着线程永远不会停止,并且由于它不是守护线程,因此 VM 永远不会关闭。
这是一个错误还是有其他一些我没有想到的阻止它的机制?目前,运行我的嵌入式集群代理的进程永远不会因此而退出,即使它的其余部分干净地关闭......
试过这个使用 4.5.2 和 5.1。
我重建了 5.1 的源代码,将 HATimerThread 创建的线程设置为守护进程,现在一切正常。
java - 如何从 Maven 添加 jms.jar 和 imq.jar?
我正在关注有关 JMS 的教程。
Maven依赖列表:
但它失败了,但有以下例外:
如果我从 OpenMQ 分发中添加 jms.jar 和 imq.jar,则此示例可以正常工作。但是对于 Maven,它不会。我认为问题应该是由 Maven 引起的。
glassfish-3 - 如何为 OpenMQ/Glassfish 配置 STOMP 转换器
我编写了一个基本的消息转换器来将对象消息转换为文本消息。我不是 Java/OpenMQ/Glassfish 专家
Transformer 编译得很好,但现在我需要配置 STOMP Bridge 才能使用它......我在网上找不到任何关于如何做到这一点的示例。
我将 StompTransformer.class 复制到 C:\glassfish3\glassfish\domains\domain1\lib\ext 和所有必需的 jar 到:C:\glassfish3\glassfish\domains\domain1\lib\applibs (不确定这是否正确地方)
我在 config.properties 中添加了以下内容:
我尝试阅读文档: https ://docs.oracle.com/cd/E19587-01/821-0027/gjdnl/index.html >>>配置 JMS 桥
但这让我感到困惑 :( 我不知道 XML 文件中应该包含什么,应该调用什么,应该把它放在哪里以及配置还需要什么.....
这是变压器的代码:
java - 异步读取消息时检查 JMS 类型
我的 JMS 中有一个队列。在向队列发送消息时,我将 JMStype 称为“XYZ”。在消费者端,我有一个 onMessage 监听器。我想知道的是以下
- 在 onMessage 侦听器中,如何在不使消息出队的情况下检查消息的 JMStype。如果我正在运行的实例发现 JMStype 不是“XYZ”,那么它不应该做任何事情并且不应该将它从我的队列中出列。只有需要 JMStype 'XYZ' 消息的实例才应将消息出列并进一步处理它。
感谢您抽出宝贵时间阅读我的查询。
java - JMS 主题订阅者重新连接
我将 Glassfish 3.1.2.2 与 OpemMQ 4.5.2(远程模式)一起使用。在我的应用程序中,有一个 JMS 主题的订阅者,它使用MessageListener
.
当 broker 停止并在一段时间后启动时,订阅者不会收到重新启动后发布到 JMS 主题的消息。
恢复主题订阅者的最佳方法是什么?
我试过ExceptionListener
了,但显然在 Glassfish 上运行我的应用程序时不支持它。
java - OpenMQ 超时后消息丢失
如果我们使用 OpenMQ,我有一个系统。我注意到有时我们会从消费者那里收到此错误:
此外,该消息丢失并且不再在队列中。
我知道我可以通过增加imqAckTimeout来解决这个问题,但我想知道我们是否有超时问题,为什么消息会从队列中删除?
我是消息队列的新手,所以请让我知道我可以提供哪些信息来帮助解决问题?
java - JMS 消费者使用 Glassfish 和 OpenMQ 同步接收来自远程生产者的消息
我正在使用 Glassfish 和 OpenMQ 作为远程消费者实例来查找消息生产者的队列并同步处理请求。
根据 McIntosh 对Synchronous Consumer with JMS Queue的回答,可以通过调度来处理同步消息接收。我打算这样做,但我只看到了通过异步消息驱动 Bean (MDB) 连接到消息队列的示例,如下所示:
如何在不实现MessageListener
和设置为消息驱动 Bean 的情况下连接到远程生产者队列?