问题标签 [spring-jms]
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.
spring - Spring DefaultMessageListenerContainer MDP 初始化
在 DefaultMessageListenerContainer 初始化上执行初始化的最佳方法是什么?目前我正在等待第一条消息,并使用一个不太漂亮的布尔变量来跟踪它。有没有更好的办法 ?我想在消息驱动 POJO 启动后读取某些数据并将其加载到缓存中,因此消息处理速度更快。
(已编辑)
Spring 配置片段:
我想在侦听器收到任何消息之前完成一些初始化。
spring-annotations - Spring DefaultMessageListenerContainer/SimpleMessageListenerContainer (JMS/AMQP) 注解配置
因此,我正在开展一个项目,其中许多团队都使用通用服务并遵循通用架构。正在使用的服务之一是消息传递,目前是带有 ActiveMQ 的 JMS。几乎所有团队都需要遵循一套严格的规则来创建和发送消息,即一切都是 pub-subscribe 并且发送的消息有点像下面这样:
'jsonPayload' 来自一个所有团队都从其扩展的基类,因此它具有共同的属性。
所以基本上在 JMS 中,每个人总是发送相同类型的消息,但是发送到不同的 ActiveMQ 主题。通过 JMS 发送消息 (WorkDTO) 时,首先将其转换为 JSON 对象,然后在 TextMessage 中发送。
每当团队希望为某个主题创建订阅者时,他们都会创建一个 DefaultMessageListenerContainer 并对其进行适当配置以接收消息(我们使用基于 Java 的 Spring 配置)。基本上,团队定义的每个 DefaultMessageListenerContainer 都几乎相同,除了接收消息的目的地和消息处理程序。
我想知道在这种情况下如何通过注释进一步抽象消息配置?这意味着,由于几乎每个人都必须遵循相同的要求,因此以下内容是否有用:
当然,我省略了有关如何使用 @Listener 注释配置 DefaultMessageListenerContainer 的部分。我开始研究 BeanFactoryPostProcessor 来创建必要的类并将它们添加到应用程序上下文中,但我不知道如何做所有这些。
我问这个问题的原因是我们正在从 JMS/ActiveMQ 切换到 AMQP/RabbitMQ,并且希望通过使用注释来进一步抽象消息传递配置。我知道 AMQP 不像 JMS,所以配置细节会略有不同。我不相信我们会从 AMQP 切换到其他东西。
在这里,团队只需要知道目的地的名称以及他们是否想让他们的订阅持久。
这只是最近突然出现在我脑海中的事情。对此有什么想法吗?
我不想做一些过于复杂的事情,所以另一种选择是创建一个方便的方法,它返回一个预先配置的 DefaultMessageListenerContainer 给定一个目的地和一个消息处理程序:
java - 与 JMS 主题的同步行为
我有下面的流伪代码,它使用队列发送消息,然后同步收听主题。底层 JMS 提供程序是 Tibco EMS。
现在,我使用创建的同一个对象收听一个主题session
,然后等到有响应。
我面临的问题是消息对象显示为空。我使用 jms 监控工具进行了测试,主题确实有一些消息,但上面的代码即使在 60 秒后也无法接收到它。
知道我在这里想念什么吗?
jms - 未添加 JMS 消息
我在使用 HornetQ 时遇到了一个奇怪的情况。
我的应用程序架构 -
- JMS 提供者:HornetQ(独立服务器,未用于其他任何用途。我在此服务器上创建了 2 个队列,例如 Q1 和 Q2)。
- 生产者:部署在单独机器上的 Web 应用程序。此应用程序创建“ObjectMessage”实例,将“Job”类实例作为参数传递给“ObjectMessage.setObject()”方法,并将消息添加到 Q1。使用 Spring JMS。
在将消息添加到队列之前,我还在消息中设置了一个名为“AGENT”的字符串属性。
奇怪的是,如果我调用 ObjectMessage.setStringProperty("AGENT", null) 或者我不将属性添加到消息本身,则消息不会添加到 Q1。但是,这不会在第二季度发生,我可以在 HornetQ 的 JMX 控制台中看到该消息。
我应该注意一些特定于队列的配置吗?
为措辞松散道歉 - 我和我的团队一直面临着试图解决这个问题的艰难时期。
谢谢。
spring - Spring JMS 监听器中的 HttpservletRequest 和响应
有人可以告诉是否有办法在 Spring JMS 侦听器类中获取 HttpServletRequest 和 HttpServletResponse ?我的 JMS 监听器在 springContext.xml 文件中定义。
jms - 使用 ActiveMq 和 Atomikos 两次出队 JMS 消息
我使用 ActiveMq 作为 JMS 服务器,使用 Atomikos 作为事务管理器。
在 ActiveMq Admin Web 界面上,我看到一条消息已入队,但有 2 条(!)消息已出队。
但是jms消费者只处理一次消息,没有重复处理。当我使用简单的 Spring JmsTransactionManager 时,有一个入队消息和一个出队消息。该问题仅出现在 Atomikos JTA 事务管理器中。
问题是什么?如何配置 Atomikos 看不到两次出队的消息?
我的配置如下。它几乎与教程中的相同。顺便说一句,Atomikos 的 spring 集成示例运行良好,但它使用 Spring 2.0,而我使用 Spring 3.1。
消费类是:
spring - 消息侦听器中的消息重新传递和错误处理
我们有生产者以比消费者可以消费的速度更快的速度生产消息。我们使用 Spring JMS 集成作为消费者端技术栈。目前我们正在使用AUTO_ACKNOWLEDGE
模式。
在onMessage()
侦听器的方法中,收到后我们计划将客户端作业提交到作业队列并从该onMessage()
方法返回。这意味着如果 a) 处理失败或 b) 我们的服务器在处理过程中出现故障,我们将无法恢复。
我们查看了使用的选项CLIENT_ACKNOWLEDGE
,但这意味着确认具有较高时间戳的消息会自动确认具有较小时间戳的所有消息。这对我们来说显然是不可取的,因为成功处理具有较新时间戳的消息并不意味着所有具有较旧时间戳的消息都被完全处理。实际上,我们正在查看每条消息确认。但是,我在某处读到这意味着存在一些设计缺陷。
另一种选择是使用SessionAwareMessageListener
Spring 提供的接口。使用此接口的合同规定,如果JMSException
从消息中抛出a,onMessage
则将重新传递。但是,我不完全确定如何将其用于我们的目的。
虽然我自己对此进行了深入研究,但我们将不胜感激你们的任何帮助。
java - 从远程机器访问 Grails ActiveMQ
我是 JMS 的新手。我阅读了 JMS 和 ActiveMQ 插件文档,但仍然不清楚。
我正在尝试构建一个系统,其中托管在机器 A 上并嵌入 ActiveMQ 的 Grail 应用程序应该能够发送消息。另一个托管在机器 B 上且仅带有 JMS 插件的 Grails 应用程序应该能够接收消息并对其做出响应。
阅读文档后,我在机器 A 上创建了一个 grails 应用程序,控制器将消息发送到机器 A 上的服务,并在控制台上显示消息。现在我正在尝试在机器 B 上实现具有类似行为的服务。
在 Machine B 上配置后,我的 resource.groovy 如下所示:
机器 A 和 B 上的服务如下所示:
机器 A 上的控制器:
机器 A:安装了插件的 Unix 上的 Grails 2.1(ActiveMQ 和 JMS)
机器 B:安装了插件的 Unix 上的 Grails 2.1 (JMS)
目前的问题:
当机器 A 上的控制器发送消息时,机器 A 上的服务会在控制台中显示消息,但机器 B 不会
预期:机器 B 也应该收到消息
java - Spring MDP - 如何在收到错误消息时将其关闭
我DefaultMessageListenderContainer
在 WebSphere MQ v7.1 上使用 Spring 侦听输入队列来实现 Spring MDP。如果有错误消息进入(导致RuntimeException
),当前发生的情况是,事务被回滚,并且消息被放回队列中。然而,MDP 进入了一个无限循环。
问题 1:根据我的要求,我希望能够在看到错误消息时关闭处理。无需重试。是否可以优雅地关闭消息侦听器以防它看到错误消息(与粗略System.exit()
或那种方法相反)?我绝对不喜欢它进入无限循环。
编辑:
问题2:有没有办法停止或暂停监听器容器以停止进一步处理消息?
weblogic - Java Cannot dequeue a message from Oracle AQ
I'm trying to deploy an application in weblogic which is based on a Spring DefaultMessageListenerContainer. I have set up weblogic using a foreign server to provide access to the AQ connection factory and destination under JNDI names.
I have a simple message listener which logs the messages it receives (just a test), I wrap this message listener in a Spring DMLC shown below:
Whenever I try deploy this application in weblogic I get the following exception from the DMLC:
Does anyone know how to resolve this so that java can receive the messages on the queue?
Thanks