问题标签 [jmstemplate]

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 投票
1 回答
3533 浏览

jms - 看不到我明确设置的消息属性(Spring/JMS/MQ)

两个独立的进程通过 JMS over MQ 进行通信。

作者设置了一个字符串属性:

MessageAction是执行的,如日志中所示:

Setting message property (GmmThreadId, CASHFLOW-1234)


阅读器使用消息选择器来获取此消息。(使用 Spring 的 JmsTemplate v1 -我知道的旧版本,但它已融入我们供应商的框架,我们不得不使用它。

template.receiveSelected(queue, "GmmThreadId = 'CASHFLOW-1234' or GmmThreadId IS NULL");

队列中唯一的消息是日志显示作者设置了消息属性的消息。在读者的日志中,我列举了属性并尝试记录 GmmThreadId 的值。它还显示属性 GmmThreadId 不存在。

请注意,如果我的消息选择器只有,"GmmThreadId = 'CASHFLOW-1234'"那么什么都不会出队。

使用 WebSphere MQ Explorer 查看消息,我找不到任何地方查看应用程序集消息属性。消息类型是 MQSTR,如果这有什么不同的话。

读取器和写入器应用程序都在 WebSphere v6 中运行。

我哪里错了?

0 投票
1 回答
2033 浏览

spring - JmsTemplate 不支持延迟初始化

我们正在开发一个基于 Spring 的应用程序,该应用程序利用 JMSTemplate 向/从 Tibco EMS 服务器发送/接收 JMS 消息。

在当前实施中,如果 EMS 服务器关闭,则在 TomCat 启动期间项目将失败。这是因为在 Spring 配置文件中,我们有试图连接到 EMS 服务器的 JMS 相关 bean。

因此,一种解决方案是让所有与 JMS 相关的 bean 仅在需要时启动(而不是在启动期间)。为此,我们将所有与 JMS 相关的 bean 的 lazy-init 属性设置为 true。

摘录:

问题出在:如果我们lazy-init="true"只在jmsTransactionManager bean 上设置,项目加载正常,没有问题。但是,一旦我们也设置lazy-init="true"jmsTemplateWithClientAcknowledge bean,项目就会失败。相同的失败原因:无法连接到 EMS 服务器

日志中的错误:

org.springframework.beans.factory.BeanCreationException:创建名为“jmsMsgSenderImpl”的bean时出错:注入自动装配的依赖项失败;嵌套异常是 org.springframework.beans.factory.BeanCreationException:无法自动装配字段:私有 org.springframework.jms.core.JmsTemplate com.cv.pub.engine.service.impl.JmsMsgSenderImpl.jmsTemplate;嵌套异常是 org.springframework.beans.factory.BeanCreationException:在 ServletContext 资源 [/WEB-INF/spring/jms-context.xml] 中定义名称为 'jmsTemplateWithClientAcknowledge' 创建 bean 时出错:设置时无法解析对 bean 'internalJmsQueueConnectionFactory' 的引用bean 属性 'connectionFactory'; 嵌套异常是 org.springframework.beans.factory.BeanCreationException: Error created bean with name ' 在 ServletContext 资源 [/WEB-INF/spring/jms-context.xml] 中定义的 internalJmsQueueConnectionFactory':在设置 bean 属性 'targetConnectionFactory' 时无法解析对 bean 'targetJmsQueueConnectionFactory' 的引用;嵌套异常是 org.springframework.beans.factory.BeanCreationException:在 ServletContext 资源 [/WEB-INF/spring/jms-context.xml] 中定义名称为“targetJmsQueueConnectionFactory”的 bean 创建错误:调用 init 方法失败;嵌套异常是 javax.naming.ServiceUnavailableException:无法查询 JNDI:无法连接到 tcp://localhost:7222 的服务器 [根异常是 javax.jms.JMSException:无法连接到 tcp://localhost 的服务器:7222] 设置 bean 属性“targetConnectionFactory”时无法解析对 bean“targetJmsQueueConnectionFactory”的引用;嵌套异常是 org.springframework.beans.factory.BeanCreationException:在 ServletContext 资源 [/WEB-INF/spring/jms-context.xml] 中定义名称为“targetJmsQueueConnectionFactory”的 bean 创建错误:调用 init 方法失败;嵌套异常是 javax.naming.ServiceUnavailableException:无法查询 JNDI:无法连接到 tcp://localhost:7222 的服务器 [根异常是 javax.jms.JMSException:无法连接到 tcp://localhost 的服务器:7222] 设置 bean 属性“targetConnectionFactory”时无法解析对 bean“targetJmsQueueConnectionFactory”的引用;嵌套异常是 org.springframework.beans.factory.BeanCreationException:在 ServletContext 资源 [/WEB-INF/spring/jms-context.xml] 中定义名称为“targetJmsQueueConnectionFactory”的 bean 创建错误:调用 init 方法失败;嵌套异常是 javax.naming.ServiceUnavailableException:无法查询 JNDI:无法连接到 tcp://localhost:7222 的服务器 [根异常是 javax.jms.JMSException:无法连接到 tcp://localhost 的服务器:7222] ServletContext 资源 [/WEB-INF/spring/jms-context.xml] 中定义的 targetJmsQueueConnectionFactory':调用 init 方法失败;嵌套异常是 javax.naming.ServiceUnavailableException:无法查询 JNDI:无法连接到 tcp://localhost:7222 的服务器 [根异常是 javax.jms.JMSException:无法连接到 tcp://localhost 的服务器:7222] ServletContext 资源 [/WEB-INF/spring/jms-context.xml] 中定义的 targetJmsQueueConnectionFactory':调用 init 方法失败;嵌套异常是 javax.naming.ServiceUnavailableException:无法查询 JNDI:无法连接到 tcp://localhost:7222 的服务器 [根异常是 javax.jms.JMSException:无法连接到 tcp://localhost 的服务器:7222]

我将非常感谢您的想法和帮助!

0 投票
1 回答
229 浏览

spring - Spring JMS 注入导致应用程序无法启动

我们有一个 Spring 应用程序,它发布和侦听远程应用程序服务器上的队列。我的发布者和侦听器在我们自己的应用程序服务器中基于 spring 侦听。

我们的测试环境面临的问题之一是另一个应用程序。服务器没有启动,所以当我们的测试应用程序启动并尝试使用其connectionFactory注入 JmsTemplate 时,它​​会爆炸,因为它不是有效的连接并且我们的整个应用程序无法加载。这让我们小组中与 JMS 无关的其他开发人员感到悲痛。他们想做的只是运行并测试他们的代码,但JmsTemplate connectionFactory 已关闭。

有没有人有任何建议启用 spring 忽略一些错误的注入,这将允许我们的应用程序正常启动?谢谢

0 投票
2 回答
8665 浏览

spring - 如何使用 Spring 在我的应用程序中发送 SMS?

我想用 JMS 和 Spring 发送短信,我该怎么做?你能给我教程或样本吗?

0 投票
4 回答
59333 浏览

java - ACTIVEMQ-发布者订阅者hello world示例

有两个程序:订阅者和发布者......订阅者能够将消息放到主题上并且消息发送成功。当我在浏览器上检查 activemq 服务器时,它显示 1 msg enqueued 。但是当我运行消费者代码时,它没有收到消息

这是生产者代码:

运行此代码后,控制台的输出为:

这是消费者代码:

运行此代码后,它没有显示任何内容。有人可以帮助我克服这个问题吗?

0 投票
1 回答
309 浏览

jms - 未添加 JMS 消息

我在使用 HornetQ 时遇到了一个奇怪的情况。

我的应用程序架构 -

  • JMS 提供者:HornetQ(独立服务器,未用于其他任何用途。我在此服务器上创建了 2 个队列,例如 Q1 和 Q2)。
  • 生产者:部署在单独机器上的 Web 应用程序。此应用程序创建“ObjectMessage”实例,将“Job”类实例作为参数传递给“ObjectMessage.setObject()”方法,并将消息添加到 Q1。使用 Spring JMS。

在将消息添加到队列之前,我还在消息中设置了一个名为“AGENT”的字符串属性。

奇怪的是,如果我调用 ObjectMessage.setStringProperty("AGENT", null) 或者我不将属性添加到消息本身,则消息不会添加到 Q1。但是,这不会在第二季度发生,我可以在 HornetQ 的 JMX 控制台中看到该消息。

我应该注意一些特定于队列的配置吗?

为措辞松散道歉 - 我和我的团队一直面临着试图解决这个问题的艰难时期。

谢谢。

0 投票
1 回答
874 浏览

spring - 如何使用 Spring JmsTemplate 延迟 JMS 消息到达队列

我不想用接收器超时来阻止消息使用者,因为据我了解,这“绑定”了队列服务器池中的一个线程(并且我们配置了多个队列)。那么如何在没有自定义线程的情况下延迟发送消息(工作由 EJB 2 会话 bean 执行)?如果有帮助,JBoss Messaging 1.x 就是提供者。

0 投票
0 回答
2943 浏览

spring - 使用 Spring JmsTemplate 发送 JMS 消息

我有一台服务器需要将消息发送到单独的应用程序。我正在使用 Spring JmsTemplate,但是,我在启动和运行配置时遇到了一些问题。

现在,我收到以下异常:

(如果你愿意,我可以发布完整的堆栈跟踪,但这只是那些嵌套异常的长版本。)

“接收超时”部分听起来像是在尝试接收消息,我不想这样做。这里的所有内容都是从几个不同的示例和 SO 帖子中汇总而来的,我很难理解所有不同的部分以及它们在做什么。除了可能导致错误的任何原因之外,如果我没有收到消息,还有什么我不需要的吗?

在我的 JmsQueueSender 类(发送消息)中:

在我的应用程序上下文中:

0 投票
1 回答
305 浏览

spring - JMS/spring/AMQ 不异步处理消息的问题或混淆

我们有一种情况,我们设置了一个组件来远程使用 Spring Batch 运行批处理作业。我们发送一条带有作业 xml 路径、名称、参数等的 JMS 消息,并在调用批处理客户端上等待来自服务器的响应。

服务器读取队列并调用适当的方法来运行作业并返回结果,我们的消息传递框架通过以下方式完成:

理想情况下,我们希望能够调用两次 runJobSync 方法,并让两个作业同时运行。我们有一个单元测试,它做类似的事情,没有工作。我意识到这段代码不是很好,但是,这里是:

最终列表结果 = Collections.synchronizedList(new ArrayList());

当我们运行该测试时,线程 2 首先完成,因为它等待了 500 毫秒,而线程 1 等待了 1 秒:

这很好用。当我们在野外运行两项远程作业时,一项需要大约 50 秒才能完成,另一项设计为立即失败并返回,这不会发生。

启动 50 秒作业,然后立即启动即时失败作业。客户端打印我们发送了一条消息,请求作业运行,服务器打印它收到了 50 秒的请求,但在处理第二条消息之前一直等到 50 秒的作业完成,即使我们使用了 ThreadPoolExecutor。

我们正在使用自动确认运行事务。

做一些远程调试,来自 AbstractPollingMessageListenerContainer 的 Consumer 没有显示未处理的消息(所以 consumer.receive() 显然只是一遍又一遍地返回 null )。amq 代理的 webgui 显示 2 个入队,1 个双端队列,1 个已调度,1 个在调度队列中。这向我表明,有些东西正在阻止 AMQ 让消费者“拥有”第二条消息。(预取为 1000 btw)这显示为特定队列的唯一消费者。

在过去的几天里,我自己和其他一些开发人员一直在四处寻找,但几乎一无所获。任何建议,如果这是预期的行为,我们配置错误,或者在这里会被破坏。

远程调用的方法是否重要?目前,作业处理程序方法使用执行程序在不同的线程中运行作业并执行 future.get() (额外的线程是出于与日志记录相关的原因)。

任何帮助是极大的赞赏

0 投票
0 回答
948 浏览

transactions - 使用 JMS 从 AQ 出列 ADT(用户类型)消息

我需要通过 JMS 使用带有 ADT 有效负载消息的 Oracle AQ。入队很简单(请参阅文章http://blog.nominet.org.uk/tech/2007/10/04/spring-jms-with-oracle-aq/):

MyMessageCreator 将 myADTMessage(使用 jpub 创建)包装到 Message 中。它在事务中工作正常 - 异常回滚 enquing 并且消息没有插入到队列中。

问题始于出队。我必须同步接收消息,所以第一次尝试是:

我得到“必须为具有 ADT 有效负载的目的地指定 JMS-137 有效负载工厂”

我找不到该问题的解决方案,因此我尝试手动初始化底层对象:

其中 aqConnectionFactory 是自动装配的 Spring bean。

消息已正确出列,但在本地 jms 事务中!如果没有 queueSession.commit() 他们留在队列中,当我将创建会话更改createQueueSession(false, Session.AUTO_ACKNOWLEDGE)为时,出队正在自动提交模式下执行。

所以我在这里卡住了。有谁知道,如何使用 JmsTemplate 通过 receive() 方法将 ADT 类型消息出列,或者如何将 AQjmsSession 推送到现有事务中?