问题标签 [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.

0 投票
2 回答
2082 浏览

jakarta-ee - 如何在块中发送多个 JMS 消息(每个都在一个新事务中)

我的 Java EE 6 Web 应用程序已达到可以在单个事务中发送的最大 JMS 消息数,我需要在多个事务中执行此操作。当事务由容器管理时,最好的方法是什么?在不同的事务中使用相同的 MessageProducer 是否可以(使用带有注释的 EJB 方法@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)

我正在使用 Glassfish v3 和 OpenMQ。

此 SO 问题中涵盖了 OpenMQ 中的最大消息 数的问题Maximum number of messages sent to a Queue in OpenMQ? .

0 投票
1 回答
651 浏览

connection - 正确从集群中注销 imq 代理

我目前正在尝试管理一个 openmq 集群(使用 glassfish 3.0.1),我遇到了一些奇怪的行为。

集群工作了七个月,注册了 2 个代理没有任何问题。

我现在需要在集群中临时添加另外两个代理。这是我以前的:

然后,我在另外两台服务器上成功启动了另外两个代理,我得到了:

应用程序在配置下运行良好,自动使用两个新代理。当我使用以下命令从集群中停止代理时会出现问题:

./imqcmd shutdown bkr

在其中一台服务器上。结果./imqcmd list bkr如下:

一切似乎都很好,接管是由 Broker1 执行的,但是当我查看 glassfishs 的 server.log 时,我发现了以下行:

[C4003]: Error occurred on connection creation [192.168.0.3:7676]. - cause: java.net.ConnectException: Connection refused|#]

就像 glassfish 尝试连接到关闭的代理一样。

有什么我错过的吗?

谢谢你的帮助。

0 投票
1 回答
586 浏览

java - 我可以使用多个发布者和一个接收者保留 OpenMQ 上的消息顺序吗?

我想使用GlassFish中的 OpenMQ 进行日志记录。我在想我的组件可以将消息放在这个队列上,如果只有一个 mdb 从中消费,我应该能够按照它们被排队的顺序接收所有消息。这会起作用吗?如何保持消息顺序?

仅供参考,演示文稿中有一张幻灯片最初让我相信JMS提供了订单,显然这是误导。

幻灯片 8 的文字记录:

什么是 JMS?• 面向消息中间件的基于Java 的API。• 它使用以下概念(除其他外) >保证消息顺序> 发送消息时确定可靠性级别 > 支持事务(一起发送或生成的消息分组) > 消息格式由producer > 提供两种消息传递方式(点对点和发布-订阅) 版权所有 Sun Microsystems Inc. 保留所有权利。[8]

http://www.slideshare.net/alexismp/openmq-aquarium-paris-presentation

下面的这些答案表明 JMS 结构不保证顺序。但我在想,如果我只有一个 MDB,即使用容器并发的单例,那么我至少可以享受入队顺序。

看:

0 投票
0 回答
156 浏览

networking - JMS 或操作系统无法识别连接断开的原因可能是什么?

我们有一个系统,服务器通过 JMS 进行通信。有时某些服务器在失去与 JMS 的连接后无法重新连接。服务器重新启动、网络故障时会发生连接丢失...阻止重新连接的原因是“ClientID 已在使用中”。错误。

摘自 JMS 日志:

“连接 guest@10.0.0.106:2390 的客户端尝试使用已在使用的客户端 ID ABC

冲突的 clientID ABC 由本地连接 guest@10.0.0.106:1098 拥有"

所有服务器都有不同的 clientID。在服务器 10.0.0.106 失去与 JMS 的连接之前,远程端口 1098 上的连接已经存在。服务器 ABC 上的端口 1098 甚至没有打开。

问题发生时,我尝试使用TCPview 。在端口 1098 上与服务器的旧连接仍然存在。

我有两个问题:

JMS 是否有可能将控制数据包发送到不存在的远程端口 1098 而没有错误?

操作系统无法识别连接断开的原因可能是什么?

0 投票
1 回答
1286 浏览

glassfish - 如何使用命令行管理工具创建 jms 连接工厂?

我正在使用带有 glassfish 的 openmq,我目前使用 gf web 管理工具来创建连接工厂和目的地。我找到了使用 imqcmd 实用程序创建目标的命令,但是没有运气创建连接工厂。谁能指出我使用 openmq 命令行工具创建队列连接工厂的正确方向?

这里是我用来创建目的地的参考

imqcmd create dst -tq -n MyFavoriteQueue -u admin

0 投票
1 回答
6972 浏览

glassfish - 如何以编程方式创建 jms 主题和主题连接工厂?

任何人都知道您是否可以通过编程方式创建主题及其连接工厂?目前我使用 glassfish 管理实用程序来创建我的主题及其连接工厂。如果我无法在代码中创建它,glassfish/openmq 是否有我可以使用的默认主题和 conn 工厂?

0 投票
1 回答
910 浏览

jms - 如何配置 OpenMQ 不将所有正在进行的消息存储在内存中?

我已经为我们的通知服务负载测试不同的 JMS 实现。ActiveMQ、HornetQ 和 OpenMQ 都没有按预期运行(可靠性和消息优先级问题)。但是现在我使用 OpenMQ 取得了最好的结果。期待两个可能只是配置错误的问题(我希望如此)。一种带有 JDBC 存储

测试场景:

一个队列的 2 个生产者发送不同优先级的消息。1 消费者从队列中以恒定速度消费,其速度略低于生产者生产的速度。OpenMQ 独立运行并使用 PostgreSQL 作为持久性存储。所有消息都是从 Apache Camel 路由发送和使用的,并且都是持久的。

问题:

  1. 大约 50000 条消息后,我在 OpenMQ 日志中看到有关内存不足的警告和错误(默认 cinfiguration 具有 256Mb 堆大小)。生产由经纪人进行,一段时间后经纪人完全停止调度。Broker JVM 内存使用量已达到最大值。

我必须如何配置代理以实现该目标:

  • 代理不依赖于队列大小(最多 1 000 000 条消息)和内存限制。性能不是问题——只有可靠性。

那可能吗?

0 投票
1 回答
3242 浏览

spring - 使用 Open MQ 时的 Spring JMS 会话问题

我正在使用 spring-jms-3.0.6.RELEASE 并打开 MQ。关于为什么会引发以下异常的任何想法?

网页.xml:

testlistener-context-api.xml:

testmsg-context-api.xml:

0 投票
0 回答
751 浏览

glassfish - Glassfish - 使用 OpenMQ 连接到 SonicMQ 不起作用

我有一个运行版本 3.1.2 的 glassfish 实例。我需要通过 JMS 连接到远程服务器。远程系统 - 我认为 - 使用 SonicMQ。

我有一个 JAR 示例(来自远程服务器公司),我可以毫无问题地与远程服务器通信。

我想我的 glassfish 配置正确,但无法连接到远程服务器。连接/使用 glassfishs ping 功能时,我总是遇到同样的错误:

端口 12506 是正确的,因为没有 PortMapper。AddressList参数是mqtcp://remote.server.com:12506代替mq://remote.server.com:12506

谷歌了半天的解决方案,但没有找到任何东西。有人建议吗?我究竟做错了什么?

0 投票
4 回答
12503 浏览

java - 在 JMS 异步消息处理中,只要调用 onMessage(),就会从队列中删除消息

要求:我希望消息在队列中持续存在直到onMessage()成功执行。如果在执行期间发生任何异常onMessage()并且如果它未被处理,则应将消息重新传递给侦听器。

我将 Glassfish v2 作为应用程序服务器。我正在使用 OpenMQConnectionFactory 和 JmsTemplate 在队列上发送消息。 请注意,我没有使用 MDB。

我尝试将 AUTO_ACKNOWLEDGE 作为确认模式,但在未重新传递异常引发的消息时在侦听器中。

消息生产者.java

公共无效发送消息(最终字符串响应流){

SampleJMSConsumer.java

然后我尝试this.jmsTemplate.setSessionAcknowledgeMode(Session.CLIENT_ACKNOWLEDGE);在我调用的侦听器中使用并在我调用 message.acknowledge();catch块中调用session.recover()仍然消息未重新传递。

SampleJMSConsumer.java

}

当我在调试模式下运行程序并在代理管理控制台中的队列上发送消息时,我能够看到消息的数量,但只要调用 onMessage() 的消息数量减少一。这意味着消息被消费并从队列中删除。该消息是否被视为“已送达”?请帮助我理解为什么发生异常时消息没有重新传递?

提前致谢。