问题标签 [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 - FailoverTransport 多次实例化
我正在使用 spring-jms 3.0.5 版和 activeMQ 4.5.2 版。当部署到 Tomcat 时,一切似乎都正常工作。当部署到 WebSphere 时,似乎有四个单独的故障转移传输被实例化,并且我的 MessageListener 实现对于发布到我的主题的每条消息都会收到四次相同的消息。
这是我的配置:
这是我的消息监听器:
这是我在日志中看到的(仅在 WebSphere 上)
然后,一旦我发布到该主题,我就会看到:
我已经看到一些迹象表明,如果我设置了,可能会出现这种行为concurrentConsumers > 1
,但据我所知,我没有。如何确保我只收到一次这些消息?
更新:
通过调试登录,我还看到:
为什么 Spring 要创建四个这样的 bean?
spring - 使用 Spring 管理 JMS 事务
我正在尝试使用 Spring 和 HornetQ 管理 JMS 事务。
这是我写的代码:
我正在从队列中进行同步读取,超时设置为 0,因为我不想阻止读取。因此,我必须检查是否确实收到了某些东西。
这是我的applicationContext.xml的摘录:
我遇到的问题很奇怪:第一次收到消息,handleMessage失败,所以我回滚事务。然后没有更多的事情发生。如果我检查 JMX 控制台,我可以看到队列中有一条消息。现在,如果我重新启动 JBoss,消息会按预期一次又一次地接收。
也许我的配置有问题,但为什么它在重新启动后工作?
- 大黄蜂 2.2.10
- JBoss 5.1.0
- 春天 3.1.2
更新
启用调试后,我第一次看到:
调试 [org.springframework.jms.connection.JmsTransactionManager] (baseScheduler-1) 创建名称为 [null] 的新事务:PROPAGATION_REQUIRED,ISOLATION_DEFAULT
在第一次回滚之后,在随后的接收和回滚中,我看到:
DEBUG [org.springframework.jms.connection.JmsTransactionManager] (baseScheduler-1) 参与现有事务
相反,在重新启动 JBoss 后,我读到事务实际上已回滚:
DEBUG [org.springframework.jms.connection.JmsTransactionManager] (baseScheduler-1) 启动事务回滚 2012-11-05 09:54:14,436 DEBUG [org.springframework.jms.connection.JmsTransactionManager] (baseScheduler-1) 回滚 JMS会话上的事务
那么,为什么回滚不是第一次发生,而一旦我重新启动服务器,它就会一直发生?我究竟做错了什么?
spring - 单点对点队列和多个监听器
我有一个“点对点”IBM MQ 队列接收来自多个生产者的消息。我的应用程序使用队列中的消息。我正在使用 spring 'jmstemplate" 和 "DefaultMessageListenerContainer" 来异步使用消息。
我的应用程序在 2 个 jvm 上运行,这意味着每个 jvm 上有 2 个活动的侦听器正在侦听同一个队列。
来回答我的问题,如果有消息...
1) 侦听器如何知道消息到达队列?
2)在两个听众中,哪一个会收到消息?将消息分发给听众的方法是什么?
3) 我可以将单个队列的听众数量扩展到“N”个吗?如果我增长到 10 个听众,缩放是如何工作的?消息是如何分发给听众的?
4) MQ 服务器如何确保同一条消息不会发送到多个监听器?
可能这些都是简单的问题,但无法深入了解上述场景的工作原理。请分享你的想法...
jms - JMS / ActiveMQ:发送带有对象作为类成员的对象
我正在使用 ActiveMQ(带有 Spring)将消息发送到远程 OSGi-Container。这工作得很好,但有一个问题。
我有两个实现可序列化的类。一个类是另一个类的类成员,如下所示:
因此,当发送 Parent 实例时,Parent 的 Member 为 null。
希望你明白我的问题是什么:)
编辑:有趣的问题:我的班级中有一个 java.util.date 被正确序列化,但这是唯一的,所有双打等都是空的
spring - Active MQ + Spring 3.0 - 请求/响应实现 - 示例程序得到响应但消息消费者计数不断上升并等待永远
我正在尝试示例项目来实现 Spring 3 + Active MQ 请求/响应同步。我创建了一个 spring 配置文件,一个将消息放入队列的消息生产者和一个消费消息并返回响应的消息消费者......
我收到了回复...但是我的示例程序似乎没有结束...当我检查 Apache Active MQ 管理控制台时,我发现每次运行测试类时消费者数量都会不断增加...我必须在 Eclipse 中手动终止它,以便在管理控制台中减少计数...
我在这里提到了这个线程 -堆栈溢出线程- 遇到同样问题的人.. 但看起来我已经有了这个解决方案,但仍然没有看到我的问题得到解决
所以这是我的代码
请求者类
公共类请求者{
}
消息监听类
公共类 TestMessageListener 实现 MessageListener {
}
工人客户端类
公共类 WorkerClient 实现 ApplicationContextAware {
终于到了测试班
}
那么如何修复消息消费者返回和我的测试类结束?请帮忙....
java - 如何在 weblogic 10.3 服务器上延迟春季 JMS 消息
我想将消息传递延迟特定时间,这对于每条消息都会有所不同。
我参考了推荐使用 的weblogic 10.3 WLMessage 文档javax.jms.Message.getIntProperty("JMS_BEA_DeliveryTime")
。
但是我无法弄清楚如何设置JMS_BEA_DeliveryTime
为INTEGER
. 我期待它是long
。
我无法找到有关此属性的任何文档JMS_BEA_DeliveryTime
来取消设置和使用它。任何人都可以举例说明如何设置所需的交货时间或链接到使用此属性的文档。
我的代码看起来像是 Spring JMS 模板的典型用法:
我想知道是否可以在返回消息之前设置传递时间的标题。
apache-camel - Camel - 使用自定义 jmsOperations:无法转换为 org.apache.camel.component.jms.JmsConfiguration$CamelJmsTemplate
我想使用自定义 jmsOperations,当我尝试获得类转换异常时:无法转换为 org.apache.camel.component.jms。JmsConfiguration$CamelJmsTemplate
配置:
我创建的示例类
为什么我要尝试 jmsOperations:我只需要维护原始的 JMSPriority。是的,我确实尝试过preserveQoS explicitQoS [启用等的各种组合。它要么将所有优先级设置为4;要么将所有优先级设置为4。或尽管设置了 eg=6 优先级],但优先级仍然为零。通过创建我自己的 jmsOperations 并显式传输 JMSPriority 值。
异常跟踪:
原因:org.apache.camel.FailedToCreateProducerException:无法为端点创建生产者:端点 [jmsErf://queue:MQDEV.MYQ.ERROR]。原因:java.lang.ClassCastException: blabla.MyJmsTemplate 无法在 org.apache.camel.component.jms.JmsProducer.testConnectionOnStartup(JmsProducer.java:458) 处转换为 org.apache.camel.component.jms.JmsConfiguration$CamelJmsTemplate org.apache.camel.component.jms.JmsProducer.doStart(JmsProducer.java:469) 在 org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:60) 在 org.apache.camel.util.ServiceHelper。 startService(ServiceHelper.java:62) at org.apache.camel.impl.ProducerCache.doGetProducer(ProducerCache.java:387) ... 115 更多原因:java.lang.ClassCastException: bla.MyJmsTemplate 无法转换为 org. apache.camel.component.jms。
谁能指出我在骆驼中的 jmsOptions 用法?
java - 用于 Spring bean 初始化的 ActiveMQ 连接故障转移检测
我正在尝试捕获由于代理关闭而无法建立的 ActiveMQ 连接的异常。
使用以下代码:
如果代理关闭,则连接到代理的尝试进入无限循环。如果我将网址更改为
它进行了 2 次尝试,然后抛出异常。(这就是我想要的。)
现在,如果我使用以下 Spring Bean 初始化连接对象:
我收到一条错误消息,提示无法在 2 次尝试中连接,但随后,它仍会在每 5 秒后再次尝试连接,再次给出相同的错误消息并继续无限循环。
我想知道如何停止这种无限轮询并在失败的情况下捕获异常(可能正在使用 PostInit)。
java - 嵌套异常是 javax.jms.InvalidDestinationException: Unknown destination type - $Proxy115
当我尝试向队列发送消息时出现此异常。我的 jms 属性是通过 spring application-context 设置的。请找到为 jms 设置的 applicationContext.xml 属性。
我得到如下异常:
jms - 在 Spring JMS 侦听器池中防止饥饿和确保最小吞吐量的最佳方法
我有一个 JMS 侦听器池:
我正在寻找一种方法来确保我的某些消息类型不会饿死或阻止所有其他消息类型。示例:我希望我的池中至少有 M% 但不超过 N% 专用于处理 foo1 消息,即使这样的处理可能会不规律地停止。
目前,如果我让这种情况发生,那么我池中的所有 10 个线程最终都将专用于 foo1 消息。foo{2-4} 消息将不得不等待。我可以通过在我的 foo1 监听器上强制超时来防止这种饥饿,但是我没有达到我的吞吐量目标。
有没有一些简单的基于配置的方法来实现这一点?我可以同时运行两个 JMS 侦听器池吗?
或者我最安全的选择是设置两个完全不同的服务器队列,一个专用于 foo1 消息,另一个专用于 foo2-4?
理想情况下,我想做类似以下的事情。但是“并发”不是 jms:listener 的属性,只是 jms:listener-container:
谢谢。